diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 47224ace6..000000000 --- a/.gitattributes +++ /dev/null @@ -1,33 +0,0 @@ -# FIX CRLF always when developer has not set -# Linux/Mac: git config --global core.autocrlf input -# Windows: git config --global core.autocrlf true -# Auto detect text files and perform LF normalization -* text=auto -* eol=lf -*.js text -*.html text -*.npmignore text -*.md text -.ackrc text -.gitattributes text -.gitignore text -.jshintrc text -.nojekyll text -.travis.yml text -LICENSE text -# Avoid creation of unnecessary big commit objects -# For these files we do not want to see text diff for -*.min.* binary minified -*js.map* binary -*.ogg binary -*.svg binary -*.mtl binary -*.obj binary -*.jpg binary -*.jpeg binary -*.png binary -*.wav filter=lfs diff=lfs merge=lfs -text -*.psd filter=lfs diff=lfs merge=lfs -text -*.blend filter=lfs diff=lfs merge=lfs -text -*.psb filter=lfs diff=lfs merge=lfs -text -assets/raw_assets/*.* filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore deleted file mode 100644 index b7431f18c..000000000 --- a/.gitignore +++ /dev/null @@ -1,51 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* - -# Runtime data -pids -*.pid -*.seed - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules -jspm_packages - -# Optional npm cache directory -.npm - -# Optional REPL history -.node_repl_history - -.DS_Store -yarn.lock - -exports/ -*.sw* -/build - -dump.rdb -.ghpages - -#Idea Project Files -idea/ -.idea/ diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 67b78c654..000000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License - -Copyright © 2018 Supermedium. - -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. diff --git a/README.md b/README.md deleted file mode 100644 index c3c463e53..000000000 --- a/README.md +++ /dev/null @@ -1,81 +0,0 @@ -# Moon Rider - -![moonrider](https://user-images.githubusercontent.com/674727/54646629-e91dc600-4a5c-11e9-8a6e-91e77f28523d.jpg) - -Surf the musical road among the moon, stars, and northern lights. - -A side project built by two people in a few months to show off VR running -inside a webpage. Built with HTML, JavaScript, and A-Frame. Not meant to be an -official game nor commerical product. Moon Rider is meant to be an open source -resource for the web developer community to learn from, and to push forward the -open WebXR initiative. - -![gif](https://user-images.githubusercontent.com/674727/58050249-ab442900-7b03-11e9-8763-913d42a26708.gif) - -Song maps are sourced from [beatsaver](https://beatsaver.com). Supports all browsers and headsets (incl. Quest). If -there are any issues, file an issue here on GitHub or leave a message in the -[Supermedium Discord](https://supermedium.com/discord). - -[**Try the site out now in your browser!**](https://supermedium.com/moonrider/) - -![](https://user-images.githubusercontent.com/674727/58050969-b8621780-7b05-11e9-9494-1db7cee9f69b.jpeg) - -Featuring various modes: - -- **Ride Mode** - Just sit back and enjoy the ride. -- **Punch Mode** - Crush the stars. -- **Viewer Mode** - Watch the beatmap within your browser. -- **Classic Mode** - Surf and slice along the musical road. - -Big thanks to @elliottate for helping out with this! - -## Development - -Have Node (< v12, recommended v11) and npm installed. - -``` -npm install -npm run start -``` - -Then head to `localhost:3000` in your browser. - -### Remixing and Forking - -Make this game your own! Some easy ways to mess around: - -- To modify or add more color palettes, change `src/constants/colors.js`. -- To change images, replace images in `src/assets/img/` folder. For example, - replace the moon at `src/assets/img/moon.png'. -- To change models, replace models in `src/assets/models/` folder. For example, - replace the arrow blocks at `src/assets/models/arrowblue.obj` or - `arrowred.obj`. -- To change sounds, replace sounds in `src/assets/sounds`. For example, replace - the hit sounds at `src/assets/sounds/`. -- Change various values such as `speed` in `src/state/index.js` or - `BEAT_PRELOAD_TIME` in `src/components/beat-generator.js` to mess with how - fast you travel along the curve, or how much reaction time until the notes - arrive to the player. - -Other ways such as adding more modes are more involved, but with knowledge of -A-Frame and JavaScript, is doable! - -### Test URL Parameters - -| URL Parameter | Description | -|-----------------------------------------|---------------------------------------------------------------| -| ?debugcontroller={classic, punch, ride} | Show controllers and move them with shift/ctrl + {h, j, k, l} | -| ?debugbeatpositioning={classic, punch} | Show all notes in possible positionings. | -| ?debugstate={loading, victory} | Show loading or victory screen. | -| ?skipintro=true | Skip introduction screen. | - -### Deploying to GitHub - -Showing off some crazy customizations? Enable GitHub Pages deployment to deploy -`gh-pages` branch, and then: - -``` -npm run deploy -``` - -The website will be available on `https://yourusername.github.io/moonrider/`. diff --git a/assets/fonts/Viga-OFL.txt b/assets/fonts/Viga-OFL.txt old mode 100755 new mode 100644 diff --git a/assets/fonts/Viga-Regular-Three.json b/assets/fonts/Viga-Regular-Three.json old mode 100755 new mode 100644 diff --git a/assets/fonts/Viga-Regular.json b/assets/fonts/Viga-Regular.json old mode 100755 new mode 100644 diff --git a/assets/fonts/Viga-Regular.png b/assets/fonts/Viga-Regular.png old mode 100755 new mode 100644 diff --git a/assets/img/backglow.png b/assets/img/backglow.png old mode 100755 new mode 100644 diff --git a/assets/img/downIcon.png b/assets/img/downIcon.png old mode 100755 new mode 100644 diff --git a/assets/img/enter-vr-button-background.png b/assets/img/enter-vr-button-background.png old mode 100755 new mode 100644 diff --git a/assets/img/favicon.png b/assets/img/favicon.png old mode 100755 new mode 100644 diff --git a/assets/img/genres.png b/assets/img/genres.png old mode 100755 new mode 100644 diff --git a/assets/img/molerat.jpg b/assets/img/molerat.jpg old mode 100755 new mode 100644 diff --git a/assets/img/slice.png b/assets/img/slice.png old mode 100755 new mode 100644 diff --git a/assets/img/stepback.png b/assets/img/stepback.png old mode 100755 new mode 100644 diff --git a/build/build.js b/build/build.js new file mode 100644 index 000000000..767ef2d79 --- /dev/null +++ b/build/build.js @@ -0,0 +1,1292 @@ +!function(e){var t=this.webpackHotUpdate;this.webpackHotUpdate=function(e,a){!function(e,t){if(!w[e]||!A[e])return;for(var a in A[e]=!1,t)Object.prototype.hasOwnProperty.call(t,a)&&(f[a]=t[a]);0==--y&&0===g&&k()}(e,a),t&&t(e,a)};var a,s=!0,n="5240b60f8d7cb42cee8a",r={},o=[],i=[];function c(e){var t=P[e];if(!t)return j;var s=function(s){return t.hot.active?(P[s]?-1===P[s].parents.indexOf(e)&&P[s].parents.push(e):(o=[e],a=s),-1===t.children.indexOf(s)&&t.children.push(s)):(console.warn("[HMR] unexpected require("+s+") from disposed module "+e),o=[]),j(s)},n=function(e){return{configurable:!0,enumerable:!0,get:function(){return j[e]},set:function(t){j[e]=t}}};for(var r in j)Object.prototype.hasOwnProperty.call(j,r)&&"e"!==r&&"t"!==r&&Object.defineProperty(s,r,n(r));return s.e=function(e){return"ready"===u&&h("prepare"),g++,j.e(e).then(t,(function(e){throw t(),e}));function t(){g--,"prepare"===u&&(v[e]||T(e),0===g&&0===y&&k())}},s.t=function(e,t){return 1&t&&(e=s(e)),j.t(e,-2&t)},s}function d(t){var s={_acceptedDependencies:{},_declinedDependencies:{},_selfAccepted:!1,_selfDeclined:!1,_selfInvalidated:!1,_disposeHandlers:[],_main:a!==t,active:!0,accept:function(e,t){if(void 0===e)s._selfAccepted=!0;else if("function"==typeof e)s._selfAccepted=e;else if("object"==typeof e)for(var a=0;a=0&&s._disposeHandlers.splice(t,1)},invalidate:function(){switch(this._selfInvalidated=!0,u){case"idle":(f={})[t]=e[t],h("ready");break;case"ready":x(t);break;case"prepare":case"check":case"dispose":case"apply":(b=b||[]).push(t)}},check:E,apply:R,status:function(e){if(!e)return u;l.push(e)},addStatusHandler:function(e){l.push(e)},removeStatusHandler:function(e){var t=l.indexOf(e);t>=0&&l.splice(t,1)},data:r[t]};return a=void 0,s}var l=[],u="idle";function h(e){u=e;for(var t=0;t0;){var n=s.pop(),r=n.id,o=n.chain;if((l=P[r])&&(!l.hot._selfAccepted||l.hot._selfInvalidated)){if(l.hot._selfDeclined)return{type:"self-declined",chain:o,moduleId:r};if(l.hot._main)return{type:"unaccepted",chain:o,moduleId:r};for(var i=0;i ")),k.type){case"self-declined":s.onDeclined&&s.onDeclined(k),s.ignoreDeclined||(R=new Error("Aborted because of self decline: "+k.moduleId+M));break;case"declined":s.onDeclined&&s.onDeclined(k),s.ignoreDeclined||(R=new Error("Aborted because of declined dependency: "+k.moduleId+" in "+k.parentId+M));break;case"unaccepted":s.onUnaccepted&&s.onUnaccepted(k),s.ignoreUnaccepted||(R=new Error("Aborted because "+u+" is not accepted"+M));break;case"accepted":s.onAccepted&&s.onAccepted(k),x=!0;break;case"disposed":s.onDisposed&&s.onDisposed(k),L=!0;break;default:throw new Error("Unexception type "+k.type)}if(R)return h("abort"),Promise.reject(R);if(x)for(u in A[u]=f[u],y(v,k.outdatedModules),k.outdatedDependencies)Object.prototype.hasOwnProperty.call(k.outdatedDependencies,u)&&(g[u]||(g[u]=[]),y(g[u],k.outdatedDependencies[u]));L&&(y(v,[k.moduleId]),A[u]=E)}var _,D=[];for(c=0;c0;)if(u=Z.pop(),l=P[u]){var C={},U=l.hot._disposeHandlers;for(d=0;d=0&&F.parents.splice(_,1))}}for(u in g)if(Object.prototype.hasOwnProperty.call(g,u)&&(l=P[u]))for(O=g[u],d=0;d=0&&l.children.splice(_,1);h("apply"),void 0!==p&&(n=p,p=void 0);for(u in f=void 0,A)Object.prototype.hasOwnProperty.call(A,u)&&(e[u]=A[u]);var q=null;for(u in g)if(Object.prototype.hasOwnProperty.call(g,u)&&(l=P[u])){O=g[u];var H=[];for(c=0;c1)for(var a=1;a=0;i--)(n=e[i])&&(o=(r<3?n(o):r>3?n(t,a,o):n(t,a))||o);return r>3&&o&&Object.defineProperty(t,a,o),o}function c(e,t){return function(a,s){t(a,s,e)}}function d(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function l(e,t,a,s){return new(a||(a=Promise))((function(n,r){function o(e){try{c(s.next(e))}catch(e){r(e)}}function i(e){try{c(s.throw(e))}catch(e){r(e)}}function c(e){e.done?n(e.value):new a((function(t){t(e.value)})).then(o,i)}c((s=s.apply(e,t||[])).next())}))}function u(e,t){var a,s,n,r,o={label:0,sent:function(){if(1&n[0])throw n[1];return n[1]},trys:[],ops:[]};return r={next:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(r[Symbol.iterator]=function(){return this}),r;function i(r){return function(i){return function(r){if(a)throw new TypeError("Generator is already executing.");for(;o;)try{if(a=1,s&&(n=2&r[0]?s.return:r[0]?s.throw||((n=s.return)&&n.call(s),0):s.next)&&!(n=n.call(s,r[1])).done)return n;switch(s=0,n&&(r=[2&r[0],n.value]),r[0]){case 0:case 1:n=r;break;case 4:return o.label++,{value:r[1],done:!1};case 5:o.label++,s=r[1],r=[0];continue;case 7:r=o.ops.pop(),o.trys.pop();continue;default:if(!(n=o.trys,(n=n.length>0&&n[n.length-1])||6!==r[0]&&2!==r[0])){o=0;continue}if(3===r[0]&&(!n||r[1]>n[0]&&r[1]=e.length&&(e=void 0),{value:e&&e[a++],done:!e}}}}function f(e,t){var a="function"==typeof Symbol&&e[Symbol.iterator];if(!a)return e;var s,n,r=a.call(e),o=[];try{for(;(void 0===t||t-- >0)&&!(s=r.next()).done;)o.push(s.value)}catch(e){n={error:e}}finally{try{s&&!s.done&&(a=r.return)&&a.call(r)}finally{if(n)throw n.error}}return o}function p(){for(var e=[],t=0;t1||i(e,t)}))})}function i(e,t){try{(a=n[e](t)).value instanceof y?Promise.resolve(a.value.v).then(c,d):l(r[0][2],a)}catch(e){l(r[0][3],e)}var a}function c(e){i("next",e)}function d(e){i("throw",e)}function l(e,t){e(t),r.shift(),r.length&&i(r[0][0],r[0][1])}}function v(e){var t,a;return t={},s("next"),s("throw",(function(e){throw e})),s("return"),t[Symbol.iterator]=function(){return this},t;function s(s,n){t[s]=e[s]?function(t){return(a=!a)?{value:y(e[s](t)),done:"return"===s}:n?n(t):t}:n}}function A(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,a=e[Symbol.asyncIterator];return a?a.call(e):(e=m(e),t={},s("next"),s("throw"),s("return"),t[Symbol.asyncIterator]=function(){return this},t);function s(a){t[a]=e[a]&&function(t){return new Promise((function(s,n){(function(e,t,a,s){Promise.resolve(s).then((function(t){e({value:t,done:a})}),t)})(s,n,(t=e[a](t)).done,t.value)}))}}}function w(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}function S(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)Object.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t.default=e,t}function E(e){return e&&e.__esModule?e:{default:e}}},,,,function(e,t,a){"use strict";a.r(t),a.d(t,"BEAT_ANTICIPATION_TIME",(function(){return r})),a.d(t,"BEAT_PRELOAD_TIME",(function(){return o})),a.d(t,"PUNCH_OFFSET",(function(){return i})),a.d(t,"SWORD_OFFSET",(function(){return c}));a(6);let s=AFRAME.utils.getUrlParameter("skip")||0;s=parseInt(s,10);const n=AFRAME.utils.getUrlParameter("debugmines"),r=1.1,o=1.1,i=.5,c=1.5,d=AFRAME.utils.device.isMobile(),l=d?2e3:3500,u=d?7500:1e4;function h(e,t){return e._time-t._time}if(AFRAME.registerComponent("beat-generator",{dependencies:["stage-colors"],schema:{challengeId:{type:"string"},gameMode:{type:"string"},difficulty:{type:"string"},beatmapCharacteristic:{type:"string"},has3DOFVR:{default:!1},hasSongLoadError:{default:!1},isPlaying:{default:!1},isZipFetching:{default:!1},menuSelectedChallengeId:{type:"string"},songDuration:{type:"number"},speed:{type:"number"}},orientationsHumanized:["up","down","left","right","upleft","upright","downleft","downright"],horizontalPositions:[-.75,-.25,.25,.75],horizontalPositionsHumanized:{0:"left",1:"middleleft",2:"middleright",3:"right"},positionHumanized:{topLeft:{layer:2,index:0},topCenterLeft:{layer:2,index:1},topCenterRight:{layer:2,index:2},topRight:{layer:2,index:3},middleLeft:{layer:1,index:0},middleCenterLeft:{layer:1,index:1},middleCenterRight:{layer:1,index:2},middleRight:{layer:1,index:3},bottomLeft:{layer:0,index:0},bottomCenterLeft:{layer:0,index:1},bottomCenterRight:{layer:0,index:2},bottomRight:{layer:0,index:3}},verticalPositionsHumanized:{0:"bottom",1:"middle",2:"top"},init:function(){this.audioAnalyserEl=document.getElementById("audioanalyser"),this.beatContainer=document.getElementById("beatContainer"),this.beats=null,this.beatData=null,this.beatDataProcessed=!1,this.preloadTime=0,this.songTime=void 0,this.bpm=void 0,this.curve=null,this.curveEl=document.getElementById("curve"),this.curveFollowRigEl=document.getElementById("curveFollowRig"),this.tube=document.getElementById("tube"),this.index={events:0,notes:0,obstacles:0},this.wallContainer=document.getElementById("wallContainer"),this.leftStageLasers=document.getElementById("leftStageLasers"),this.rightStageLasers=document.getElementById("rightStageLasers"),this.stageColors=this.el.components["stage-colors"],this.el.addEventListener("cleargame",this.onClearGame.bind(this)),this.el.addEventListener("gamemenurestart",this.onRestart.bind(this)),this.el.addEventListener("ziploaderend",e=>{this.beats=e.detail.beats,this.data.challengeId&&!this.data.hasSongLoadError&&(this.beatData=this.beats[this.data.beatmapCharacteristic+"-"+this.data.difficulty],this.processBeats())})},play:function(){this.playerHeight=document.querySelector("[player-height]").components["player-height"]},update:function(e){const t=this.data;e.challengeId!==t.challengeId&&t.challengeId&&(this.index.events=0,this.index.notes=0,this.index.obstacles=0,this.data.isZipFetching||!this.beats||this.data.hasSongLoadError||(this.beatData=this.beats[this.data.beatmapCharacteristic+"-"+this.data.difficulty],this.processBeats()),this.curveEl.components.supercurve.generateCurve(t.speed*t.songDuration),this.curve=this.curveEl.components.supercurve.curve)},processBeats:function(){if(this.data.hasSongLoadError)return;this.songTime=0,this.preloadTime=0,this.beatData._events.sort(h),this.beatData._obstacles.sort(h),this.beatData._notes.sort(h),this.bpm=this.beatData._beatsPerMinute,this.beatData._obstacles.length>256&&(this.beatData._obstacles=[]);const e=this.beatData._events;if(e.length&&e[0]._time<0)for(let t=0;e[t]._time<0;t++)this.generateEvent(e[t]);this.beatDataProcessed=!0,console.log("[beat-generator] Finished processing beat data.")},tick:function(e,t){if(!this.data.isPlaying||!this.data.challengeId||!this.beatData)return;let a;const n=this.el.components.song;if(void 0===this.preloadTime){if(!n.isAudioPlaying)return;a=1e3*n.getCurrentTime()+s}else a=this.preloadTime;this.beatData._beatsPerMinute;const r=6e4/this.beatData._beatsPerMinute,i=this.beatData._notes;for(let e=this.index.notes;ei[e]._time*r&&(this.generateBeat(i[e]),this.index.notes++);if("ride"!==this.data.gameMode){const e=this.beatData._obstacles;for(let t=this.index.obstacles;t=e[t]._time*r&&(this.generateWall(e[t]),this.index.obstacles++)}const c=this.beatData._events;for(let e=this.index.events;e=c[e]._time*r&&(this.generateEvent(c[e]),this.index.events++);void 0!==this.preloadTime&&(this.preloadTime>=1e3*o?(this.el.sceneEl.emit("beatloaderpreloadfinish",null,!1),this.preloadTime=void 0):this.preloadTime+=t)},generateBeat:function(e,t){const a=this.data;let s;n&&(e._type=3);let r=8===e._cutDirection?"dot":"arrow";if(0===e._type?s="red":1===e._type?s="blue":(r="mine",s=void 0),a.has3DOFVR&&"viewer"!==a.gameMode&&"ride"!==a.gameMode&&"red"===s)return;(AFRAME.utils.getUrlParameter("dot")||"punch"===a.gameMode)&&(r="dot");const o=this.requestBeat(r,s);o&&(o.components.beat||o.components.plume?this.setupBeat(o,e):setTimeout(()=>{this.setupBeat(o,e)}))},setupBeat:function(e,t){const a=this.data,s=this.orientationsHumanized[t._cutDirection],n=this.horizontalPositionsHumanized[t._lineIndex]||"left",o=this.verticalPositionsHumanized[t._lineLayer]||"middle",d=(("classic"===this.data.gameMode?c:i)/a.speed+r)/a.songDuration,l=1e3*a.songDuration,u=6e4/this.beatData._beatsPerMinute,h=t._time*u/l+d,m=this.el.systems["render-order"].order.beats+1-h;"ride"===a.gameMode?(e.components.plume.onGenerate(h,n,o,this.playerHeight.beatOffset),e.setAttribute("render-order",m)):(e.components.beat.onGenerate(h,n,o,s,this.playerHeight.beatOffset),e.components.beat.blockEl.object3D.renderOrder=m),e.play()},generateWall:function(e){this.data;const t=this.el.sceneEl.components.pool__wall.requestEntity();t&&(t.components.wall?this.setupWall(t,e):setTimeout(()=>{this.setupWall(t,e)}))},setupWall:function(e,t){const a=this.data;if(a.has3DOFVR&&"viewer"!==a.gameMode)return;const s=t._duration/this.bpm*60,n=this.horizontalPositionsHumanized[t._lineIndex]||"none",o=1===t._type,i=s*a.speed,c=t._width/2,d=r/a.songDuration,l=1e3*a.songDuration,u=6e4/this.beatData._beatsPerMinute,h=t._time*u/l+d,m=i/this.curveEl.components.supercurve.length;e.components.wall.onGenerate(h,n,c,i,o,h+m),e.play(),e.object3D.renderOrder=this.el.systems["render-order"].order.beats+1-(h+m)},generateEvent:function(e){switch(e._type){case 0:this.stageColors.setColor("bg",e._value),this.stageColors.setColorInstant("moon",e._value);break;case 1:this.stageColors.setColorInstant("stars",e._value);break;case 2:this.stageColors.setColor("curveeven",e._value);break;case 3:this.stageColors.setColor("curveodd",e._value);break;case 4:this.stageColors.setColor("floor",e._value);break;case 8:case 9:this.tube.emit("pulse",null,!1);break;case 12:this.stageColors.setColor("leftglow",e._value);break;case 13:this.stageColors.setColor("rightglow",e._value)}},requestBeat:function(e,t){let a="pool__beat-"+e;"ride"===this.data.gameMode&&(a="pool__plume-"+e),"mine"!==e&&t&&(a+="-"+t);const s=this.el.sceneEl.components[a];if(s)return s.requestEntity();console.warn("Pool "+a+" unavailable")},onClearGame:function(){this.preloadTime=0,this.index.events=0,this.index.notes=0,this.index.obstacles=0;for(let e=0;e{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s>6|192,t[a++]=63&n|128):55296==(64512&n)&&s+1>18|240,t[a++]=n>>12&63|128,t[a++]=n>>6&63|128,t[a++]=63&n|128):(t[a++]=n>>12|224,t[a++]=n>>6&63|128,t[a++]=63&n|128)}return t},c={byteToCharMap_:null,charToByteMap_:null,byteToCharMapWebSafe_:null,charToByteMapWebSafe_:null,ENCODED_VALS_BASE:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",get ENCODED_VALS(){return this.ENCODED_VALS_BASE+"+/="},get ENCODED_VALS_WEBSAFE(){return this.ENCODED_VALS_BASE+"-_."},HAS_NATIVE_SUPPORT:"function"==typeof atob,encodeByteArray:function(e,t){if(!Array.isArray(e))throw Error("encodeByteArray takes an array as a parameter");this.init_();for(var a=t?this.byteToCharMapWebSafe_:this.byteToCharMap_,s=[],n=0;n>2,u=(3&r)<<4|i>>4,h=(15&i)<<2|d>>6,m=63&d;c||(m=64,o||(h=64)),s.push(a[l],a[u],a[h],a[m])}return s.join("")},encodeString:function(e,t){return this.HAS_NATIVE_SUPPORT&&!t?btoa(e):this.encodeByteArray(i(e),t)},decodeString:function(e,t){return this.HAS_NATIVE_SUPPORT&&!t?atob(e):function(e){for(var t=[],a=0,s=0;a191&&n<224){var r=e[a++];t[s++]=String.fromCharCode((31&n)<<6|63&r)}else if(n>239&&n<365){var o=((7&n)<<18|(63&(r=e[a++]))<<12|(63&(i=e[a++]))<<6|63&e[a++])-65536;t[s++]=String.fromCharCode(55296+(o>>10)),t[s++]=String.fromCharCode(56320+(1023&o))}else{r=e[a++];var i=e[a++];t[s++]=String.fromCharCode((15&n)<<12|(63&r)<<6|63&i)}}return t.join("")}(this.decodeStringToByteArray(e,t))},decodeStringToByteArray:function(e,t){this.init_();for(var a=t?this.charToByteMapWebSafe_:this.charToByteMap_,s=[],n=0;n>4;if(s.push(d),64!==i){var l=o<<4&240|i>>2;if(s.push(l),64!==c){var u=i<<6&192|c;s.push(u)}}}return s},init_:function(){if(!this.byteToCharMap_){this.byteToCharMap_={},this.charToByteMap_={},this.byteToCharMapWebSafe_={},this.charToByteMapWebSafe_={};for(var e=0;e=this.ENCODED_VALS_BASE.length&&(this.charToByteMap_[this.ENCODED_VALS_WEBSAFE.charAt(e)]=e,this.charToByteMapWebSafe_[this.ENCODED_VALS.charAt(e)]=e)}}},d=function(e){try{return c.decodeString(e,!0)}catch(e){console.error("base64Decode failed: ",e)}return null}; +/** + * @license + * Copyright 2017 Google LLC + * + * 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. + */function l(e,t){if(!(t instanceof Object))return t;switch(t.constructor){case Date:return new Date(t.getTime());case Object:void 0===e&&(e={});break;case Array:e=[];break;default:return t}for(var a in t)t.hasOwnProperty(a)&&(e[a]=l(e[a],t[a]));return e} +/** + * @license + * Copyright 2017 Google LLC + * + * 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. + */var u=function(){function e(){var e=this;this.reject=function(){},this.resolve=function(){},this.promise=new Promise((function(t,a){e.resolve=t,e.reject=a}))}return e.prototype.wrapCallback=function(e){var t=this;return function(a,s){a?t.reject(a):t.resolve(s),"function"==typeof e&&(t.promise.catch((function(){})),1===e.length?e(a):e(a,s))}},e}(); +/** + * @license + * Copyright 2017 Google LLC + * + * 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. + */function h(){return"undefined"!=typeof navigator&&"string"==typeof navigator.userAgent?navigator.userAgent:""}function m(){try{return"[object process]"===Object.prototype.toString.call(e.process)}catch(e){return!1}} +/** + * @license + * Copyright 2017 Google LLC + * + * 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. + */ +var f=function(e){function t(a,s){var n=e.call(this,s)||this;return n.code=a,n.name="FirebaseError",Object.setPrototypeOf(n,t.prototype),Error.captureStackTrace&&Error.captureStackTrace(n,p.prototype.create),n}return s.__extends(t,e),t}(Error),p=function(){function e(e,t,a){this.service=e,this.serviceName=t,this.errors=a}return e.prototype.create=function(e){for(var t=[],a=1;a"}))}var y=/\{\$([^}]+)}/g; +/** + * @license + * Copyright 2017 Google LLC + * + * 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. + */function g(e){return JSON.parse(e)} +/** + * @license + * Copyright 2017 Google LLC + * + * 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. + */ +var v=function(e){var t={},a={},s={},n="";try{var r=e.split(".");t=g(d(r[0])||""),a=g(d(r[1])||""),n=r[2],s=a.d||{},delete a.d}catch(e){}return{header:t,claims:a,data:s,signature:n}}; +/** + * @license + * Copyright 2017 Google LLC + * + * 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. + */ +var A=function(){function e(){this.chain_=[],this.buf_=[],this.W_=[],this.pad_=[],this.inbuf_=0,this.total_=0,this.blockSize=64,this.pad_[0]=128;for(var e=1;e>>31)}var r,o,i=this.chain_[0],c=this.chain_[1],d=this.chain_[2],l=this.chain_[3],u=this.chain_[4];for(s=0;s<80;s++){s<40?s<20?(r=l^c&(d^l),o=1518500249):(r=c^d^l,o=1859775393):s<60?(r=c&d|l&(c|d),o=2400959708):(r=c^d^l,o=3395469782);n=(i<<5|i>>>27)+r+u+o+a[s]&4294967295;u=l,l=d,d=4294967295&(c<<30|c>>>2),c=i,i=n}this.chain_[0]=this.chain_[0]+i&4294967295,this.chain_[1]=this.chain_[1]+c&4294967295,this.chain_[2]=this.chain_[2]+d&4294967295,this.chain_[3]=this.chain_[3]+l&4294967295,this.chain_[4]=this.chain_[4]+u&4294967295},e.prototype.update=function(e,t){if(null!=e){void 0===t&&(t=e.length);for(var a=t-this.blockSize,s=0,n=this.buf_,r=this.inbuf_;s=56;a--)this.buf_[a]=255&t,t/=256;this.compress_(this.buf_);var s=0;for(a=0;a<5;a++)for(var n=24;n>=0;n-=8)e[s]=this.chain_[a]>>n&255,++s;return e},e}();var w=function(){function e(e,t){var a=this;this.observers=[],this.unsubscribes=[],this.observerCount=0,this.task=Promise.resolve(),this.finalized=!1,this.onNoObservers=t,this.task.then((function(){e(a)})).catch((function(e){a.error(e)}))}return e.prototype.next=function(e){this.forEachObserver((function(t){t.next(e)}))},e.prototype.error=function(e){this.forEachObserver((function(t){t.error(e)})),this.close(e)},e.prototype.complete=function(){this.forEachObserver((function(e){e.complete()})),this.close()},e.prototype.subscribe=function(e,t,a){var s,n=this;if(void 0===e&&void 0===t&&void 0===a)throw new Error("Missing Observer.");void 0===(s=function(e,t){if("object"!=typeof e||null===e)return!1;for(var a=0,s=t;a 4. Need to update it?")}var n=e+" failed: ";return n+=s+" argument "}t.CONSTANTS=n,t.Deferred=u,t.ErrorFactory=p,t.FirebaseError=f,t.Sha1=A,t.areCookiesEnabled=function(){return!(!navigator||!navigator.cookieEnabled)},t.assert=r,t.assertionError=o,t.async=function(e,t){return function(){for(var a=[],s=0;s=0},t.isEmpty=function(e){for(var t in e)if(Object.prototype.hasOwnProperty.call(e,t))return!1;return!0},t.isIE=function(){var e=h();return e.indexOf("MSIE ")>=0||e.indexOf("Trident/")>=0},t.isIndexedDBAvailable=function(){return"indexedDB"in self&&null!==indexedDB},t.isMobileCordova=function(){return"undefined"!=typeof window&&!!(window.cordova||window.phonegap||window.PhoneGap)&&/ios|iphone|ipod|ipad|android|blackberry|iemobile/i.test(h())},t.isNode=m,t.isNodeSdk=function(){return!0===n.NODE_CLIENT||!0===n.NODE_ADMIN},t.isReactNative=function(){return"object"==typeof navigator&&"ReactNative"===navigator.product},t.isSafari=function(){return!m()&&navigator.userAgent.includes("Safari")&&!navigator.userAgent.includes("Chrome")},t.isUWP=function(){return h().indexOf("MSAppHost/")>=0},t.isValidFormat=function(e){var t=v(e).claims;return!!t&&"object"==typeof t&&t.hasOwnProperty("iat")},t.isValidTimestamp=function(e){var t=v(e).claims,a=Math.floor((new Date).getTime()/1e3),s=0,n=0;return"object"==typeof t&&(t.hasOwnProperty("nbf")?s=t.nbf:t.hasOwnProperty("iat")&&(s=t.iat),n=t.hasOwnProperty("exp")?t.exp:s+86400),!!a&&!!s&&!!n&&a>=s&&a<=n},t.issuedAtTime=function(e){var t=v(e).claims;return"object"==typeof t&&t.hasOwnProperty("iat")?t.iat:null},t.jsonEval=g,t.map=function(e,t,a){var s={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(s[n]=t.call(a,e[n],n,e));return s} +/** + * @license + * Copyright 2017 Google LLC + * + * 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. + */,t.querystring=function(e){for(var t=[],a=function(e,a){Array.isArray(a)?a.forEach((function(a){t.push(encodeURIComponent(e)+"="+encodeURIComponent(a))})):t.push(encodeURIComponent(e)+"="+encodeURIComponent(a))},s=0,n=Object.entries(e);s=55296&&s<=56319?(t+=4,a++):t+=3}return t},t.stringToByteArray=function(e){for(var t=[],a=0,s=0;s=55296&&n<=56319){var o=n-55296;s++,r(s>6|192,t[a++]=63&n|128):n<65536?(t[a++]=n>>12|224,t[a++]=n>>6&63|128,t[a++]=63&n|128):(t[a++]=n>>18|240,t[a++]=n>>12&63|128,t[a++]=n>>6&63|128,t[a++]=63&n|128)}return t},t.stringify=function(e){return JSON.stringify(e)},t.validateArgCount=function(e,t,a,s){var n;if(sa&&(n=0===a?"none":"no more than "+a),n)throw new Error(e+" failed: Was called with "+s+(1===s?" argument.":" arguments.")+" Expects "+n+".")},t.validateCallback=function(e,t,a,s){if((!s||a)&&"function"!=typeof a)throw new Error(E(e,t,s)+"must be a valid function.")},t.validateContextObject=function(e,t,a,s){if((!s||a)&&("object"!=typeof a||null===a))throw new Error(E(e,t,s)+"must be a valid context object.")} +/** + * @license + * Copyright 2017 Google LLC + * + * 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. + */,t.validateIndexedDBOpenable=function(){return new Promise((function(e,t){try{var a=!0,s="validate-browser-context-for-indexeddb-analytics-module",n=window.indexedDB.open(s);n.onsuccess=function(){n.result.close(),a||window.indexedDB.deleteDatabase(s),e(!0)},n.onupgradeneeded=function(){a=!1},n.onerror=function(){var e;t((null===(e=n.error)||void 0===e?void 0:e.message)||"")}}catch(e){t(e)}}))},t.validateNamespace=function(e,t,a,s){if((!s||a)&&"string"!=typeof a)throw new Error(E(e,t,s)+"must be a valid firebase namespace.")}}).call(this,a(1))},function(e,t,a){var s=a(196);(e.exports=a(197)(!1)).push([e.i,"html {\n background: #000;\n}\n\n#vrButton {\n position: absolute;\n background: url("+s(a(198))+") no-repeat;\n background-size: cover;\n border: 0;\n cursor: pointer;\n right: 20px;\n bottom: 20px;\n text-decoration: none;\n z-index: 9999999;\n width: 84px;\n height: 47px;\n}\n\n#vrButton.a-hidden {\n visibility: hidden;\n}\n\n#vrButton:active {\n border: 0;\n}\n\n#vrButton:hover {\n background-position: 0 -50.5px;\n}\n\n#vrButton p {\n bottom: 45px;\n color: #FFF;\n font-size: 12px;\n font-family: monospace;\n font-weight: bold;\n text-align: center;\n text-transform: uppercase;\n position: relative;\n}\n\n.a-loader-title {\n animation: loaderTitle 1s infinite alternate;\n color: rgba(0,0,0,0);\n background: none;\n background-image: url("+s(a(199))+');\n height: 36.2vh;\n background-repeat: no-repeat;\n background-position: center;\n margin-top: 0;\n background-size: contain;\n}\n\n@keyframes loaderTitle {\n 0% { opacity: 1; }\n 50% { opacity: 0.8; }\n 100% { opacity: 1; }\n}\n\n#subscribeForm {\n background: rgba(0, 0, 0, 0.75);\n box-shadow: 0px 0 1px #888;\n bottom: 0;\n color: #FAFAFA;\n font-family: monospace;\n height: 100px;\n left: 0;\n margin: 0;\n min-width: 400px;\n padding: 5px 20px 0 5px;\n position: fixed;\n text-align: center;\n z-index: 9999999;\n}\n\n#subscribeForm h2 {\n font-size: 16px;\n font-weight: 300;\n}\n\n#subscribeForm #subscribeClose {\n cursor: pointer;\n font-size: 26px;\n font-weight: 600;\n position: absolute;\n top: 0;\n right: 5px;\n}\n\ninput[type="email"] {\n background: #FAFAFA;\n border: 0;\n border-radius: 5px;\n color: $gray;\n height: 40px;\n padding-left: 20px;\n margin-right: 10px;\n max-width: 480px;\n text-transform: uppercase;\n vertical-align: middle;\n width: 50%;\n}\n\nbutton {\n border: 0;\n background: #FF74b8;\n border-radius: 20px;\n cursor: pointer;\n font-size: 14px;\n color: #FAFAFA;\n text-transform: uppercase;\n transition: .1s all;\n padding: 11px 20px;\n vertical-align: middle;\n}\n\nbutton:hover {\n background: #FF94C8;\n}\n',""])},,,function(e,t,a){"use strict";a.r(t);var s=a(15);a(0),new THREE.Object3D,new THREE.Box3,new THREE.Box3;const n=2*Math.PI,r=(o=1.33,i=.5,e=>1-function(e,t){function a(e,t,a){return Math.min(Math.max(e,t),a)}const s=a(e||1,1,10),n=a(t||.5,.1,2);return e=>0===e||1===e?e:-s*Math.pow(2,10*(e-1))*Math.sin((e-1-n/(2*Math.PI)*Math.asin(1/s))*(2*Math.PI)/n)}(o,i)(1-e));var o,i;const c={once:!0},d=!!AFRAME.utils.getUrlParameter("synctest"),l=(new THREE.Object3D,new THREE.Vector3,"mine"),u={up:new THREE.Vector3(0,1,0),down:new THREE.Vector3(0,-1,0),left:new THREE.Vector3(-1,0,0),right:new THREE.Vector3(1,0,0),upleft:new THREE.Vector3(-1,1,0).normalize(),upright:new THREE.Vector3(1,1,0).normalize(),downleft:new THREE.Vector3(-1,-1,0).normalize(),downright:new THREE.Vector3(1,-1,0).normalize()},h={arrowblue:"blueBeatObjTemplate",arrowred:"redBeatObjTemplate",dotblue:"dotBlueObjTemplate",dotred:"dotRedObjTemplate",mine:"mineObjTemplate"},m={right:"blue",left:"red"},f={right:0,upright:45,up:90,upleft:135,left:180,downleft:225,down:270,downright:315},p={classic:.48,punch:.35,ride:.4};AFRAME.registerComponent("beat-system",{schema:{gameMode:{default:"classic",oneOf:["classic","punch","ride"]},hasVR:{default:!1},inVR:{default:!1},isLoading:{default:!1},isPlaying:{default:!1}},init:function(){this.beats=[],this.beatsToCheck=[],this.blades=[],this.fists=[],this.weapons=null,this.bladeEls=this.el.sceneEl.querySelectorAll("a-entity[blade]"),this.curveFollowRig=document.getElementById("curveFollowRig"),this.punchEls=this.el.sceneEl.querySelectorAll("a-entity[punch]"),this.curveEl=document.getElementById("curve"),this.size=p[this.data.gameMode],this.supercurveFollow=null},play:function(){for(let e=0;e<2;e++)this.blades.push(this.bladeEls[e].components.blade),this.fists.push(this.punchEls[e].components.punch);this.supercurve=this.curveEl.components.supercurve,this.supercurveFollow=this.curveFollowRig.components["supercurve-follow"]},update:function(e){this.size=p[this.data.gameMode],e.isLoading&&!this.data.isLoading&&(this.updateBeatPositioning(),this.weaponOffset="classic"===this.data.gameMode?1.15*s.SWORD_OFFSET:s.PUNCH_OFFSET,this.weaponOffset=this.weaponOffset/this.supercurve.curve.getLength()),e.gameMode!==this.data.gameMode&&(this.weapons="classic"===this.data.gameMode?this.blades:this.fists)},tick:function(e,t){if(!this.data.isPlaying||"ride"===this.data.gameMode)return;const a=this.beatsToCheck,s=(this.supercurve.curve,this.supercurveFollow.songProgress);a.length=0;for(let e=0;ea[e].songPosition&&(n=!1),n);e++);n&&a.push(t)}if(this.weapons[0].tickBeatSystem(e,t),this.weapons[1].tickBeatSystem(e,t),a.length)for(let e=0;ethis.curveFollowRig.object3D.position.z&&(this.returnToPool(),this.missHit())},onGenerate:function(e,t,a,s,r){const o=this.data,i=this.el;this.beatSystem.registerBeat(this);const c=p[this.beatSystem.data.gameMode]*(1/.29);if(this.blockEl.object3D.scale.set(c,c,c),s=s||"down",this.cutDirection=s,this.horizontalPosition=t,this.verticalPosition=a,this.songPosition=e,!this.blockEl)return void console.warn("Unable to generate beat. blockEl was undefined.");this.blockEl.object3D.visible=!0,this.destroyed=!1,i.object3D.visible=!0,this.warmupTime=0;const d=this.curveEl.components.supercurve;d.getPointAt(e,i.object3D.position),d.alignToCurve(e,i.object3D),i.object3D.position.x+=this.beatSystem.horizontalPositions[t],"dot"!==o.type&&(i.object3D.rotation.z=THREE.Math.degToRad(f[s])),this.rotationStart=i.object3D.rotation.y,this.rotationChange=n,Math.random>.5&&(this.rotationChange*=-1);i.object3D.position.y-=.5,this.positionStart=i.object3D.position.y,this.positionChange=this.verticalPositions[a]+.5+r},initMesh:function(){const e=this.blockEl,t=(this.el,this.data.type);!function e(t,a){if(!b[a]){const s=document.getElementById(a);if(!s.getObject3D("mesh"))return void s.addEventListener("object3dset",s=>{"mesh"===s.detail.type&&e(t,a)},c);b[a]=s.getObject3D("mesh").children[0].geometry}b[a]&&(t.getObject3D("mesh")||t.setObject3D("mesh",new THREE.Mesh),t.getObject3D("mesh").geometry=b[a])}(e,h["mine"!==t?`${t}${this.data.color}`:t]),e.setAttribute("materials","name","beat");const a=e.getObject3D("mesh");a.geometry.computeBoundingBox(),this.bbox=a.geometry.boundingBox,"mine"===this.data.type&&this.bbox.expandByScalar(-.25)},wrongHit:function(){this.destroyed=!0,this.queueBeatWrongEvent=!0},missHit:function(){this.data.type!==l&&this.el.sceneEl.emit("beatmiss",null,!0)},destroyBeat:function(e,t){this.data;const a=this.explodeEventDetail,s=this.rigContainer.object3D;let n;if(this.blockEl.object3D.visible=!1,this.destroyed=!0,this.returnToPoolTimer=1e3,a.beatDirection=this.cutDirection,a.color=this.data.color,a.correctHit=t,a.gameMode=this.beatSystem.data.gameMode,a.position.copy(this.el.object3D.position),s.worldToLocal(a.position),this.data.type===l)n="pool__beat-broken-mine";else{n=`pool__${"classic"===this.beatSystem.data.gameMode?"beat":"punch"}-broken-${this.data.color}`,"dot"===this.data.type&&(n+="-dot")}this.broken=this.el.sceneEl.components[n].requestEntity(),this.broken&&this.broken.emit("explode",this.explodeEventDetail,!1),"classic"===this.beatSystem.data.gameMode&&t&&e.components.trail.pulse()},returnToPool:function(){this.beatSystem.unregisterBeat(this),this.el.object3D.position.set(0,0,-9999),this.el.object3D.visible=!1,this.el.sceneEl.components[this.poolName].returnEntity(this.el)},onHit:function(e,t){const a=this.data;try{e.components.haptics__beat.pulse()}catch(e){console.log(e)}if(this.el.parentNode.components["beat-hit-sound"].playSound(this.el,this.cutDirection),t)this.wrongHit();else{if(a.type===l)return this.destroyBeat(e,!1),void this.el.sceneEl.emit("minehit",null,!0);if("classic"===this.beatSystem.data.gameMode){let t=0;if("arrow"===a.type){if(t=e.components.blade.strokeDirectionVector.dot(u[this.cutDirection]),t<.625)return this.destroyBeat(e,!1),void this.wrongHit()}return this.destroyBeat(e,!0),void this.calculateScoreBlade(e,t)}"punch"===this.beatSystem.data.gameMode&&(this.destroyBeat(e,!0),this.calculateScorePunch(e))}},score:function(e,t){const a=this.el,s=this.hitEventDetail;e=10*Math.ceil(parseInt(e,10)/10),s.percent=t,s.score=e,this.queueBeatHitEvent=s,t>=100&&(this.superCuts[this.superCutIdx].components.supercutfx.createSuperCut(a.object3D,this.data.color),this.superCutIdx=(this.superCutIdx+1)%this.superCuts.length)},calculateScoreBlade:function(e,t){const a=e.components.blade.strokeSpeed,s=e.components.blade.strokeSpeed/10*30;let n;n=a<=10?Math.min(s,30):y(g(a,10,25),10,25,30,50);let r=Math.min(s,30);"dot"===this.data.type?(n+=70,r+=70):(n+=70*t,r+=t>.97?70:70*t),this.score(n,r)},calculateScorePunch:function(e){const t=e.components.punch.speed,a=t/1.5*40;let s;s=t<=1.5?60+Math.min(a,40):60+y(g(t,1.5,6),1.5,6,40,70);const n=60+Math.min(a,40);this.score(s,n)},autoHit:function(e){const t=this.el;this.destroyBeat(e,Math.random()<.9),t.parentNode.components["beat-hit-sound"].playSound(t,this.cutDirection);const a=this.hitEventDetail;a.percent=100,a.score=100,this.queueBeatHitEvent=a}});const b={};function y(e,t,a,s,n){return s+(n-s)*(e-t)/(a-t)}function g(e,t,a){return Math.min(Math.max(e,t),a)}if(window.AFRAME){const t=["beat-system","beat"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s=0&&h.warn("\n Warning: You are trying to load Firebase while using Firebase Performance standalone script.\n You should load Firebase Performance with this instance of Firebase to avoid loading duplicate code.\n ")}var y=f.initializeApp;f.initializeApp=function(){for(var e=[],t=0;t=(null!=s?s:t.logLevel)&&e({level:r[a].toLowerCase(),message:i,args:n,type:t.name})}},s=0,n=o;s{},console.timeEnd=()=>{},a(41),a(42),a(43),a(44),a(45),a(46),a(48),a(49),AFRAME.log=()=>{},a(51),a(53),a(54),a(55),a(56),a(57),s(a(58)),s(a(191)),a(195),a(202),e.hot.accept(),document.addEventListener("DOMContentLoaded",()=>{!function(){const e=document.querySelector("form");if(!e)return;if(localStorage.getItem("subscribeClosed")){const t=e.parentNode;return void t.parentNode.removeChild(t)}document.getElementById("subscribeClose").addEventListener("click",()=>{const t=e.parentNode;t.parentNode.removeChild(t),localStorage.setItem("subscribeClosed",!0)});const t=e.querySelector(".submit"),a=e.querySelector('input[type="email"]'),s=document.querySelector("#subscribeForm > h2");let n="";s&&(n=s.innerHTML);e.addEventListener("submit",e=>{e.preventDefault();const a=new XMLHttpRequest;let n="http://localhost:5000/mail/subscribe";return n="https://supermedium.com/mail/subscribe",a.open("POST",n),a.addEventListener("load",()=>{200!==parseInt(a.status,10)&&(window.location.href="https://supermedium/subscribe/"),t&&(t.disabled=!0,t.innerHTML="Subscribed!"),s&&(s.innerHTML="Successfully subscribed, thank you!")}),a.setRequestHeader("Content-Type","application/json;charset=UTF-8"),a.send(JSON.stringify({email:document.querySelector('[name="email"]').value,source:"moonrider"})),!1}),t&&a.addEventListener("keydown",()=>{t.hasAttribute("disabled")&&(t.innerHTML="Subscribe",t.removeAttribute("disabled")),s&&n&&(s.innerHTML=n)})}()}),"http:"!==window.location.protocol||window.location.host.startsWith("localhost")||window.location.replace("https:"+location.href.substring(location.protocol.length))},function(e,t){THREE.BufferGeometryUtils={computeTangents:function(e){var t=e.index,a=e.attributes;if(null!==t&&void 0!==a.position&&void 0!==a.normal&&void 0!==a.uv){var s=t.array,n=a.position.array,r=a.normal.array,o=a.uv.array,i=n.length/3;void 0===a.tangent&&e.addAttribute("tangent",new THREE.BufferAttribute(new Float32Array(4*i),4));for(var c=a.tangent.array,d=[],l=[],u=0;u0){p=p.clone();for(var b=0;b=s.x&&this.boxMin.y<=n.y&&this.boxMax.y>=s.y&&this.boxMin.z<=n.z&&this.boxMax.z>=s.z}}(),setDirty:function(){this.dirty=!0},refreshObjects:function(){const e=this.data;this.objectEls=e.objects?this.el.sceneEl.querySelectorAll(e.objects):this.el.sceneEl.children,this.dirty=!1}})},function(e,t){var a=[new THREE.Vector2,new THREE.Vector2,new THREE.Vector2,new THREE.Vector2];function s(e,t,s,n){const r=1/n,o=1/s;return a[0].set(r*t,o*e+o),a[1].set(r*t,o*e),a[2].set(r*t+r,o*e),a[3].set(r*t+r,o*e+o),a}AFRAME.registerComponent("atlas-uvs",{dependencies:["geometry"],schema:{totalColumns:{type:"int",default:1},totalRows:{type:"int",default:1},column:{type:"int",default:1},row:{type:"int",default:1}},update:function(){const e=this.data,t=s(e.row-1,e.column-1,e.totalRows,e.totalColumns),a=this.el.getObject3D("mesh").geometry;var n=new Float32Array([t[0].x,t[0].y,t[3].x,t[3].y,t[1].x,t[1].y,t[2].x,t[2].y]);a.setAttribute("uv",new THREE.BufferAttribute(n,2)),a.uvsNeedUpdate=!0}}),AFRAME.registerComponent("dynamic-texture-atlas",{schema:{canvasId:{default:"dynamicAtlas"},canvasHeight:{default:1024},canvasWidth:{default:1024},debug:{default:!1},numColumns:{default:8},numRows:{default:8}},multiple:!0,init:function(){const e=this.canvas=document.createElement("canvas");e.id=this.data.canvasId,e.height=this.data.canvasHeight,e.width=this.data.canvasWidth,this.ctx=e.getContext("2d"),document.body.appendChild(e),this.data.debug&&(e.style.left=0,e.style.top=0,e.style.position="fixed",e.style.zIndex=9999999999)},drawTexture:function(e,t,a,n,r){const o=this.canvas,i=this.data;e.complete||(e.onload=()=>{this.drawTexture(e,t,a)});const c=r||o.height/i.numRows,d=n||o.width/i.numColumns;return this.ctx.drawImage(e,d*t,d*a,d,c),s(t,a,i.numRows,i.numColumns)}}),e.exports.getGridUvs=s},function(e,t){if("undefined"==typeof AFRAME)throw new Error("Component attempted to register before AFRAME was available.");var a={};AFRAME.registerComponent("audioanalyser",{schema:{buffer:{default:!1},beatDetectionDecay:{default:.99},beatDetectionMinVolume:{default:15},beatDetectionThrottle:{default:250},cache:{default:!1},enabled:{default:!0},enableBeatDetection:{default:!0},enableLevels:{default:!0},enableWaveform:{default:!0},enableVolume:{default:!0},fftSize:{default:2048},smoothingTimeConstant:{default:.8},src:{parse:function(e){return e.constructor!==String?e:e.startsWith("#")||e.startsWith(".")?document.querySelector(e):e}},unique:{default:!1}},init:function(){this.audioEl=null,this.levels=null,this.waveform=null,this.volume=0,this.xhr=null,this.initContext()},update:function(e){var t=this.analyser,a=this.data;e.fftSize===a.fftSize&&e.smoothingTimeConstant===a.smoothingTimeConstant||(t.fftSize=a.fftSize,t.smoothingTimeConstant=a.smoothingTimeConstant,this.levels=new Uint8Array(t.frequencyBinCount),this.waveform=new Uint8Array(t.fftSize)),a.src&&this.refreshSource()},tick:function(e,t){var a,s=this.data;if(s.enabled){if((s.enableLevels||s.enableVolume)&&this.analyser.getByteFrequencyData(this.levels),s.enableWaveform&&this.analyser.getByteTimeDomainData(this.waveform),s.enableVolume||s.enableBeatDetection){for(var n=0,r=0;rthis.beatCutOff&&a>this.data.beatDetectionMinVolume?(this.el.emit("audioanalyserbeat",null,!1),this.beatCutOff=1.5*a,this.beatTime=0):this.beatTime<=this.data.beatDetectionThrottle?this.beatTime+=t:(this.beatCutOff*=this.data.beatDetectionDecay,this.beatCutOff=Math.max(this.beatCutOff,this.data.beatDetectionMinVolume)))}},initContext:function(){var e,t=this.data;this.context=new(window.webkitAudioContext||window.AudioContext),e=this.analyser=this.context.createAnalyser(),(this.gainNode=this.context.createGain()).connect(e),e.connect(this.context.destination),e.fftSize=t.fftSize,e.smoothingTimeConstant=t.smoothingTimeConstant,this.levels=new Uint8Array(e.frequencyBinCount),this.waveform=new Uint8Array(e.fftSize)},refreshSource:function(){this.analyser;var e=this.data;e.buffer&&e.src.constructor===String?this.getBufferSource().then(e=>{this.source=e,this.source.connect(this.gainNode)}):(this.source=this.getMediaSource(),this.source.connect(this.gainNode))},suspendContext:function(){this.context.suspend()},resumeContext:function(){this.context.resume()},fetchAudioBuffer:function(e){return a[e]?a[e].constructor===Promise?a[e]:Promise.resolve(a[e]):(this.data.cache||Object.keys(a).forEach((function(e){delete a[e]})),a[e]=new Promise(t=>{const s=this.xhr=new XMLHttpRequest;s.open("GET",e),s.responseType="arraybuffer",s.addEventListener("load",()=>{function n(s){a[e]=s,t(s)}const r=this.context.decodeAudioData(s.response,n);r&&r.constructor===Promise&&r.then(n).catch(console.error)}),s.send()}),a[e])},getBufferSource:function(){var e=this.data;return this.fetchAudioBuffer(e.src).then(()=>{var t;return(t=this.context.createBufferSource()).buffer=a[e.src],this.el.emit("audioanalyserbuffersource",t,!1),t}).catch(console.error)},getMediaSource:function(){const e={};return function(){const t=this.data.src.constructor===String?this.data.src:this.data.src.src;if(e[t])return e[t];this.data.src.constructor===String?(this.audio=document.createElement("audio"),this.audio.crossOrigin="anonymous",this.audio.setAttribute("src",this.data.src)):this.audio=this.data.src;const a=this.context.createMediaElementSource(this.audio);return e[t]=a,a}}()})},function(e,t){var a=AFRAME.utils.styleParser;if("undefined"==typeof AFRAME)throw new Error("Component attempted to register before AFRAME was available.");AFRAME.registerComponent("event-set",{schema:{default:"",parse:function(e){return a.parse(e)}},multiple:!0,init:function(){this.eventHandler=null,this.eventName=null},update:function(e){this.removeEventListener(),this.updateEventListener(),this.addEventListener()},remove:function(){this.removeEventListener()},pause:function(){this.removeEventListener()},play:function(){this.addEventListener()},updateEventListener:function(){var e,t,a,s=this.data,n=this.el;e=s._event||this.id,t=s._target,a=t?n.sceneEl.querySelector(t):n,this.eventName=e;const r=()=>{var e;for(e in s)"_event"!==e&&"_target"!==e&&AFRAME.utils.entity.setComponentProperty.call(this,a,e,s[e])};isNaN(s._delay)?this.eventHandler=r:this.eventHandler=()=>{setTimeout(r,parseFloat(s._delay))}},addEventListener:function(){this.el.addEventListener(this.eventName,this.eventHandler)},removeEventListener:function(){this.el.removeEventListener(this.eventName,this.eventHandler)}})},function(e,t,a){THREE.BufferGeometryUtils||a(47),AFRAME.registerComponent("geometry-merger",{schema:{preserveOriginal:{default:!1}},init:function(){var e=this;this.geometry=new THREE.Geometry,this.mesh=new THREE.Mesh(this.geometry),this.el.setObject3D("mesh",this.mesh),this.faceIndex={},this.vertexIndex={},this.el.object3D.traverse((function(t){"Mesh"===t.type&&t!==e.mesh&&(e.faceIndex[t.parent.uuid]=[e.geometry.faces.length,e.geometry.faces.length+t.geometry.faces.length-1],e.vertexIndex[t.parent.uuid]=[e.geometry.vertices.length,e.geometry.vertices.length+t.geometry.vertices.length-1],t.parent.updateMatrix(),e.geometry.merge(t.geometry,t.parent.matrix),e.data.preserveOriginal||t.parent.remove(t))}))}}),AFRAME.registerComponent("buffer-geometry-merger",{schema:{preserveOriginal:{default:!1}},init:function(){var e=[];this.el.sceneEl.object3D.updateMatrixWorld(),this.el.object3D.traverse((function(t){"Mesh"===t.type&&t.el!==self.el&&(t.geometry.applyMatrix(t.matrixWorld),e.push(t.geometry.clone()),t.parent.remove(t))}));const t=THREE.BufferGeometryUtils.mergeBufferGeometries(e);this.mesh=new THREE.Mesh(t),this.el.setObject3D("mesh",this.mesh)}})},function(e,t){THREE.BufferGeometryUtils={computeTangents:function(e){var t=e.index,a=e.attributes;if(null!==t&&void 0!==a.position&&void 0!==a.normal&&void 0!==a.uv){var s=t.array,n=a.position.array,r=a.normal.array,o=a.uv.array,i=n.length/3;void 0===a.tangent&&e.addAttribute("tangent",new THREE.BufferAttribute(new Float32Array(4*i),4));for(var c=a.tangent.array,d=[],l=[],u=0;ua.max&&this.logs.shift(),this.el.setAttribute("text",{value:this.logs.join("\n")}))},remove:function(){this.el.removeAttribute("text"),this.system.unregisterLogger(this)}})},function(e,t,a){a(52),AFRAME.registerComponent("orbit-controls",{dependencies:["camera"],schema:{autoRotate:{type:"boolean"},autoRotateSpeed:{default:2},dampingFactor:{default:.1},enabled:{default:!0},enableDamping:{default:!0},enableKeys:{default:!0},enablePan:{default:!0},enableRotate:{default:!0},enableZoom:{default:!0},initialPosition:{type:"vec3"},keyPanSpeed:{default:7},minAzimuthAngle:{type:"number",default:1/0},maxAzimuthAngle:{type:"number",default:1/0},maxDistance:{default:1e3},maxPolarAngle:{default:AFRAME.utils.device.isMobile()?90:120},minDistance:{default:1},minPolarAngle:{default:0},minZoom:{default:0},panSpeed:{default:1},rotateSpeed:{default:.05},screenSpacePanning:{default:!1},target:{type:"vec3"},zoomSpeed:{default:.5}},init:function(){var e,t=this.el;this.controls=new THREE.OrbitControls(t.getObject3D("camera"),t.sceneEl.renderer.domElement),e=new THREE.Vector3,t.sceneEl.addEventListener("enter-vr",()=>{(AFRAME.utils.device.checkHeadsetConnected()||AFRAME.utils.device.isMobile())&&(this.controls.enabled=!1,t.hasAttribute("look-controls")&&(t.setAttribute("look-controls","enabled",!0),e.copy(t.getObject3D("camera").position),t.getObject3D("camera").position.set(0,0,0)))}),t.sceneEl.addEventListener("exit-vr",()=>{(AFRAME.utils.device.checkHeadsetConnected()||AFRAME.utils.device.isMobile())&&(this.controls.enabled=!0,t.getObject3D("camera").position.copy(e),t.hasAttribute("look-controls")&&t.setAttribute("look-controls","enabled",!1))}),document.body.style.cursor="grab",document.addEventListener("mousedown",()=>{document.body.style.cursor="grabbing"}),document.addEventListener("mouseup",()=>{document.body.style.cursor="grab"}),this.target=new THREE.Vector3,t.getObject3D("camera").position.copy(this.data.initialPosition)},update:function(e){var t=this.controls,a=this.data;t.target=this.target.copy(a.target),t.autoRotate=a.autoRotate,t.autoRotateSpeed=a.autoRotateSpeed,t.dampingFactor=a.dampingFactor,t.enabled=a.enabled,t.enableDamping=a.enableDamping,t.enableKeys=a.enableKeys,t.enablePan=a.enablePan,t.enableRotate=a.enableRotate,t.enableZoom=a.enableZoom,t.keyPanSpeed=a.keyPanSpeed,t.maxPolarAngle=THREE.Math.degToRad(a.maxPolarAngle),t.maxDistance=a.maxDistance,t.minDistance=a.minDistance,t.minPolarAngle=THREE.Math.degToRad(a.minPolarAngle),t.minZoom=a.minZoom,t.panSpeed=a.panSpeed,t.rotateSpeed=a.rotateSpeed,t.screenSpacePanning=a.screenSpacePanning,t.zoomSpeed=a.zoomSpeed},tick:function(){var e=this.controls;this.data.enabled&&e.enabled&&(e.enableDamping||e.autoRotate)&&this.controls.update()}})},function(e,t){THREE.OrbitControls=function(e,t){var a,s,n,r,o;this.object=e,this.domElement=void 0!==t?t:document,this.enabled=!0,this.target=new THREE.Vector3,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.keyPanSpeed=7,this.autoRotate=!1,this.autoRotateSpeed=2,this.enableKeys=!0,this.keys={LEFT:37,UP:38,RIGHT:39,BOTTOM:40},this.mouseButtons={ORBIT:THREE.MOUSE.LEFT,ZOOM:THREE.MOUSE.MIDDLE,PAN:THREE.MOUSE.RIGHT},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this.getPolarAngle=function(){return f.phi},this.getAzimuthalAngle=function(){return f.theta},this.saveState=function(){i.target0.copy(i.target),i.position0.copy(i.object.position),i.zoom0=i.object.zoom},this.reset=function(){i.target.copy(i.target0),i.object.position.copy(i.position0),i.object.zoom=i.zoom0,i.object.updateProjectionMatrix(),i.dispatchEvent(c),i.update(),h=u.NONE},this.update=(a=new THREE.Vector3,s=(new THREE.Quaternion).setFromUnitVectors(e.up,new THREE.Vector3(0,1,0)),n=s.clone().inverse(),r=new THREE.Vector3,o=new THREE.Quaternion,function(){var e=i.object.position;return a.copy(e).sub(i.target),a.applyQuaternion(s),f.setFromVector3(a),i.autoRotate&&h===u.NONE&&P(2*Math.PI/60/60*i.autoRotateSpeed),f.theta+=p.theta,f.phi+=p.phi,f.theta=Math.max(i.minAzimuthAngle,Math.min(i.maxAzimuthAngle,f.theta)),f.phi=Math.max(i.minPolarAngle,Math.min(i.maxPolarAngle,f.phi)),f.makeSafe(),f.radius*=b,f.radius=Math.max(i.minDistance,Math.min(i.maxDistance,f.radius)),i.target.add(y),a.setFromSpherical(f),a.applyQuaternion(n),e.copy(i.target).add(a),i.object.lookAt(i.target),!0===i.enableDamping?(p.theta*=1-i.dampingFactor,p.phi*=1-i.dampingFactor):p.set(0,0,0),b=1,y.set(0,0,0),!!(g||r.distanceToSquared(i.object.position)>m||8*(1-o.dot(i.object.quaternion))>m)&&(i.dispatchEvent(c),r.copy(i.object.position),o.copy(i.object.quaternion),g=!1,!0)}),this.dispose=function(){i.domElement.removeEventListener("contextmenu",V,!1),i.domElement.removeEventListener("mousedown",Z,!1),i.domElement.removeEventListener("wheel",F,!1),i.domElement.removeEventListener("touchstart",H,!1),i.domElement.removeEventListener("touchend",z,!1),i.domElement.removeEventListener("touchmove",B,!1),document.removeEventListener("mousemove",C,!1),document.removeEventListener("mouseup",U,!1),window.removeEventListener("keydown",q,!1)};var i=this,c={type:"change"},d={type:"start"},l={type:"end"},u={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_DOLLY:4,TOUCH_PAN:5},h=u.NONE,m=1e-6,f=new THREE.Spherical,p=new THREE.Spherical,b=1,y=new THREE.Vector3,g=!1,v=new THREE.Vector2,A=new THREE.Vector2,w=new THREE.Vector2,S=new THREE.Vector2,E=new THREE.Vector2,T=new THREE.Vector2,k=new THREE.Vector2,R=new THREE.Vector2,N=new THREE.Vector2;function x(){return Math.pow(.95,i.zoomSpeed)}function P(e){p.theta-=e}function j(e){p.phi-=e}var L,M=(L=new THREE.Vector3,function(e,t){L.setFromMatrixColumn(t,0),L.multiplyScalar(-e),y.add(L)}),_=function(){var e=new THREE.Vector3;return function(t,a){e.setFromMatrixColumn(a,1),e.multiplyScalar(t),y.add(e)}}(),D=function(){var e=new THREE.Vector3;return function(t,a){var s=i.domElement===document?i.domElement.body:i.domElement;if(i.object.isPerspectiveCamera){var n=i.object.position;e.copy(n).sub(i.target);var r=e.length();r*=Math.tan(i.object.fov/2*Math.PI/180),M(2*t*r/s.clientHeight,i.object.matrix),_(2*a*r/s.clientHeight,i.object.matrix)}else i.object.isOrthographicCamera?(M(t*(i.object.right-i.object.left)/i.object.zoom/s.clientWidth,i.object.matrix),_(a*(i.object.top-i.object.bottom)/i.object.zoom/s.clientHeight,i.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),i.enablePan=!1)}}();function I(e){i.object.isPerspectiveCamera?b/=e:i.object.isOrthographicCamera?(i.object.zoom=Math.max(i.minZoom,Math.min(i.maxZoom,i.object.zoom*e)),i.object.updateProjectionMatrix(),g=!0):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),i.enableZoom=!1)}function O(e){i.object.isPerspectiveCamera?b*=e:i.object.isOrthographicCamera?(i.object.zoom=Math.max(i.minZoom,Math.min(i.maxZoom,i.object.zoom/e)),i.object.updateProjectionMatrix(),g=!0):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),i.enableZoom=!1)}function Z(e){if(!1!==i.enabled){switch(e.preventDefault(),e.button){case i.mouseButtons.ORBIT:if(!1===i.enableRotate)return;!function(e){v.set(e.clientX,e.clientY)}(e),h=u.ROTATE;break;case i.mouseButtons.ZOOM:if(!1===i.enableZoom)return;!function(e){k.set(e.clientX,e.clientY)}(e),h=u.DOLLY;break;case i.mouseButtons.PAN:if(!1===i.enablePan)return;!function(e){S.set(e.clientX,e.clientY)}(e),h=u.PAN}h!==u.NONE&&(document.addEventListener("mousemove",C,!1),document.addEventListener("mouseup",U,!1),i.dispatchEvent(d))}}function C(e){if(!1!==i.enabled)switch(e.preventDefault(),h){case u.ROTATE:if(!1===i.enableRotate)return;!function(e){A.set(e.clientX,e.clientY),w.subVectors(A,v);var t=i.domElement===document?i.domElement.body:i.domElement;P(2*Math.PI*w.x/t.clientWidth*i.rotateSpeed),j(2*Math.PI*w.y/t.clientHeight*i.rotateSpeed),v.copy(A),i.update()}(e);break;case u.DOLLY:if(!1===i.enableZoom)return;!function(e){R.set(e.clientX,e.clientY),N.subVectors(R,k),N.y>0?I(x()):N.y<0&&O(x()),k.copy(R),i.update()}(e);break;case u.PAN:if(!1===i.enablePan)return;!function(e){E.set(e.clientX,e.clientY),T.subVectors(E,S),D(T.x,T.y),S.copy(E),i.update()}(e)}}function U(e){!1!==i.enabled&&(document.removeEventListener("mousemove",C,!1),document.removeEventListener("mouseup",U,!1),i.dispatchEvent(l),h=u.NONE)}function F(e){!1===i.enabled||!1===i.enableZoom||h!==u.NONE&&h!==u.ROTATE||(e.preventDefault(),e.stopPropagation(),i.dispatchEvent(d),function(e){e.deltaY<0?O(x()):e.deltaY>0&&I(x()),i.update()}(e),i.dispatchEvent(l))}function q(e){!1!==i.enabled&&!1!==i.enableKeys&&!1!==i.enablePan&&function(e){switch(e.keyCode){case i.keys.UP:D(0,i.keyPanSpeed),i.update();break;case i.keys.BOTTOM:D(0,-i.keyPanSpeed),i.update();break;case i.keys.LEFT:D(i.keyPanSpeed,0),i.update();break;case i.keys.RIGHT:D(-i.keyPanSpeed,0),i.update()}}(e)}function H(e){if(!1!==i.enabled){switch(e.touches.length){case 1:if(!1===i.enableRotate)return;!function(e){v.set(e.touches[0].pageX,e.touches[0].pageY)}(e),h=u.TOUCH_ROTATE;break;case 2:if(!1===i.enableZoom)return;!function(e){var t=e.touches[0].pageX-e.touches[1].pageX,a=e.touches[0].pageY-e.touches[1].pageY,s=Math.sqrt(t*t+a*a);k.set(0,s)}(e),h=u.TOUCH_DOLLY;break;case 3:if(!1===i.enablePan)return;!function(e){S.set(e.touches[0].pageX,e.touches[0].pageY)}(e),h=u.TOUCH_PAN;break;default:h=u.NONE}h!==u.NONE&&i.dispatchEvent(d)}}function B(e){if(!1!==i.enabled)switch(e.preventDefault(),e.stopPropagation(),e.touches.length){case 1:if(!1===i.enableRotate)return;if(h!==u.TOUCH_ROTATE)return;!function(e){A.set(e.touches[0].pageX,e.touches[0].pageY),w.subVectors(A,v);var t=i.domElement===document?i.domElement.body:i.domElement;P(2*Math.PI*w.x/t.clientWidth*i.rotateSpeed),j(2*Math.PI*w.y/t.clientHeight*i.rotateSpeed),v.copy(A),i.update()}(e);break;case 2:if(!1===i.enableZoom)return;if(h!==u.TOUCH_DOLLY)return;!function(e){var t=e.touches[0].pageX-e.touches[1].pageX,a=e.touches[0].pageY-e.touches[1].pageY,s=Math.sqrt(t*t+a*a);R.set(0,s),N.subVectors(R,k),N.y>0?O(x()):N.y<0&&I(x()),k.copy(R),i.update()}(e);break;case 3:if(!1===i.enablePan)return;if(h!==u.TOUCH_PAN)return;!function(e){E.set(e.touches[0].pageX,e.touches[0].pageY),T.subVectors(E,S),D(T.x,T.y),S.copy(E),i.update()}(e);break;default:h=u.NONE}}function z(e){!1!==i.enabled&&(i.dispatchEvent(l),h=u.NONE)}function V(e){!1!==i.enabled&&e.preventDefault()}i.domElement.addEventListener("contextmenu",V,!1),i.domElement.addEventListener("mousedown",Z,!1),i.domElement.addEventListener("wheel",F,!1),i.domElement.addEventListener("touchstart",H,!1),i.domElement.addEventListener("touchend",z,!1),i.domElement.addEventListener("touchmove",B,!1),window.addEventListener("keydown",q,!1),this.update()},THREE.OrbitControls.prototype=Object.create(THREE.EventDispatcher.prototype),THREE.OrbitControls.prototype.constructor=THREE.OrbitControls,Object.defineProperties(THREE.OrbitControls.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(e){console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead."),this.enableZoom=!e}},noRotate:{get:function(){return console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead."),!this.enableRotate},set:function(e){console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead."),this.enableRotate=!e}},noPan:{get:function(){return console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead."),!this.enablePan},set:function(e){console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead."),this.enablePan=!e}},noKeys:{get:function(){return console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead."),!this.enableKeys},set:function(e){console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead."),this.enableKeys=!e}},staticMoving:{get:function(){return console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead."),!this.enableDamping},set:function(e){console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead."),this.enableDamping=!e}},dynamicDampingFactor:{get:function(){return console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead."),this.dampingFactor},set:function(e){console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead."),this.dampingFactor=e}}})},function(e,t){AFRAME.registerComponent("proxy-event",{schema:{captureBubbles:{default:!1},enabled:{default:!0},event:{type:"string"},from:{type:"string"},to:{type:"string"},as:{type:"string"},bubbles:{default:!1}},multiple:!0,init:function(){var e,t,a,s=this.data,n=this.el,r=this;if(s.from?e="PARENT"===s.from?[n.parentNode]:document.querySelectorAll(s.from):a="CHILDREN"===s.to?n.querySelectorAll("*"):"SELF"===s.to?[n]:document.querySelectorAll(s.to),s.from)for(t=0;t{"nonrecursive"!==this.id&&e.detail.object.traverse(this.set)})},update:function(){"nonrecursive"===this.id?this.set(this.el.object3D):this.el.object3D.traverse(this.set)},set:function(e){isNaN(this.data)?e.renderOrder=this.system.order[this.data]:e.renderOrder=parseFloat(this.data)}}),AFRAME.registerComponent("render-order-recursive",{init:function(){this.el.addEventListener("child-attached",e=>{e.detail.el.setAttribute("render-order",this.el.getAttribute("render-order"))})}})},function(e,t,a){var s;"undefined"!=typeof self&&self,s=function(){return function(e){var t={};function a(s){if(t[s])return t[s].exports;var n=t[s]={i:s,l:!1,exports:{}};return e[s].call(n.exports,n,n.exports,a),n.l=!0,n.exports}return a.m=e,a.c=t,a.d=function(e,t,s){a.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:s})},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="",a(a.s=1)}([function(e,t,a){"use strict";var s={};e.exports.select=function(e,t,a){return s[t]||(s[t]=new Function("state","item","return "+c(t)+";")),s[t](e,a)};var n=/\.([A-Za-z][\w_-]*)/g,r=/([=&|!?:+-])(\s*)([\(]?)([A-Za-z][\w_-]*)/g,o=/^([\(]?)([A-Za-z][\w_-]*)/g,i=/state\["item"\]/g;function c(e){return e=(e=(e=(e=e.replace(n,'["$1"]')).replace(o,'$1state["$2"]')).replace(r,'$1$2$3state["$4"]')).replace(i,"item")}function d(){var e=arguments;return function(){var t;for(t=0;t","<","<=",">="],u=/\s+/,h=/\(|\)|\!/g;function m(e){return-1===(e=function(e){return 0===e.indexOf("!!")?e.replace("!!",""):0===e.indexOf("!")?e.replace("!",""):e}(e.trim())).indexOf(".")?e:e.substring(0,e.indexOf("."))}e.exports.parseKeysToWatch=function(e,t,a){var s,n;for(n=p(t,u),s=0;s [data-bind-for-active="false"]'))(s=o.querySelector('[data-bind-for-active="false"]')).setAttribute("data-bind-for-key",c),s.setAttribute("data-bind-for-value",d),s.object3D.visible=!0,s.play(),s.setAttribute("data-bind-for-active","true"),s.emit("bindforupdateinplace",i,!1);else{var l=this.generateFromTemplate(i,a);l.addEventListener("loaded",(function(){l.emit("bindforupdateinplace",i,!1)})),o.appendChild(l)}this.renderedKeys.push(d)}else-1!==t.indexOf(d)&&(e.length&&e[0].constructor===String?(s=o.querySelector('[data-bind-for-value="'+d+'"]')).setAttribute("data-bind-for-key",a):s=o.querySelector('[data-bind-for-key="'+c+'"]'),s.emit("bindforupdateinplace",i,!1));e[a+1]&&(this.data.delay?setTimeout((function(){n.renderItemsInPlace(e,t,a+1)}),this.data.delay):this.renderItemsInPlace(e,t,a+1))},generateFromTemplate:function(e,t){var a=this.data;this.el.appendChild(this.system.renderTemplate(this.template,e));var s=this.el.children[this.el.children.length-1];if(!e)return s.setAttribute("data-bind-for-key",""),s.setAttribute("data-bind-for-active","false"),s;var n=this.getBindForKey(e,t);return s.setAttribute("data-bind-for-key",n),a.key||s.setAttribute("data-bind-for-value",e),s.setAttribute("data-bind-for-active","true"),s},getElsToRemove:(s=[],function(e,t){var a=this.data,n=this.el;s.length=0;for(var r=0;r{n[e]={},n[e].START="thumb"+e+"start",n[e].END="thumb"+e+"end"});AFRAME.registerComponent("thumb-controls",{schema:{thresholdAngle:{default:89.5},thresholdPad:{default:.05},thresholdStick:{default:.75}},init:function(){var e=this.el;this.onTrackpadDown=this.onTrackpadDown.bind(this),this.onTrackpadUp=this.onTrackpadUp.bind(this),this.directionStick="",this.directionTrackpad="",e.components["tracked-controls"]&&(this.axis=e.components["tracked-controls"].axis),this.type="STICK",e.addEventListener("controllerconnected",t=>{this.axis=e.components["tracked-controls"].axis,"oculus-touch-controls"!==t.detail.name&&"windows-motion-controls"!==t.detail.name?this.type="PAD":this.type="STICK"})},play:function(){var e=this.el;e.addEventListener("trackpaddown",this.onTrackpadDown),e.addEventListener("trackpadup",this.onTrackpadUp),e.addEventListener("touchpaddown",this.onTrackpadDown),e.addEventListener("touchpadup",this.onTrackpadUp)},pause:function(){var e=this.el;e.removeEventListener("trackpaddown",this.onTrackpadDown),e.removeEventListener("trackpadup",this.onTrackpadUp),e.removeEventListener("touchpaddown",this.onTrackpadDown),e.removeEventListener("touchpadup",this.onTrackpadUp)},onTrackpadDown:function(){var e,t=this.el;this.getDistance()this.data.thresholdStick){if(!(e=this.getDirection()))return;return this.directionStick=e,t.emit(n.NULL.START,null,!1),void t.emit(n[this.directionStick].START,null,!1)}this.directionStick&&this.getDistance()360&&(o-=360),(t=a[n]-r)<0&&(e>=360+t&&e<=360||e>=0&&e<=o))return s[n];if(e>=t&&e<=o)return s[n]}},getAngle:function(){var e,t=this.axis;return this.axis?((e="PAD"===this.type?Math.atan2(-t[1],t[0]):Math.atan2(-t[3],t[2]))<0&&(e=2*Math.PI+e),THREE.Math.radToDeg(e)):0}}),AFRAME.registerComponent("thumb-controls-debug",{dependencies:["thumb-controls"],schema:{controllerType:{type:"string"},hand:{type:"string"},enabled:{default:!1}},init:function(){var e,t,a,s,n=this.el;if(this.data.enabled||AFRAME.utils.getUrlParameter("debug-thumb")){console.log("%c debug-thumb","background: #111; color: red");var r=function(){n.components["tracked-controls"].handleAxes=()=>{},a={axis:t=[0,0,0]},n.components["tracked-controls"].axis=t,n.components["thumb-controls"].axis=t};n.components["tracked-controls"]?r():this.el.addEventListener("controllerconnected",(function(){r()})),(s=this.createCanvas()).addEventListener("click",s=>{"vive-controls"===this.data.controllerType?e?n.emit("trackpadup"):n.emit("trackpaddown"):e&&(t[0]=0,t[1]=0,n.emit("axismove",a,!1)),e=!e}),s.addEventListener("mousemove",r=>{var o;e&&(o=s.getBoundingClientRect(),t[0]=(r.clientX-o.left)/240*2-1,t[1]=(r.clientY-o.top)/240*2-1,n.emit("axismove",a,!1))}),s.addEventListener("mouseleave",s=>{e&&(t[0]=0,t[1]=0,n.emit("axismove",a,!1))})}},createCanvas:function(){var e,t;return(e=document.createElement("canvas")).classList.add("debugThumb"),e.height=240,e.width=240,e.style.bottom=0,e.style.borderRadius="250px",e.style.opacity=.5,e.style.position="fixed",e.style.zIndex=999999999,"left"===this.data.hand?e.style.left=0:e.style.right=0,(t=e.getContext("2d")).fillStyle="#333",t.fillRect(0,0,240,240),document.body.appendChild(e),e}})},function(e,t,a){var s={"./active-item.js":59,"./beat-cut-fx.js":60,"./beat-generator.js":15,"./beat-hit-sound.js":61,"./beat.js":21,"./blade.js":62,"./check-vr.js":63,"./console-shortcuts.js":64,"./controller.js":65,"./copy-texture.js":66,"./cursor-laser.js":67,"./cursor-mesh.js":68,"./curve-follow-rig-reset.js":69,"./cutfx-shader.js":70,"./debug-beat-generator.js":73,"./debug-beat-positioning.js":74,"./debug-controller.js":75,"./debug-cursor.js":76,"./debug-intro.js":77,"./debug-song-time.js":78,"./debug-state.js":79,"./delayed-proxy-event.js":80,"./difficulty-background.js":81,"./difficulty-filter.js":82,"./difficulty-text.js":83,"./follow-position.js":84,"./follow-z.js":85,"./gameover.js":86,"./gpu-preloader.js":87,"./gradient-shader.js":88,"./hand-swapper.js":90,"./handstar-shader.js":91,"./haptics-wall.js":94,"./haptics-weapon.js":95,"./headfist.js":96,"./history.js":97,"./intro-song.js":98,"./keyboard-raycastable.js":99,"./leaderboard.js":100,"./materials.js":107,"./menu-controls.js":122,"./menu-difficulty-select.js":123,"./menu-genre.js":124,"./menu-midsection.js":125,"./menu-mode.js":126,"./menu-playlist-button.js":127,"./menu-playlist.js":128,"./menu-selected-challenge-image.js":129,"./menu-slide-animation.js":130,"./multiplier-ring.js":131,"./no-frustum-cull.js":132,"./panel-shader.js":133,"./pause.js":136,"./pauser.js":137,"./play-sound.js":138,"./player-height.js":140,"./plume.js":141,"./punch.js":142,"./raycaster-target.js":143,"./recenter.js":144,"./ring.js":145,"./score-texts.js":148,"./search-thumbnail-atlas.js":149,"./search.js":150,"./song-info-positioner.js":153,"./song-preview.js":154,"./song-progress-info.js":155,"./song.js":156,"./stage-colors.js":157,"./stage-lasers.js":158,"./stars.js":159,"./stats-param.js":160,"./stepback.js":161,"./sub-object.js":162,"./super-keyboard.js":163,"./supercurve-color.js":164,"./supercurve-shader.js":165,"./supercurve.js":168,"./supercutfx-shader.js":171,"./supercutfx.js":172,"./tail.js":173,"./text-counter.js":174,"./text-geometry.js":175,"./text-truncate.js":176,"./text-uppercase.js":177,"./toggle-pause-play.js":178,"./trail.js":179,"./tunnels.js":180,"./vertex-colors-buffer.js":181,"./victory-accuracy-ring.js":182,"./victory-rank.js":183,"./visible-raycastable.js":184,"./wall-shader.js":185,"./wall.js":188,"./weapon-particles.js":189,"./zip-loader.js":190};function n(e){var t=r(e);return a(t)}function r(e){if(!a.o(s,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return s[e]}n.keys=function(){return Object.keys(s)},n.resolve=r,e.exports=n,n.id=58},function(e,t,a){if(AFRAME.registerComponent("active-item",{dependencies:["material"],schema:{active:{default:!1},opacity:{default:1}},init:function(){this.defaultOpacity=this.el.getAttribute("material").opacity,this.materialObj={opacity:this.data.opacity}},update:function(){var e=this.el;this.data.active?(e.setAttribute("material",this.materialObj),e.object3D.visible=!0):(e.setAttribute("material","opacity",this.defaultOpacity),e.components.animation__mouseleave&&setTimeout(()=>{e.emit("mouseleave",null,!1)}))}}),AFRAME.registerComponent("active-text-color",{dependencies:["text"],schema:{active:{default:!1},color:{default:"#333"}},init:function(){this.defaultColor=this.el.getAttribute("text").color},update:function(){var e=this.el;this.data.active?e.setAttribute("text","color",this.data.color):e.setAttribute("text","color",this.defaultColor)}}),window.AFRAME){const t=["active-item","active-text-color"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;sMath.abs(t.y)?"right":"down"),t.z*=.01,s.copy(t).multiplyScalar(-.0025).clampLength(0,.01);for(let t=0;t{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{AFRAME.utils.device.checkHeadsetConnected()&&this.el.emit("displayconnected")},250)}}),window.AFRAME){const t=[],a=[],s=["check-vr"];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;sdocument.querySelector(e),window.$$=e=>document.querySelectorAll(e),window.$$$=e=>document.querySelector(`[${e}]`).getAttribute(e),window.$$$$=e=>document.querySelector(`[${e}]`).components[e],window.scene=this.el,window.state=this.el.systems.state.state}}),window.AFRAME){const t=["console-shortcuts"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.controllerType=e.detail.name,this.el.setAttribute("cursor",this.config[this.controllerType].cursor||{})});const a={hand:t.hand,model:!1};e.setAttribute("daydream-controls",a),e.setAttribute("oculus-go-controls",a),e.setAttribute("oculus-touch-controls",{hand:t.hand,model:!1,orientationOffset:{x:0,y:0,z:0}}),e.setAttribute("vive-controls",a),e.setAttribute("vive-focus-controls",a),e.setAttribute("windows-motion-controls",a),e.setAttribute("generic-tracked-controller-controls",a)},config:{"daydream-controls":{cursor:{downEvents:["trackpaddown","triggerdown"],upEvents:["trackpadup","triggerup"]}},"oculus-go-controls":{cursor:{downEvents:["trackpaddown","triggerdown"],upEvents:["trackpadup","triggerup"]}},"oculus-touch-controls":{cursor:{downEvents:["triggerdown","gripdown","abuttondown","bbuttondown","xbuttondown","ybuttondown"],upEvents:["triggerup","gripup","abuttonup","bbuttonup","xbuttonup","ybuttonup"]}},"vive-controls":{cursor:{downEvents:["trackpaddown","triggerdown","gripdown"],upEvents:["trackpadup","triggerup","gripup"]}},"vive-focus-controls":{cursor:{downEvents:["trackpaddown","triggerdown","gripdown"],upEvents:["trackpadup","triggerup","gripup"]}},"windows-motion-controls":{cursor:{downEvents:["trackpaddown","triggerdown","gripdown"],upEvents:["trackpadup","triggerup","gripup"]}},"generic-tracked-controller-controls":{cursor:{downEvents:["triggerdown"],upEvents:["triggerup"]}}}}),window.AFRAME){const t=["controller"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.copyTexture()}),this.copyTexture()},copyTexture:function(){const e=this.el,t=this.data.from,a=e.getObject3D("mesh").material;t.getObject3D("mesh")&&(a.map=t.getObject3D("mesh").material.map,a.map&&(a.map.needsUpdate=!0,a.needsUpdate=!0))}}),window.AFRAME){const t=["copy-texture"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.reset()})},update:function(e){const t=this.data;this.el;!e.isVictory&&t.isVictory&&this.reset()},reset:function(){this.el.components["supercurve-follow"].curveProgress=0,this.el.object3D.position.set(0,0,0),this.el.object3D.rotation.set(0,0,0)}}),window.AFRAME){const t=["curve-follow-rig-reset"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{t.spawn()});r.style.width="460px",r.style.bottomMargin="10px"}()},addDebugStageControls:function(){var e=0;const t=(t,a,s)=>{const n=document.createElement("div");n.style.position="absolute",n.id="stagecontrol"+t,n.style.width="100px",n.style.height="30px",n.style.top="element"===s?"20px":"70px",n.style.background="#000",n.style.color="#fff",n.style.zIndex=999999999,n.style.padding="5px",n.style.font="14px sans-serif",n.style.textAlign="center",n.style.cursor="pointer",n.style.left=20+120*t+"px",n.innerHTML=a,"element"===s?n.addEventListener("click",()=>{document.getElementById("stagecontrol"+e).style.background="#000",n.style.background="#66f",e=t}):n.addEventListener("click",()=>{this.beatLoader.generateEvent({_type:e,_value:t})}),document.body.appendChild(n)};["sky","tunnelNeon","leftStageLasers","rightStageLasers","floor"].forEach((e,a)=>{t(a,e,"element")}),["off","blue","blue","bluefade","","red","red","redfade"].forEach((e,a)=>{t(a,e,"value")})}}),window.AFRAME){const t=["debug-beat-generator"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{const t=this.el.sceneEl.components["beat-generator"];t.data.gameMode=e,scene.components["beat-system"].data.gameMode=e,scene.components["beat-system"].updateBeatPositioning(),s.forEach(a=>{n.forEach(s=>{let n=t.requestBeat("punch"===e?"dot":"arrow","red"),r=Math.random()<.5?"left":"right";n.components.beat.onGenerate(.001,a,s,r),n.object3D.renderOrder=9999,n.play(),n=t.requestBeat("dot","blue"),r=Math.random()<.5?"down":"up",n.components.beat.onGenerate(.0015,a,s,r),n.object3D.renderOrder=9999,n.play()})});const a=scene.components.pool__wall.requestEntity();a.components.wall.onGenerate(.0015,"left",4,4,!0),a.play(),document.getElementById("beatContainer").removeAttribute("bind__visible"),document.getElementById("beatContainer").object3D.visible=!0},500))}}),window.AFRAME){const t=["debug-beat-positioning"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{t.isTrusted&&(e.emit("triggerdown"),e.emit("triggerup"))}),"oculus"===AFRAME.utils.getUrlParameter("debug")?(e.emit("controllerconnected",{name:"oculus-touch-controls"}),t.emit("controllerconnected",{name:"oculus-touch-controls"}),e.setAttribute("controller","controllerType","oculus-touch-controls"),t.setAttribute("controller","controllerType","oculus-touch-controls")):(e.emit("controllerconnected",{name:"vive-controls"}),t.emit("controllerconnected",{name:"vive-controls"}),e.setAttribute("controller","controllerType","vive-controls"),t.setAttribute("controller","controllerType","vive-controls")),this.el.emit("enter-vr",null,!1),document.addEventListener("keydown",a=>{var s,n,r,o;a.shiftKey&&(32!==a.keyCode?81!==a.keyCode?(78===a.keyCode&&(this.secondaryGripDown?(t.emit("gripup"),this.secondaryGripDown=!1):(t.emit("gripdown"),this.secondaryGripDown=!0)),77===a.keyCode&&(this.primaryGripDown?(e.emit("gripup"),this.primaryGripDown=!1):(e.emit("gripdown"),this.primaryGripDown=!0)),49===a.keyCode&&t.emit("menudown"),a.ctrlKey?(r=t.getAttribute("position"),72===a.keyCode&&(r.x-=.02),74===a.keyCode&&(r.y-=.02),75===a.keyCode&&(r.y+=.02),76===a.keyCode&&(r.x+=.02),59!==a.keyCode&&186!==a.keyCode||(r.z-=.01),222===a.keyCode&&(r.z+=.01),t.setAttribute("position",AFRAME.utils.clone(r))):(s=e.getAttribute("position"),72===a.keyCode&&(s.x-=.02),74===a.keyCode&&(s.y-=.02),75===a.keyCode&&(s.y+=.02),76===a.keyCode&&(s.x+=.02),59!==a.keyCode&&186!==a.keyCode||(s.z-=.02),222===a.keyCode&&(s.z+=.02),e.setAttribute("position",AFRAME.utils.clone(s))),a.ctrlKey?(o=t.getAttribute("rotation"),89===a.keyCode&&(o.x-=10),79===a.keyCode&&(o.x+=10),85===a.keyCode&&(o.y-=10),73===a.keyCode&&(o.y+=10),t.setAttribute("rotation",AFRAME.utils.clone(o))):(n=e.getAttribute("rotation"),89===a.keyCode&&(n.x-=10),79===a.keyCode&&(n.x+=10),85===a.keyCode&&(n.y-=10),73===a.keyCode&&(n.y+=10),e.setAttribute("rotation",AFRAME.utils.clone(n)))):this.isSecondaryTriggerDown?(t.emit("triggerup"),this.isSecondaryTriggerDown=!1):(t.emit("triggerdown"),this.isSecondaryTriggerDown=!0):this.isTriggerDown?(e.emit("triggerup"),this.isTriggerDown=!1):(e.emit("triggerdown"),this.isTriggerDown=!0))})))},play:function(){var e,t;if(this.bounds=document.body.getBoundingClientRect(),!AFRAME.utils.getUrlParameter("debug"))return;if(AFRAME.utils.getUrlParameter("headfist"))return;e=document.getElementById("rightHand"),(t=document.getElementById("leftHand")).object3D.position.set(-.2,1.5,-.5),e.object3D.position.set(.2,1.5,-.5),t.setAttribute("rotation",{x:35,y:0,z:0});const a=AFRAME.utils.getUrlParameter("type");[e,t].forEach(e=>{e.querySelector(".laser").object3D.visible=!1,"classic"===a?(e.querySelector(".bladeContainer").removeAttribute("bind__visible"),e.querySelector(".bladeContainer").object3D.visible=!0,e.querySelector(".bladeContainer").object3D.scale.set(1,1,1)):"punch"===a?(e.querySelector(".punch").removeAttribute("bind__visible"),e.querySelector(".punch").object3D.visible=!0,e.querySelector(".punch").object3D.visible=!0,e.querySelector(".bladeHandle").object3D.visible=!1):"ride"===a&&(e.querySelector(".handStar").removeAttribute("bind__visible"),e.querySelector(".handStar").object3D.visible=!0,e.querySelector(".bladeHandle").object3D.visible=!1)})},onMouseMove:function(){const e=new THREE.Vector3,t=new THREE.Vector2,a=new THREE.Vector3;return function(s){const n=this.bounds,r=this.el.sceneEl.camera,o=s.clientX-n.left,i=s.clientY-n.top;t.x=o/n.width*2-1,t.y=-i/n.height*2-1,document.getElementById("camera").object3D.getWorldPosition(a),e.set(t.x,t.y,.5).unproject(r).sub(a).normalize();const c=document.getElementById("rightHand").object3D.position,d=-a.z/e.z;r.getWorldPosition(c).add(e.multiplyScalar(d)),c.y+=.8}}()}),window.AFRAME){const t=["debug-controller"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{console.log(this.el.components.song.getCurrentTime())},250)}}),window.AFRAME){const t=["debug-song-time"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.split(",").forEach(e=>{this.el.sceneEl.emit("debug"+e.trim(),null,!1)})},500)}}),window.AFRAME){const t=["debug-state"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{var s=r.data;if(s.enabled&&(s.captureBubbles||e.target===n))for(t=0;t{var t=a.data;t.enabled&&(t.captureBubbles||s.target===e)&&a.el.emit(t.as||t.event,s.detail?s.detail:null,!1)},t.delay)}))}}),window.AFRAME){const t=["delayed-proxy-event"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s=0&&(this.beatContainer.object3D.position.z=1.5*-Math.pow(1-this.countDown,2),this.countDown-=t/1e3)},reset:function(){this.beatContainer.object3D.position.z=0,this.el.sceneEl.setAttribute("stage-colors","color","blue")},triggerAnimations:function(){for(let e=0;e{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.preloadFromSelector("#mainLogo"),this.preloadFromSelector("#prevArrow"),this.preloadFromSelector("#stepback"),this.preloadFromSelector(".difficultyBackground"),this.preloadFromSelector(".genreIcon"),this.preloadFromSelector(".merkababloom"),this.preloadFromSelector(".searchResultBackground"),this.preloadMaterialsComponentTextures(),this.preloadKeyboard(),this.preloadSlice(),this.preloadEnvMap(),this.preloadFXs()},1e3)},preloadFromSelector:function(e){const t=document.querySelector(e);this.preloadTexture(t.getObject3D("mesh").material.map)},preloadMaterialsComponentTextures:function(){const e=this.el.systems.materials.textureList;for(var t=0;t{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.el.addEventListener(e,this.swapHand)})},swapHand:function(){this.data.enabled&&this.el.sceneEl.emit("activehandswap",null,!1)}}),window.AFRAME){const t=["hand-swapper"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{if(!t.detail||!t.detail.intersectedEl||!this.data.enabled)return;const a=t.detail.intersectedEl;a.classList.contains("blade")&&a!==e?(this.isColliding=!0,this.el.components.haptics__weapon.pulse()):this.isColliding=!1}),e.addEventListener("mouseleave",e=>{this.isColliding=!1})},tick:function(){this.isColliding&&this.data.enabled&&this.el.components.haptics__weapon.pulse()}}),window.AFRAME){const t=["haptics-weapons"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.username=e.detail.value,localStorage.setItem("moonriderusername",this.username)}),this.el.addEventListener("leaderboardsubmit",this.addScore.bind(this))},update:function(e){!s.apps.length&&this.data.apiKey&&(s.initializeApp({apiKey:this.data.apiKey,authDomain:this.data.authDomain,databaseURL:this.data.databaseURL,projectId:this.data.projectId,storageBucket:this.data.storageBucket,messagingSenderId:this.data.messagingSenderId}),this.firestore=s.firestore(),this.firestore.settings({}),this.db=this.firestore.collection("scores")),!e.isVictory&&this.data.isVictory&&this.checkLeaderboardQualify(),this.data.difficulty&&e.difficulty!==this.data.difficulty||this.data.menuSelectedChallengeId&&e.menuSelectedChallengeId!==this.data.menuSelectedChallengeId?this.fetchScores(this.data.menuSelectedChallengeId):this.data.challengeId&&e.challengeId!==this.data.challengeId&&this.fetchScores(this.data.challengeId)},addScore:function(){const e=this.el.sceneEl.systems.state.state;if(!e.isVictory||!e.inVR)return;const t={accuracy:e.score.accuracy,challengeId:e.challenge.id,gameMode:this.data.gameMode,score:e.score.score,username:this.username,difficulty:this.data.difficulty||e.challenge.difficulty,time:new Date};n.includes(this.username.toLowerCase())||this.username.match(r)||this.db.add(t),this.addEventDetail.scoreData=t,this.el.emit("leaderboardscoreadded",this.addEventDetail,!1)},fetchScores:function(e){if("ride"===this.data.gameMode)return;const t=this.el.sceneEl.systems.state.state;this.db.where("challengeId","==",e).where("difficulty","==",t.menuSelectedChallenge.id?t.menuSelectedChallenge.difficulty:t.challenge.difficulty).where("gameMode","==",this.data.gameMode).orderBy("score","desc").orderBy("time","asc").limit(10).get().then(t=>{this.eventDetail.challengeId=e,this.scores.length=0,t.empty||t.forEach(e=>this.scores.push(e.data())),this.el.sceneEl.emit("leaderboard",this.eventDetail,!1)}).catch(e=>{console.error("[firestore]",e)})},checkLeaderboardQualify:function(){const e=this.el.sceneEl.systems.state.state.score.score;if(!AFRAME.utils.getUrlParameter("dot")){if(this.scores.length<10)return this.qualifyingIndex=this.scores.length,void this.el.sceneEl.emit("leaderboardqualify",this.scores.length,!1);for(let t=0;tthis.scores[t].score)return this.qualifyingIndex=t,void this.el.sceneEl.emit("leaderboardqualify",t,!1)}}}),window.AFRAME){const t=["leaderboard"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;st?1:0}function S(e,t,a){return e.length===t.length&&e.every((function(e,s){return a(e,t[s])}))}function E(e){return e+"\0"} +/** + * @license + * Copyright 2017 Google LLC + * + * 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. + */var T=function(e,t,a,s,n){this.s=e,this.persistenceKey=t,this.host=a,this.ssl=s,this.forceLongPolling=n},k=function(){function e(e,t){this.projectId=e,this.database=t||"(default)"}return Object.defineProperty(e.prototype,"i",{get:function(){return"(default)"===this.database},enumerable:!1,configurable:!0}),e.prototype.isEqual=function(t){return t instanceof e&&t.projectId===this.projectId&&t.database===this.database},e.prototype.o=function(e){return w(this.projectId,e.projectId)||w(this.database,e.database)},e}(); +/** + * @license + * Copyright 2017 Google LLC + * + * 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. + */function R(e){var t=0;for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t++;return t}function N(e,t){for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t(a,e[a])}function x(e){for(var t in e)if(Object.prototype.hasOwnProperty.call(e,t))return!1;return!0} +/** + * @license + * Copyright 2017 Google LLC + * + * 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. + */var P=function(){function e(e,t){this.h=e,this.u=t,this.l={}}return e.prototype.get=function(e){var t=this.h(e),a=this.l[t];if(void 0!==a)for(var s=0,n=a;s=1e9)throw new L(j.INVALID_ARGUMENT,"Timestamp nanoseconds out of range: "+t);if(e<-62135596800)throw new L(j.INVALID_ARGUMENT,"Timestamp seconds out of range: "+e);if(e>=253402300800)throw new L(j.INVALID_ARGUMENT,"Timestamp seconds out of range: "+e)}return e.now=function(){return e.fromMillis(Date.now())},e.fromDate=function(t){return e.fromMillis(t.getTime())},e.fromMillis=function(t){var a=Math.floor(t/1e3);return new e(a,1e6*(t-1e3*a))},e.prototype.toDate=function(){return new Date(this.toMillis())},e.prototype.toMillis=function(){return 1e3*this.seconds+this.nanoseconds/1e6},e.prototype.T=function(e){return this.seconds===e.seconds?w(this.nanoseconds,e.nanoseconds):w(this.seconds,e.seconds)},e.prototype.isEqual=function(e){return e.seconds===this.seconds&&e.nanoseconds===this.nanoseconds},e.prototype.toString=function(){return"Timestamp(seconds="+this.seconds+", nanoseconds="+this.nanoseconds+")"},e.prototype.toJSON=function(){return{seconds:this.seconds,nanoseconds:this.nanoseconds}},e.prototype.valueOf=function(){var e=this.seconds- -62135596800;return String(e).padStart(12,"0")+"."+String(this.nanoseconds).padStart(9,"0")},e}(),_=function(){function e(e){this.timestamp=e}return e.m=function(t){return new e(t)},e.min=function(){return new e(new M(0,0))},e.prototype.o=function(e){return this.timestamp.T(e.timestamp)},e.prototype.isEqual=function(e){return this.timestamp.isEqual(e.timestamp)},e.prototype.I=function(){return 1e6*this.timestamp.seconds+this.timestamp.nanoseconds/1e3},e.prototype.toString=function(){return"SnapshotVersion("+this.timestamp.toString()+")"},e.prototype.A=function(){return this.timestamp},e}(),D=function(){function e(e,t,a){void 0===t?t=0:t>e.length&&b(),void 0===a?a=e.length-t:a>e.length-t&&b(),this.segments=e,this.offset=t,this.R=a}return Object.defineProperty(e.prototype,"length",{get:function(){return this.R},enumerable:!1,configurable:!0}),e.prototype.isEqual=function(t){return 0===e.P(this,t)},e.prototype.child=function(t){var a=this.segments.slice(this.offset,this.limit());return t instanceof e?t.forEach((function(e){a.push(e)})):a.push(t),this.g(a)},e.prototype.limit=function(){return this.offset+this.length},e.prototype.V=function(e){return e=void 0===e?1:e,this.g(this.segments,this.offset+e,this.length-e)},e.prototype.p=function(){return this.g(this.segments,this.offset,this.length-1)},e.prototype.v=function(){return this.segments[this.offset]},e.prototype.S=function(){return this.get(this.length-1)},e.prototype.get=function(e){return this.segments[this.offset+e]},e.prototype._=function(){return 0===this.length},e.prototype.D=function(e){if(e.lengthr)return 1}return e.lengtht.length?1:0},e}(),I=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n.__extends(t,e),t.prototype.g=function(e,a,s){return new t(e,a,s)},t.prototype.F=function(){return this.N().join("/")},t.prototype.toString=function(){return this.F()},t.k=function(e){if(e.indexOf("//")>=0)throw new L(j.INVALID_ARGUMENT,"Invalid path ("+e+"). Paths must not contain // in them.");return new t(e.split("/").filter((function(e){return e.length>0})))},t.$=function(){return new t([])},t}(D),O=/^[_a-zA-Z][_a-zA-Z0-9]*$/,Z=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n.__extends(t,e),t.prototype.g=function(e,a,s){return new t(e,a,s)},t.O=function(e){return O.test(e)},t.prototype.F=function(){return this.N().map((function(e){return e=e.replace("\\","\\\\").replace("`","\\`"),t.O(e)||(e="`"+e+"`"),e})).join(".")},t.prototype.toString=function(){return this.F()},t.prototype.M=function(){return 1===this.length&&"__name__"===this.get(0)},t.L=function(){return new t(["__name__"])},t.q=function(e){for(var a=[],s="",n=0,r=function(){if(0===s.length)throw new L(j.INVALID_ARGUMENT,"Invalid field path ("+e+"). Paths must not be empty, begin with '.', end with '.', or contain '..'");a.push(s),s=""},o=!1;n=2&&this.path.get(this.path.length-2)===e},e.prototype.isEqual=function(e){return null!==e&&0===I.P(this.path,e.path)},e.prototype.toString=function(){return this.path.toString()},e.P=function(e,t){return I.P(e.path,t.path)},e.j=function(e){return e.length%2==0},e.K=function(t){return new e(new I(t.slice()))},e}(); +/** + * @license + * Copyright 2017 Google LLC + * + * 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 + * Copyright 2017 Google LLC + * + * 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. + */function U(e){return null==e}function F(e){return-0===e&&1/e==-1/0}function q(e){return"number"==typeof e&&Number.isInteger(e)&&!F(e)&&e<=Number.MAX_SAFE_INTEGER&&e>=Number.MIN_SAFE_INTEGER} +/** + * @license + * Copyright 2019 Google LLC + * + * 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. + */var H=function(e,t,a,s,n,r,o){void 0===t&&(t=null),void 0===a&&(a=[]),void 0===s&&(s=[]),void 0===n&&(n=null),void 0===r&&(r=null),void 0===o&&(o=null),this.path=e,this.collectionGroup=t,this.orderBy=a,this.filters=s,this.limit=n,this.startAt=r,this.endAt=o,this.G=null};function B(e,t,a,s,n,r,o){return void 0===t&&(t=null),void 0===a&&(a=[]),void 0===s&&(s=[]),void 0===n&&(n=null),void 0===r&&(r=null),void 0===o&&(o=null),new H(e,t,a,s,n,r,o)}function z(e){var t=g(e);if(null===t.G){var a=t.path.F();null!==t.collectionGroup&&(a+="|cg:"+t.collectionGroup),a+="|f:",a+=t.filters.map((function(e){return function(e){return e.field.F()+e.op.toString()+Ie(e.value)}(e)})).join(","),a+="|ob:",a+=t.orderBy.map((function(e){return(t=e).field.F()+t.dir;var t})).join(","),U(t.limit)||(a+="|l:",a+=t.limit),t.startAt&&(a+="|lb:",a+=La(t.startAt)),t.endAt&&(a+="|ub:",a+=La(t.endAt)),t.G=a}return t.G}function V(e,t){if(e.limit!==t.limit)return!1;if(e.orderBy.length!==t.orderBy.length)return!1;for(var a=0;a0&&(t=t.right)}return null},e.prototype.indexOf=function(e){for(var t=0,a=this.root;!a._();){var s=this.P(e,a.key);if(0===s)return t+a.left.size;s<0?a=a.left:(t+=a.left.size+1,a=a.right)}return-1},e.prototype._=function(){return this.root._()},Object.defineProperty(e.prototype,"size",{get:function(){return this.root.size},enumerable:!1,configurable:!0}),e.prototype.rt=function(){return this.root.rt()},e.prototype.ot=function(){return this.root.ot()},e.prototype.ht=function(e){return this.root.ht(e)},e.prototype.forEach=function(e){this.ht((function(t,a){return e(t,a),!1}))},e.prototype.toString=function(){var e=[];return this.ht((function(t,a){return e.push(t+":"+a),!1})),"{"+e.join(", ")+"}"},e.prototype.at=function(e){return this.root.at(e)},e.prototype.ct=function(){return new te(this.root,null,this.P,!1)},e.prototype.ut=function(e){return new te(this.root,e,this.P,!1)},e.prototype.lt=function(){return new te(this.root,null,this.P,!0)},e.prototype._t=function(e){return new te(this.root,e,this.P,!0)},e}(),te=function(){function e(e,t,a,s){this.ft=s,this.dt=[];for(var n=1;!e._();)if(n=t?a(e.key,t):1,s&&(n*=-1),n<0)e=this.ft?e.left:e.right;else{if(0===n){this.dt.push(e);break}this.dt.push(e),e=this.ft?e.right:e.left}}return e.prototype.wt=function(){var e=this.dt.pop(),t={key:e.key,value:e.value};if(this.ft)for(e=e.left;!e._();)this.dt.push(e),e=e.right;else for(e=e.right;!e._();)this.dt.push(e),e=e.left;return t},e.prototype.Tt=function(){return this.dt.length>0},e.prototype.Et=function(){if(0===this.dt.length)return null;var e=this.dt[this.dt.length-1];return{key:e.key,value:e.value}},e}(),ae=function(){function e(t,a,s,n,r){this.key=t,this.value=a,this.color=null!=s?s:e.RED,this.left=null!=n?n:e.EMPTY,this.right=null!=r?r:e.EMPTY,this.size=this.left.size+1+this.right.size}return e.prototype.copy=function(t,a,s,n,r){return new e(null!=t?t:this.key,null!=a?a:this.value,null!=s?s:this.color,null!=n?n:this.left,null!=r?r:this.right)},e.prototype._=function(){return!1},e.prototype.ht=function(e){return this.left.ht(e)||e(this.key,this.value)||this.right.ht(e)},e.prototype.at=function(e){return this.right.at(e)||e(this.key,this.value)||this.left.at(e)},e.prototype.min=function(){return this.left._()?this:this.left.min()},e.prototype.rt=function(){return this.min().key},e.prototype.ot=function(){return this.right._()?this.key:this.right.ot()},e.prototype.st=function(e,t,a){var s=this,n=a(e,s.key);return(s=n<0?s.copy(null,null,null,s.left.st(e,t,a),null):0===n?s.copy(null,t,null,null,null):s.copy(null,null,null,null,s.right.st(e,t,a))).It()},e.prototype.At=function(){if(this.left._())return e.EMPTY;var t=this;return t.left.Rt()||t.left.left.Rt()||(t=t.Pt()),(t=t.copy(null,null,null,t.left.At(),null)).It()},e.prototype.remove=function(t,a){var s,n=this;if(a(t,n.key)<0)n.left._()||n.left.Rt()||n.left.left.Rt()||(n=n.Pt()),n=n.copy(null,null,null,n.left.remove(t,a),null);else{if(n.left.Rt()&&(n=n.gt()),n.right._()||n.right.Rt()||n.right.left.Rt()||(n=n.Vt()),0===a(t,n.key)){if(n.right._())return e.EMPTY;s=n.right.min(),n=n.copy(s.key,s.value,null,null,n.right.At())}n=n.copy(null,null,null,null,n.right.remove(t,a))}return n.It()},e.prototype.Rt=function(){return this.color},e.prototype.It=function(){var e=this;return e.right.Rt()&&!e.left.Rt()&&(e=e.yt()),e.left.Rt()&&e.left.left.Rt()&&(e=e.gt()),e.left.Rt()&&e.right.Rt()&&(e=e.pt()),e},e.prototype.Pt=function(){var e=this.pt();return e.right.left.Rt()&&(e=(e=(e=e.copy(null,null,null,null,e.right.gt())).yt()).pt()),e},e.prototype.Vt=function(){var e=this.pt();return e.left.left.Rt()&&(e=(e=e.gt()).pt()),e},e.prototype.yt=function(){var t=this.copy(null,null,e.RED,null,this.right.left);return this.right.copy(null,null,this.color,t,null)},e.prototype.gt=function(){var t=this.copy(null,null,e.RED,this.left.right,null);return this.left.copy(null,null,this.color,null,t)},e.prototype.pt=function(){var e=this.left.copy(null,null,!this.left.color,null,null),t=this.right.copy(null,null,!this.right.color,null,null);return this.copy(null,null,!this.color,e,t)},e.prototype.bt=function(){var e=this.vt();return Math.pow(2,e)<=this.size+1},e.prototype.vt=function(){if(this.Rt()&&this.left.Rt())throw b();if(this.right.Rt())throw b();var e=this.left.vt();if(e!==this.right.vt())throw b();return e+(this.Rt()?0:1)},e}();ae.EMPTY=null,ae.RED=!0,ae.it=!1,ae.EMPTY=new(function(){function e(){this.size=0}return Object.defineProperty(e.prototype,"key",{get:function(){throw b()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"value",{get:function(){throw b()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"color",{get:function(){throw b()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"left",{get:function(){throw b()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"right",{get:function(){throw b()},enumerable:!1,configurable:!0}),e.prototype.copy=function(e,t,a,s,n){return this},e.prototype.st=function(e,t,a){return new ae(e,t)},e.prototype.remove=function(e,t){return this},e.prototype._=function(){return!0},e.prototype.ht=function(e){return!1},e.prototype.at=function(e){return!1},e.prototype.rt=function(){return null},e.prototype.ot=function(){return null},e.prototype.Rt=function(){return!1},e.prototype.bt=function(){return!0},e.prototype.vt=function(){return 0},e}()); +/** + * @license + * Copyright 2017 Google LLC + * + * 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. + */ +var se=function(){function e(e){this.P=e,this.data=new ee(this.P)}return e.prototype.has=function(e){return null!==this.data.get(e)},e.prototype.first=function(){return this.data.rt()},e.prototype.last=function(){return this.data.ot()},Object.defineProperty(e.prototype,"size",{get:function(){return this.data.size},enumerable:!1,configurable:!0}),e.prototype.indexOf=function(e){return this.data.indexOf(e)},e.prototype.forEach=function(e){this.data.ht((function(t,a){return e(t),!1}))},e.prototype.St=function(e,t){for(var a=this.data.ut(e[0]);a.Tt();){var s=a.wt();if(this.P(s.key,e[1])>=0)return;t(s.key)}},e.prototype.Dt=function(e,t){var a;for(a=void 0!==t?this.data.ut(t):this.data.ct();a.Tt();)if(!e(a.wt().key))return},e.prototype.Ct=function(e){var t=this.data.ut(e);return t.Tt()?t.wt().key:null},e.prototype.ct=function(){return new ne(this.data.ct())},e.prototype.ut=function(e){return new ne(this.data.ut(e))},e.prototype.add=function(e){return this.copy(this.data.remove(e).st(e,!0))},e.prototype.delete=function(e){return this.has(e)?this.copy(this.data.remove(e)):this},e.prototype._=function(){return this.data._()},e.prototype.Nt=function(e){var t=this;return t.size0&&(this.he=!0,this.re=e)},e.prototype.le=function(){var e=he(),t=he(),a=he();return this.ie.forEach((function(s,n){switch(n){case 0:e=e.add(s);break;case 2:t=t.add(s);break;case 1:a=a.add(s);break;default:b()}})),new ve(this.re,this.oe,e,t,a)},e.prototype._e=function(){this.he=!1,this.ie=Re()},e.prototype.fe=function(e,t){this.he=!0,this.ie=this.ie.st(e,t)},e.prototype.de=function(e){this.he=!0,this.ie=this.ie.remove(e)},e.prototype.we=function(){this.se+=1},e.prototype.Te=function(){this.se-=1},e.prototype.Ee=function(){this.he=!0,this.oe=!0},e}(),Te=function(){function e(e){this.me=e,this.Ie=new Map,this.Ae=oe(),this.Re=ke(),this.Pe=new se(w)}return e.prototype.ge=function(e){for(var t=0,a=e.te;t0?e.targetIds.forEach(t):this.Ie.forEach((function(e,s){a.Se(s)&&t(s)}))},e.prototype.Ce=function(e){var t=e.targetId,a=e.ne.count,s=this.Ne(t);if(s){var n=s.target;if(J(n))if(0===a){var r=new C(n.path);this.ye(t,r,new na(r,_.min()))}else y(1===a);else this.Fe(t)!==a&&(this.De(t),this.Pe=this.Pe.add(t))}},e.prototype.ke=function(e){var t=this,a=new Map;this.Ie.forEach((function(s,n){var r=t.Ne(n);if(r){if(s.Yt&&J(r.target)){var o=new C(r.target.path);null!==t.Ae.get(o)||t.$e(n,o)||t.ye(n,o,new na(o,e))}s.ce&&(a.set(n,s.le()),s._e())}}));var s=he();this.Re.forEach((function(e,a){var n=!0;a.Dt((function(e){var a=t.Ne(e);return!a||2===a.X||(n=!1,!1)})),n&&(s=s.add(e))}));var n=new ge(e,a,this.Pe,this.Ae,s);return this.Ae=oe(),this.Re=ke(),this.Pe=new se(w),n},e.prototype.Ve=function(e,t){if(this.Se(e)){var a=this.$e(e,t.key)?2:0;this.ve(e).fe(t.key,a),this.Ae=this.Ae.st(t.key,t),this.Re=this.Re.st(t.key,this.xe(t.key).add(e))}},e.prototype.ye=function(e,t,a){if(this.Se(e)){var s=this.ve(e);this.$e(e,t)?s.fe(t,1):s.de(t),this.Re=this.Re.st(t,this.xe(t).delete(e)),a&&(this.Ae=this.Ae.st(t,a))}},e.prototype.removeTarget=function(e){this.Ie.delete(e)},e.prototype.Fe=function(e){var t=this.ve(e).le();return this.me.Oe(e).size+t.Jt.size-t.Zt.size},e.prototype.we=function(e){this.ve(e).we()},e.prototype.ve=function(e){var t=this.Ie.get(e);return t||(t=new Ee,this.Ie.set(e,t)),t},e.prototype.xe=function(e){var t=this.Re.get(e);return t||(t=new se(w),this.Re=this.Re.st(e,t)),t},e.prototype.Se=function(e){var t=null!==this.Ne(e);return t||h("WatchChangeAggregator","Detected inactive target",e),t},e.prototype.Ne=function(e){var t=this.Ie.get(e);return t&&t.ae?null:this.me.Me(e)},e.prototype.De=function(e){var t=this;this.Ie.set(e,new Ee),this.me.Oe(e).forEach((function(a){t.ye(e,a,null)}))},e.prototype.$e=function(e,t){return this.me.Oe(e).has(t)},e}(); +/** + * @license + * Copyright 2017 Google LLC + * + * 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. + */function ke(){return new ee(C.P)}function Re(){return new ee(C.P)} +/** + * @license + * Copyright 2020 Google LLC + * + * 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. + */function Ne(e){var t,a;return"server_timestamp"===(null===(a=((null===(t=null==e?void 0:e.mapValue)||void 0===t?void 0:t.fields)||{}).__type__)||void 0===a?void 0:a.stringValue)}function xe(e){var t=Oe(e.mapValue.fields.__local_write_time__.timestampValue);return new M(t.seconds,t.nanos)} +/** + * @license + * Copyright 2020 Google LLC + * + * 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. + */var Pe=new RegExp(/^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d(?:\.(\d+))?Z$/);function je(e){return"nullValue"in e?0:"booleanValue"in e?1:"integerValue"in e||"doubleValue"in e?2:"timestampValue"in e?3:"stringValue"in e?5:"bytesValue"in e?6:"referenceValue"in e?7:"geoPointValue"in e?8:"arrayValue"in e?9:"mapValue"in e?Ne(e)?4:10:b()}function Le(e,t){var a=je(e);if(a!==je(t))return!1;switch(a){case 0:return!0;case 1:return e.booleanValue===t.booleanValue;case 4:return xe(e).isEqual(xe(t));case 3:return function(e,t){if("string"==typeof e.timestampValue&&"string"==typeof t.timestampValue&&e.timestampValue.length===t.timestampValue.length)return e.timestampValue===t.timestampValue;var a=Oe(e.timestampValue),s=Oe(t.timestampValue);return a.seconds===s.seconds&&a.nanos===s.nanos}(e,t);case 5:return e.stringValue===t.stringValue;case 6:return function(e,t){return Ce(e.bytesValue).isEqual(Ce(t.bytesValue))}(e,t);case 7:return e.referenceValue===t.referenceValue;case 8:return function(e,t){return Ze(e.geoPointValue.latitude)===Ze(t.geoPointValue.latitude)&&Ze(e.geoPointValue.longitude)===Ze(t.geoPointValue.longitude)}(e,t);case 2:return function(e,t){if("integerValue"in e&&"integerValue"in t)return Ze(e.integerValue)===Ze(t.integerValue);if("doubleValue"in e&&"doubleValue"in t){var a=Ze(e.doubleValue),s=Ze(t.doubleValue);return a===s?F(a)===F(s):isNaN(a)&&isNaN(s)}return!1}(e,t);case 9:return S(e.arrayValue.values||[],t.arrayValue.values||[],Le);case 10:return function(e,t){var a=e.mapValue.fields||{},s=t.mapValue.fields||{};if(R(a)!==R(s))return!1;for(var n in a)if(a.hasOwnProperty(n)&&(void 0===s[n]||!Le(a[n],s[n])))return!1;return!0}(e,t);default:return b()}}function Me(e,t){return void 0!==(e.values||[]).find((function(e){return Le(e,t)}))}function _e(e,t){var a=je(e),s=je(t);if(a!==s)return w(a,s);switch(a){case 0:return 0;case 1:return w(e.booleanValue,t.booleanValue);case 2:return function(e,t){var a=Ze(e.integerValue||e.doubleValue),s=Ze(t.integerValue||t.doubleValue);return as?1:a===s?0:isNaN(a)?isNaN(s)?0:-1:1}(e,t);case 3:return De(e.timestampValue,t.timestampValue);case 4:return De(xe(e),xe(t));case 5:return w(e.stringValue,t.stringValue);case 6:return function(e,t){var a=Ce(e),s=Ce(t);return a.o(s)}(e.bytesValue,t.bytesValue);case 7:return function(e,t){for(var a=e.split("/"),s=t.split("/"),n=0;n":"GREATER_THAN",">=":"GREATER_THAN_OR_EQUAL","==":"EQUAL","!=":"NOT_EQUAL","array-contains":"ARRAY_CONTAINS",in:"IN","not-in":"NOT_IN","array-contains-any":"ARRAY_CONTAINS_ANY"},Ge=function(e,t){this.s=e,this.Le=t};function We(e){return{integerValue:""+e}}function Ke(e,t){if(e.Le){if(isNaN(t))return{doubleValue:"NaN"};if(t===1/0)return{doubleValue:"Infinity"};if(t===-1/0)return{doubleValue:"-Infinity"}}return{doubleValue:F(t)?"-0":t}}function Ye(e,t){return q(t)?We(t):Ke(e,t)}function Xe(e,t){return e.Le?new Date(1e3*t.seconds).toISOString().replace(/\.\d*/,"").replace("Z","")+"."+("000000000"+t.nanoseconds).slice(-9)+"Z":{seconds:""+t.seconds,nanos:t.nanoseconds}}function Qe(e,t){return e.Le?t.toBase64():t.toUint8Array()}function $e(e,t){return Xe(e,t.A())}function et(e){return y(!!e),_.m(function(e){var t=Oe(e);return new M(t.seconds,t.nanos)}(e))}function tt(e,t){return function(e){return new I(["projects",e.projectId,"databases",e.database])}(e).child("documents").child(t).F()}function at(e){var t=I.k(e);return y(wt(t)),t}function st(e,t){return tt(e.s,t.path)}function nt(e,t){var a=at(t);return y(a.get(1)===e.s.projectId),y(!a.get(3)&&!e.s.database||a.get(3)===e.s.database),new C(ct(a))}function rt(e,t){return tt(e.s,t)}function ot(e){var t=at(e);return 4===t.length?I.$():ct(t)}function it(e){return new I(["projects",e.s.projectId,"databases",e.s.database]).F()}function ct(e){return y(e.length>4&&"documents"===e.get(4)),e.V(5)}function dt(e,t,a){return{name:st(e,t),fields:a.proto.mapValue.fields}}function lt(e,t){var a;if(t instanceof Vt)a={update:dt(e,t.key,t.value)};else if(t instanceof Xt)a={delete:st(e,t.key)};else if(t instanceof Jt)a={update:dt(e,t.key,t.data),updateMask:At(t.qe)};else if(t instanceof Wt)a={transform:{document:st(e,t.key),fieldTransforms:t.fieldTransforms.map((function(e){return function(e,t){var a=t.transform;if(a instanceof Rt)return{fieldPath:t.field.F(),setToServerValue:"REQUEST_TIME"};if(a instanceof Nt)return{fieldPath:t.field.F(),appendMissingElements:{values:a.elements}};if(a instanceof Pt)return{fieldPath:t.field.F(),removeAllFromArray:{values:a.elements}};if(a instanceof Lt)return{fieldPath:t.field.F(),increment:a.Be};throw b()}(0,e)}))}};else{if(!(t instanceof Qt))return b();a={verify:st(e,t.key)}}return t.Qe.Ue||(a.currentDocument=function(e,t){return void 0!==t.updateTime?{updateTime:$e(e,t.updateTime)}:void 0!==t.exists?{exists:t.exists}:b()}(e,t.Qe)),a}function ut(e,t){var a=t.currentDocument?function(e){return void 0!==e.updateTime?Zt.updateTime(et(e.updateTime)):void 0!==e.exists?Zt.exists(e.exists):Zt.We()}(t.currentDocument):Zt.We();if(t.update){t.update.name;var s=nt(e,t.update.name),n=new $t({mapValue:{fields:t.update.fields}});if(t.updateMask){var r=function(e){var t=e.fieldPaths||[];return new Dt(t.map((function(e){return Z.q(e)})))}(t.updateMask);return new Jt(s,n,r,a)}return new Vt(s,n,a)}if(t.delete){var o=nt(e,t.delete);return new Xt(o,a)}if(t.transform){var i=nt(e,t.transform.document),c=t.transform.fieldTransforms.map((function(t){return function(e,t){var a=null;if("setToServerValue"in t)y("REQUEST_TIME"===t.setToServerValue),a=new Rt;else if("appendMissingElements"in t){var s=t.appendMissingElements.values||[];a=new Nt(s)}else if("removeAllFromArray"in t){var n=t.removeAllFromArray.values||[];a=new Pt(n)}else"increment"in t?a=new Lt(e,t.increment):b();var r=Z.q(t.fieldPath);return new It(r,a)}(e,t)}));return y(!0===a.exists),new Wt(i,c)}if(t.verify){var d=nt(e,t.verify);return new Qt(d,a)}return b()}function ht(e,t){return{documents:[rt(e,t.path)]}}function mt(e,t){var a={structuredQuery:{}},s=t.path;null!==t.collectionGroup?(a.parent=rt(e,s),a.structuredQuery.from=[{collectionId:t.collectionGroup,allDescendants:!0}]):(a.parent=rt(e,s.p()),a.structuredQuery.from=[{collectionId:s.S()}]);var n=function(e){if(0!==e.length){var t=e.map((function(e){return function(e){if("=="===e.op){if(Be(e.value))return{unaryFilter:{field:bt(e.field),op:"IS_NAN"}};if(He(e.value))return{unaryFilter:{field:bt(e.field),op:"IS_NULL"}}}else if("!="===e.op){if(Be(e.value))return{unaryFilter:{field:bt(e.field),op:"IS_NOT_NAN"}};if(He(e.value))return{unaryFilter:{field:bt(e.field),op:"IS_NOT_NULL"}}}return{fieldFilter:{field:bt(e.field),op:(t=e.op,Je[t]),value:e.value}};var t}(e)}));return 1===t.length?t[0]:{compositeFilter:{op:"AND",filters:t}}}}(t.filters);n&&(a.structuredQuery.where=n);var r=function(e){if(0!==e.length)return e.map((function(e){return{field:bt((t=e).field),direction:(a=t.dir,Ve[a])};var t,a}))}(t.orderBy);r&&(a.structuredQuery.orderBy=r);var o=function(e,t){return e.Le||U(t)?t:{value:t}}(e,t.limit);return null!==o&&(a.structuredQuery.limit=o),t.startAt&&(a.structuredQuery.startAt=ft(t.startAt)),t.endAt&&(a.structuredQuery.endAt=ft(t.endAt)),a}function ft(e){return{before:e.before,values:e.position}}function pt(e){var t=!!e.before,a=e.values||[];return new ja(a,t)}function bt(e){return{fieldPath:e.F()}}function yt(e){return Z.q(e.fieldPath)}function gt(e){return wa.create(yt(e.fieldFilter.field),function(e){switch(e){case"EQUAL":return"==";case"NOT_EQUAL":return"!=";case"GREATER_THAN":return">";case"GREATER_THAN_OR_EQUAL":return">=";case"LESS_THAN":return"<";case"LESS_THAN_OR_EQUAL":return"<=";case"ARRAY_CONTAINS":return"array-contains";case"IN":return"in";case"NOT_IN":return"not-in";case"ARRAY_CONTAINS_ANY":return"array-contains-any";case"OPERATOR_UNSPECIFIED":default:return b()}}(e.fieldFilter.op),e.fieldFilter.value)}function vt(e){switch(e.unaryFilter.op){case"IS_NAN":var t=yt(e.unaryFilter.field);return wa.create(t,"==",{doubleValue:NaN});case"IS_NULL":var a=yt(e.unaryFilter.field);return wa.create(a,"==",{nullValue:"NULL_VALUE"});case"IS_NOT_NAN":var s=yt(e.unaryFilter.field);return wa.create(s,"!=",{doubleValue:NaN});case"IS_NOT_NULL":var n=yt(e.unaryFilter.field);return wa.create(n,"!=",{nullValue:"NULL_VALUE"});case"OPERATOR_UNSPECIFIED":default:return b()}}function At(e){var t=[];return e.fields.forEach((function(e){return t.push(e.F())})),{fieldPaths:t}}function wt(e){return e.length>=4&&"projects"===e.get(0)&&"databases"===e.get(2)} +/** + * @license + * Copyright 2018 Google LLC + * + * 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. + */var St=function(){this.je=void 0};function Et(e,t,a){return e instanceof Rt?function(e,t){var a={fields:{__type__:{stringValue:"server_timestamp"},__local_write_time__:{timestampValue:{seconds:e.seconds,nanos:e.nanoseconds}}}};return t&&(a.fields.__previous_value__=t),{mapValue:a}}(a,t):e instanceof Nt?xt(e,t):e instanceof Pt?jt(e,t):function(e,t){var a=kt(e,t),s=Mt(a)+Mt(e.Be);return Fe(a)&&Fe(e.Be)?We(s):Ke(e.serializer,s)}(e,t)}function Tt(e,t,a){return e instanceof Nt?xt(e,t):e instanceof Pt?jt(e,t):a}function kt(e,t){return e instanceof Lt?Fe(a=t)||function(e){return!!e&&"doubleValue"in e}(a)?t:{integerValue:0}:null;var a}var Rt=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n.__extends(t,e),t}(St),Nt=function(e){function t(t){var a=this;return(a=e.call(this)||this).elements=t,a}return n.__extends(t,e),t}(St);function xt(e,t){for(var a=_t(t),s=function(e){a.some((function(t){return Le(t,e)}))||a.push(e)},n=0,r=e.elements;n0?this.en[0].field:null},e.prototype.ln=function(){for(var e=0,t=this.filters;e=0)return s.op}return null},e}();function ca(e,t,a,s,n,r,o,i){return new ia(e,t,a,s,n,r,o,i)}function da(e){return new ia(e)}function la(e){return null!==e.collectionGroup}function ua(e){var t=oa(e,ia);if(null===t.sn){t.sn=[];var a=t.ln(),s=t.un();if(null!==a&&null===s)a.M()||t.sn.push(new Da(a)),t.sn.push(new Da(Z.L(),"asc"));else{for(var n=!1,r=0,o=t.en;r0?t.en[t.en.length-1].dir:"asc";t.sn.push(new Da(Z.L(),c))}}}return t.sn}function ha(e){var t=oa(e,ia);if(!t.rn)if("F"===t.nn)t.rn=B(t.path,t.collectionGroup,ua(t),t.filters,t.limit,t.startAt,t.endAt);else{for(var a=[],s=0,n=ua(t);s0&&(t+=", orderBy: ["+e.orderBy.map((function(e){return(t=e).field.F()+" ("+t.dir+")";var t})).join(", ")+"]"),e.startAt&&(t+=", startAt: "+La(e.startAt)),e.endAt&&(t+=", endAt: "+La(e.endAt)),"Target("+t+")"}(ha(e))+"; limitType="+e.nn+")"}function va(e,t){return function(e,t){var a=t.key.path;return null!==e.collectionGroup?t.key.W(e.collectionGroup)&&e.path.D(a):C.j(e.path)?e.path.isEqual(a):e.path.C(a)}(e,t)&&function(e,t){for(var a=0,s=e.en;a":return e>0;case">=":return e>=0;default:return b()}},t.prototype._n=function(){return["<","<=",">",">=","!="].indexOf(this.op)>=0},t}((function(){})),Sa=function(e){function t(t,a,s){var n=this;return(n=e.call(this,t,a,s)||this).key=C.U(s.referenceValue),n}return n.__extends(t,e),t.prototype.matches=function(e){var t=C.P(e.key,this.key);return this.wn(t)},t}(wa),Ea=function(e){function t(t,a){var s=this;return(s=e.call(this,t,"in",a)||this).keys=ka("in",a),s}return n.__extends(t,e),t.prototype.matches=function(e){return this.keys.some((function(t){return t.isEqual(e.key)}))},t}(wa),Ta=function(e){function t(t,a){var s=this;return(s=e.call(this,t,"not-in",a)||this).keys=ka("not-in",a),s}return n.__extends(t,e),t.prototype.matches=function(e){return!this.keys.some((function(t){return t.isEqual(e.key)}))},t}(wa);function ka(e,t){var a;return((null===(a=t.arrayValue)||void 0===a?void 0:a.values)||[]).map((function(e){return C.U(e.referenceValue)}))}var Ra=function(e){function t(t,a){return e.call(this,t,"array-contains",a)||this}return n.__extends(t,e),t.prototype.matches=function(e){var t=e.field(this.field);return qe(t)&&Me(t.arrayValue,this.value)},t}(wa),Na=function(e){function t(t,a){return e.call(this,t,"in",a)||this}return n.__extends(t,e),t.prototype.matches=function(e){var t=e.field(this.field);return null!==t&&Me(this.value.arrayValue,t)},t}(wa),xa=function(e){function t(t,a){return e.call(this,t,"not-in",a)||this}return n.__extends(t,e),t.prototype.matches=function(e){var t=e.field(this.field);return null!==t&&!Me(this.value.arrayValue,t)},t}(wa),Pa=function(e){function t(t,a){return e.call(this,t,"array-contains-any",a)||this}return n.__extends(t,e),t.prototype.matches=function(e){var t=this,a=e.field(this.field);return!(!qe(a)||!a.arrayValue.values)&&a.arrayValue.values.some((function(e){return Me(t.value.arrayValue,e)}))},t}(wa),ja=function(e,t){this.position=e,this.before=t};function La(e){return(e.before?"b":"a")+":"+e.position.map((function(e){return Ie(e)})).join(",")}function Ma(e,t,a){for(var s=0,n=0;n0&&h("ExponentialBackoff","Backing off for "+n+" ms (base delay: "+this.gs+" ms, delay with jitter: "+a+" ms, last attempt: "+s+" ms ago)"),this.Vs=this.ms.Ss(this.Is,n,(function(){return t.ys=Date.now(),e()})),this.gs*=this.Rs,this.gsthis.Ps&&(this.gs=this.Ps)},e.prototype.Ds=function(){null!==this.Vs&&(this.Vs.Cs(),this.Vs=null)},e.prototype.cancel=function(){null!==this.Vs&&(this.Vs.cancel(),this.Vs=null)},e.prototype.vs=function(){return(Math.random()-.5)*this.gs},e}(),Wa=function(){function t(e,a,s){this.name=e,this.version=a,this.Ns=s,12.2===t.Fs(i.getUA())&&m("Firestore persistence suffers from a bug in iOS 12.2 Safari that may cause your app to stop working. See https://stackoverflow.com/q/56496296/110915 for details and a potential workaround.")}return t.delete=function(e){return h("SimpleDb","Removing database:",e),es(window.indexedDB.deleteDatabase(e)).Sn()},t.ks=function(){if("undefined"==typeof indexedDB)return!1;if(t.$s())return!0;var e=i.getUA(),a=t.Fs(e),s=00||e.indexOf("Trident/")>0||e.indexOf("Edge/")>0||s||r)},t.$s=function(){var t;return void 0!==e&&"YES"===(null===(t=e.env)||void 0===t?void 0:t.Os)},t.Ms=function(e,t){return e.store(t)},t.Fs=function(e){var t=e.match(/i(?:phone|pad|pod) os ([\d_]+)/i),a=t?t[1].split("_").slice(0,2).join("."):"-1";return Number(a)},t.xs=function(e){var t=e.match(/Android ([\d.]+)/i),a=t?t[1].split(".").slice(0,2).join("."):"-1";return Number(a)},t.prototype.Ls=function(){return n.__awaiter(this,void 0,void 0,(function(){var e,t=this;return n.__generator(this,(function(a){switch(a.label){case 0:return this.db?[3,2]:(h("SimpleDb","Opening database:",this.name),e=this,[4,new Promise((function(e,a){var s=indexedDB.open(t.name,t.version);s.onsuccess=function(t){var a=t.target.result;e(a)},s.onblocked=function(){a(new Ya("Cannot upgrade IndexedDB schema while another tab is open. Close all tabs that access Firestore and reload this page to proceed."))},s.onerror=function(e){var t=e.target.error;"VersionError"===t.name?a(new L(j.FAILED_PRECONDITION,"A newer version of the Firestore SDK was previously used and so the persisted data is not compatible with the version of the SDK you are now using. The SDK will operate with persistence disabled. If you need persistence, please re-upgrade to a newer version of the SDK or else clear the persisted IndexedDB data for your app to start fresh.")):a(new Ya(t))},s.onupgradeneeded=function(e){h("SimpleDb",'Database "'+t.name+'" requires upgrade from version:',e.oldVersion);var a=e.target.result;t.Ns.createOrUpgrade(a,s.transaction,e.oldVersion,t.version).next((function(){h("SimpleDb","Database upgrade to version "+t.version+" complete")}))}}))]);case 1:e.db=a.sent(),a.label=2;case 2:return[2,(this.qs&&(this.db.onversionchange=function(e){return t.qs(e)}),this.db)]}}))}))},t.prototype.Bs=function(e){this.qs=e,this.db&&(this.db.onversionchange=function(t){return e(t)})},t.prototype.runTransaction=function(e,t,a){return n.__awaiter(this,void 0,void 0,(function(){var s,r,o,i,c;return n.__generator(this,(function(d){switch(d.label){case 0:s="readonly"===e,r=0,o=function(){var e,o,c,d,l;return n.__generator(this,(function(n){switch(n.label){case 0:++r,n.label=1;case 1:return n.trys.push([1,4,,5]),[4,i.Ls()];case 2:return i.db=n.sent(),e=Qa.open(i.db,s?"readonly":"readwrite",t),o=a(e).catch((function(t){return e.abort(t),Ua.reject(t)})).Sn(),c={},o.catch((function(){})),[4,e.Us];case 3:return[2,(c.value=(n.sent(),o),c)];case 4:return d=n.sent(),l="FirebaseError"!==d.name&&r<3,h("SimpleDb","Transaction failed with error: %s. Retrying: %s.",d.message,l),i.close(),l?[3,5]:[2,{value:Promise.reject(d)}];case 5:return[2]}}))},i=this,d.label=1;case 1:return[5,o()];case 2:if("object"==typeof(c=d.sent()))return[2,c.value];d.label=3;case 3:return[3,1];case 4:return[2]}}))}))},t.prototype.close=function(){this.db&&this.db.close(),this.db=void 0},t}(),Ka=function(){function e(e){this.Qs=e,this.Ws=!1,this.js=null}return Object.defineProperty(e.prototype,"yn",{get:function(){return this.Ws},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"Ks",{get:function(){return this.js},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"cursor",{set:function(e){this.Qs=e},enumerable:!1,configurable:!0}),e.prototype.done=function(){this.Ws=!0},e.prototype.Gs=function(e){this.js=e},e.prototype.delete=function(){return es(this.Qs.delete())},e}(),Ya=function(e){function t(t){var a=this;return(a=e.call(this,j.UNAVAILABLE,"IndexedDB transaction failed: "+t)||this).name="IndexedDbTransactionError",a}return n.__extends(t,e),t}(L); +/** + * @license + * Copyright 2017 Google LLC + * + * 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. + */function Xa(e){return"IndexedDbTransactionError"===e.name}var Qa=function(){function e(e){var t=this;this.transaction=e,this.aborted=!1,this.zs=new Ja,this.transaction.oncomplete=function(){t.zs.resolve()},this.transaction.onabort=function(){e.error?t.zs.reject(new Ya(e.error)):t.zs.resolve()},this.transaction.onerror=function(e){var a=as(e.target.error);t.zs.reject(new Ya(a))}}return e.open=function(t,a,s){try{return new e(t.transaction(s,a))}catch(t){throw new Ya(t)}},Object.defineProperty(e.prototype,"Us",{get:function(){return this.zs.promise},enumerable:!1,configurable:!0}),e.prototype.abort=function(e){e&&this.zs.reject(e),this.aborted||(h("SimpleDb","Aborting transaction:",e?e.message:"Client-initiated abort"),this.aborted=!0,this.transaction.abort())},e.prototype.store=function(e){var t=this.transaction.objectStore(e);return new $a(t)},e}(),$a=function(){function e(e){this.store=e}return e.prototype.put=function(e,t){var a;return void 0!==t?(h("SimpleDb","PUT",this.store.name,e,t),a=this.store.put(t,e)):(h("SimpleDb","PUT",this.store.name,"",e),a=this.store.put(e)),es(a)},e.prototype.add=function(e){return h("SimpleDb","ADD",this.store.name,e,e),es(this.store.add(e))},e.prototype.get=function(e){var t=this;return es(this.store.get(e)).next((function(a){return void 0===a&&(a=null),h("SimpleDb","GET",t.store.name,e,a),a}))},e.prototype.delete=function(e){return h("SimpleDb","DELETE",this.store.name,e),es(this.store.delete(e))},e.prototype.count=function(){return h("SimpleDb","COUNT",this.store.name),es(this.store.count())},e.prototype.Hs=function(e,t){var a=this.cursor(this.options(e,t)),s=[];return this.Ys(a,(function(e,t){s.push(t)})).next((function(){return s}))},e.prototype.Js=function(e,t){h("SimpleDb","DELETE ALL",this.store.name);var a=this.options(e,t);a.Xs=!1;var s=this.cursor(a);return this.Ys(s,(function(e,t,a){return a.delete()}))},e.prototype.Zs=function(e,t){var a;t?a=e:(a={},t=e);var s=this.cursor(a);return this.Ys(s,t)},e.prototype.ti=function(e){var t=this.cursor({});return new Ua((function(a,s){t.onerror=function(e){var t=as(e.target.error);s(t)},t.onsuccess=function(t){var s=t.target.result;s?e(s.primaryKey,s.value).next((function(e){e?s.continue():a()})):a()}}))},e.prototype.Ys=function(e,t){var a=[];return new Ua((function(s,n){e.onerror=function(e){n(e.target.error)},e.onsuccess=function(e){var n=e.target.result;if(n){var r=new Ka(n),o=t(n.primaryKey,n.value,r);if(o instanceof Ua){var i=o.catch((function(e){return r.done(),Ua.reject(e)}));a.push(i)}r.yn?s():null===r.Ks?n.continue():n.continue(r.Ks)}else s()}})).next((function(){return Ua.Cn(a)}))},e.prototype.options=function(e,t){var a=void 0;return void 0!==e&&("string"==typeof e?a=e:t=e),{index:a,range:t}},e.prototype.cursor=function(e){var t="next";if(e.reverse&&(t="prev"),e.index){var a=this.store.index(e.index);return e.Xs?a.openKeyCursor(e.range,t):a.openCursor(e.range,t)}return this.store.openCursor(e.range,t)},e}();function es(e){return new Ua((function(t,a){e.onsuccess=function(e){var a=e.target.result;t(a)},e.onerror=function(e){var t=as(e.target.error);a(t)}}))}var ts=!1;function as(e){var t=Wa.Fs(i.getUA());if(t>=12.2&&t<13){var a="An internal error was encountered in the Indexed Database server";if(e.message.indexOf(a)>=0){var s=new L("internal","IOS_INDEXEDDB_BUG1: IndexedDb has thrown '"+a+"'. This is likely due to an unavoidable bug in iOS. See https://stackoverflow.com/q/56496296/110915 for details and a potential workaround.");return ts||(ts=!0,setTimeout((function(){throw s}),0)),s}}return e} +/** + * @license + * Copyright 2020 Google LLC + * + * 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. + */function ss(){return"undefined"!=typeof window?window:null}function ns(){return"undefined"!=typeof document?document:null} +/** + * @license + * Copyright 2017 Google LLC + * + * 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. + */var rs=function(){function e(e,t,a,s,n){this.ei=e,this.Is=t,this.ni=a,this.op=s,this.si=n,this.ii=new Ja,this.then=this.ii.promise.then.bind(this.ii.promise),this.ii.promise.catch((function(e){}))}return e.ri=function(t,a,s,n,r){var o=new e(t,a,Date.now()+s,n,r);return o.start(s),o},e.prototype.start=function(e){var t=this;this.oi=setTimeout((function(){return t.hi()}),e)},e.prototype.Cs=function(){return this.hi()},e.prototype.cancel=function(e){null!==this.oi&&(this.clearTimeout(),this.ii.reject(new L(j.CANCELLED,"Operation cancelled"+(e?": "+e:""))))},e.prototype.hi=function(){var e=this;this.ei.ai((function(){return null!==e.oi?(e.clearTimeout(),e.op().then((function(t){return e.ii.resolve(t)}))):Promise.resolve()}))},e.prototype.clearTimeout=function(){null!==this.oi&&(this.si(this),clearTimeout(this.oi),this.oi=null)},e}(),os=function(){function e(){var e=this;this.ci=Promise.resolve(),this.ui=[],this.li=!1,this._i=[],this.fi=null,this.di=!1,this.wi=[],this.Ti=new Ga(this,"async_queue_retry"),this.Ei=function(){var t=ns();t&&h("AsyncQueue","Visibility state changed to ",t.visibilityState),e.Ti.Ds()};var t=ns();t&&"function"==typeof t.addEventListener&&t.addEventListener("visibilitychange",this.Ei)}return Object.defineProperty(e.prototype,"mi",{get:function(){return this.li},enumerable:!1,configurable:!0}),e.prototype.ai=function(e){this.enqueue(e)},e.prototype.Ii=function(e){this.Ai(),this.Ri(e)},e.prototype.Pi=function(){if(!this.li){this.li=!0;var e=ns();e&&"function"==typeof e.removeEventListener&&e.removeEventListener("visibilitychange",this.Ei)}},e.prototype.enqueue=function(e){return this.Ai(),this.li?new Promise((function(e){})):this.Ri(e)},e.prototype.gi=function(e){var t=this;this.ui.push(e),this.ai((function(){return t.Vi()}))},e.prototype.Vi=function(){return n.__awaiter(this,void 0,void 0,(function(){var e,t=this;return n.__generator(this,(function(a){switch(a.label){case 0:if(0===this.ui.length)return[3,5];a.label=1;case 1:return a.trys.push([1,3,,4]),[4,this.ui[0]()];case 2:return a.sent(),this.ui.shift(),this.Ti.reset(),[3,4];case 3:if(!Xa(e=a.sent()))throw e;return h("AsyncQueue","Operation failed with retryable error: "+e),[3,4];case 4:this.ui.length>0&&this.Ti.bs((function(){return t.Vi()})),a.label=5;case 5:return[2]}}))}))},e.prototype.Ri=function(e){var t=this,a=this.ci.then((function(){return t.di=!0,e().catch((function(e){throw t.fi=e,t.di=!1,m("INTERNAL UNHANDLED ERROR: ",function(e){var t=e.message||"";return e.stack&&(t=e.stack.includes(e.message)?e.stack:e.message+"\n"+e.stack),t}(e)),e})).then((function(e){return t.di=!1,e}))}));return this.ci=a,a},e.prototype.Ss=function(e,t,a){var s=this;this.Ai(),this.wi.indexOf(e)>-1&&(t=0);var n=rs.ri(this,e,t,a,(function(e){return s.yi(e)}));return this._i.push(n),n},e.prototype.Ai=function(){this.fi&&b()},e.prototype.pi=function(){},e.prototype.bi=function(){return n.__awaiter(this,void 0,void 0,(function(){var e;return n.__generator(this,(function(t){switch(t.label){case 0:return[4,e=this.ci];case 1:t.sent(),t.label=2;case 2:if(e!==this.ci)return[3,0];t.label=3;case 3:return[2]}}))}))},e.prototype.vi=function(e){for(var t=0,a=this._i;tl.params.Bi?(h("LruGarbageCollector","Capping sequence numbers to collect down to the maximum of "+l.params.Bi+" from "+t),s=l.params.Bi):s=t,r=Date.now(),l.rr(e,s)})).next((function(s){return a=s,i=Date.now(),l.hr(e,a,t)})).next((function(t){return n=t,c=Date.now(),l.ar(e,a)})).next((function(e){return d=Date.now(),u()<=o.LogLevel.DEBUG&&h("LruGarbageCollector","LRU Garbage Collection\n\tCounted targets in "+(r-m)+"ms\n\tDetermined least recently used "+s+" in "+(i-r)+"ms\n\tRemoved "+n+" targets in "+(c-i)+"ms\n\tRemoved "+e+" documents in "+(d-c)+"ms\nTotal Duration: "+(d-m)+"ms"),Ua.resolve({$i:!0,xi:s,Oi:n,Mi:e})}))},e}(); +/** + * @license + * Copyright 2017 Google LLC + * + * 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. + */function fs(e){for(var t="",a=0;a0&&(t=bs(t)),t=ps(e.get(a),t);return bs(t)}function ps(e,t){for(var a=t,s=e.length,n=0;n=2),2===t)return y(""===e.charAt(0)&&""===e.charAt(1)),I.$();for(var a=t-2,s=[],n="",r=0;ra)&&b(),e.charAt(o+1)){case"":var i=e.substring(r,o),c=void 0;0===n.length?c=i:(c=n+=i,n=""),s.push(c);break;case"":n+=e.substring(r,o),n+="\0";break;case"":n+=e.substring(r,o+1);break;default:b()}r=o+2}return new I(s)} +/** + * @license + * Copyright 2017 Google LLC + * + * 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. + */var gs=function(e){this._r=e};function vs(e,t){if(t.document)return function(e,t,a){var s=nt(e,t.name),n=et(t.updateTime),r=new $t({mapValue:{fields:t.fields}});return new sa(s,n,r,{hasCommittedMutations:!!a})}(e._r,t.document,!!t.hasCommittedMutations);if(t.noDocument){var a=C.K(t.noDocument.path),s=Ts(t.noDocument.readTime);return new na(a,s,{hasCommittedMutations:!!t.hasCommittedMutations})}if(t.unknownDocument){var n=C.K(t.unknownDocument.path),r=Ts(t.unknownDocument.version);return new ra(n,r)}return b()}function As(e,t,a){var s=ws(a),n=t.key.path.p().N();if(t instanceof sa){var r=function(e,t){return{name:st(e,t.key),fields:t.tn().mapValue.fields,updateTime:Xe(e,t.version.A())}}(e._r,t),o=t.hasCommittedMutations;return new Ks(null,null,r,o,s,n)}if(t instanceof na){var i=t.key.path.N(),c=Es(t.version),d=t.hasCommittedMutations;return new Ks(null,new Gs(i,c),null,d,s,n)}if(t instanceof ra){var l=t.key.path.N(),u=Es(t.version);return new Ks(new Ws(l,u),null,null,!0,s,n)}return b()}function ws(e){var t=e.A();return[t.seconds,t.nanoseconds]}function Ss(e){var t=new M(e[0],e[1]);return _.m(t)}function Es(e){var t=e.A();return new Hs(t.seconds,t.nanoseconds)}function Ts(e){var t=new M(e.seconds,e.nanoseconds);return _.m(t)}function ks(e,t){var a=(t.baseMutations||[]).map((function(t){return ut(e._r,t)})),s=t.mutations.map((function(t){return ut(e._r,t)})),n=M.fromMillis(t.localWriteTimeMs);return new Za(t.batchId,n,a,s)}function Rs(e){var t,a,s=Ts(e.readTime),n=void 0!==e.lastLimboFreeSnapshotVersion?Ts(e.lastLimboFreeSnapshotVersion):_.min();return void 0!==e.query.documents?(y(1===(a=e.query).documents.length),t=ha(da(ot(a.documents[0])))):t=function(e){var t=ot(e.parent),a=e.structuredQuery,s=a.from?a.from.length:0,n=null;if(s>0){y(1===s);var r=a.from[0];r.allDescendants?n=r.collectionId:t=t.child(r.collectionId)}var o=[];a.where&&(o=function e(t){return t?void 0!==t.unaryFilter?[vt(t)]:void 0!==t.fieldFilter?[gt(t)]:void 0!==t.compositeFilter?t.compositeFilter.filters.map((function(t){return e(t)})).reduce((function(e,t){return e.concat(t)})):b():[]}(a.where));var i=[];a.orderBy&&(i=a.orderBy.map((function(e){return new Da(yt((t=e).field),function(e){switch(e){case"ASCENDING":return"asc";case"DESCENDING":return"desc";default:return}}(t.direction));var t})));var c=null;a.limit&&(c=function(e){var t;return U(t="object"==typeof e?e.value:e)?null:t}(a.limit));var d=null;a.startAt&&(d=pt(a.startAt));var l=null;return a.endAt&&(l=pt(a.endAt)),ha(ca(t,n,i,o,c,"F",d,l))}(e.query),new Y(t,e.targetId,0,e.lastListenSequenceNumber,s,n,G.fromBase64String(e.resumeToken))}function Ns(e,t){var a,s=Es(t.Z),n=Es(t.lastLimboFreeSnapshotVersion);a=J(t.target)?ht(e._r,t.target):mt(e._r,t.target);var r=t.resumeToken.toBase64();return new Xs(t.targetId,z(t.target),s,r,t.sequenceNumber,n,a)} +/** + * @license + * Copyright 2017 Google LLC + * + * 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. + */var xs=function(){function e(e,t,a,s){this.userId=e,this.serializer=t,this.zn=a,this.dr=s,this.wr={}}return e.Tr=function(t,a,s,n){return y(""!==t.uid),new e(t.Er()?t.uid:"",a,s,n)},e.prototype.mr=function(e){var t=!0,a=IDBKeyRange.bound([this.userId,Number.NEGATIVE_INFINITY],[this.userId,Number.POSITIVE_INFINITY]);return Ls(e).Zs({index:Vs.userMutationsIndex,range:a},(function(e,a,s){t=!1,s.done()})).next((function(){return t}))},e.prototype.Ir=function(e,t,a,s){var n=this,r=Ms(e),o=Ls(e);return o.add({}).next((function(i){y("number"==typeof i);for(var c=new Za(i,t,a,s),d=function(e,t,a){var s=a.baseMutations.map((function(t){return lt(e._r,t)})),n=a.mutations.map((function(t){return lt(e._r,t)}));return new Vs(t,a.batchId,a.Tn.toMillis(),s,n)}(n.serializer,n.userId,c),l=[],u=new se((function(e,t){return w(e.F(),t.F())})),h=0,m=s;h=s),r=ks(a.serializer,t)),n.done()})).next((function(){return r}))},e.prototype.Vr=function(e){var t=IDBKeyRange.upperBound([this.userId,Number.POSITIVE_INFINITY]),a=-1;return Ls(e).Zs({index:Vs.userMutationsIndex,range:t,reverse:!0},(function(e,t,s){a=t.batchId,s.done()})).next((function(){return a}))},e.prototype.yr=function(e){var t=this,a=IDBKeyRange.bound([this.userId,-1],[this.userId,Number.POSITIVE_INFINITY]);return Ls(e).Hs(Vs.userMutationsIndex,a).next((function(e){return e.map((function(e){return ks(t.serializer,e)}))}))},e.prototype.Yn=function(e,t){var a=this,s=Js.prefixForPath(this.userId,t.path),n=IDBKeyRange.lowerBound(s),r=[];return Ms(e).Zs({range:n},(function(s,n,o){var i=s[0],c=s[1],d=s[2],l=ys(c);if(i===a.userId&&t.path.isEqual(l))return Ls(e).get(d).next((function(e){if(!e)throw b();y(e.userId===a.userId),r.push(ks(a.serializer,e))}));o.done()})).next((function(){return r}))},e.prototype.es=function(e,t){var a=this,s=new se(w),n=[];return t.forEach((function(t){var r=Js.prefixForPath(a.userId,t.path),o=IDBKeyRange.lowerBound(r),i=Ms(e).Zs({range:o},(function(e,n,r){var o=e[0],i=e[1],c=e[2],d=ys(i);o===a.userId&&t.path.isEqual(d)?s=s.add(c):r.done()}));n.push(i)})),Ua.Cn(n).next((function(){return a.pr(e,s)}))},e.prototype.as=function(e,t){var a=this,s=t.path,n=s.length+1,r=Js.prefixForPath(this.userId,s),o=IDBKeyRange.lowerBound(r),i=new se(w);return Ms(e).Zs({range:o},(function(e,t,r){var o=e[0],c=e[1],d=e[2],l=ys(c);o===a.userId&&s.D(l)?l.length===n&&(i=i.add(d)):r.done()})).next((function(){return a.pr(e,i)}))},e.prototype.pr=function(e,t){var a=this,s=[],n=[];return t.forEach((function(t){n.push(Ls(e).get(t).next((function(e){if(null===e)throw b();y(e.userId===a.userId),s.push(ks(a.serializer,e))})))})),Ua.Cn(n).next((function(){return s}))},e.prototype.br=function(e,t){var a=this;return js(e.vr,this.userId,t).next((function(s){return e.Wn((function(){a.Sr(t.batchId)})),Ua.forEach(s,(function(t){return a.dr.Dr(e,t)}))}))},e.prototype.Sr=function(e){delete this.wr[e]},e.prototype.Cr=function(e){var t=this;return this.mr(e).next((function(a){if(!a)return Ua.resolve();var s=IDBKeyRange.lowerBound(Js.prefixForUser(t.userId)),n=[];return Ms(e).Zs({range:s},(function(e,a,s){if(e[0]===t.userId){var r=ys(e[1]);n.push(r)}else s.done()})).next((function(){y(0===n.length)}))}))},e.prototype.Nr=function(e,t){return Ps(e,this.userId,t)},e.prototype.Fr=function(e){var t=this;return _s(e).get(this.userId).next((function(e){return e||new zs(t.userId,-1,"")}))},e}();function Ps(e,t,a){var s=Js.prefixForPath(t,a.path),n=s[1],r=IDBKeyRange.lowerBound(s),o=!1;return Ms(e).Zs({range:r,Xs:!0},(function(e,a,s){var r=e[0],i=e[1];e[2],r===t&&i===n&&(o=!0),s.done()})).next((function(){return o}))}function js(e,t,a){var s=e.store(Vs.store),n=e.store(Js.store),r=[],o=IDBKeyRange.only(a.batchId),i=0,c=s.Zs({range:o},(function(e,t,a){return i++,a.delete()}));r.push(c.next((function(){y(1===i)})));for(var d=[],l=0,u=a.mutations;l=0&&s<=10);var r=new Qa(t);a<1&&s>=1&&(function(e){e.createObjectStore(Bs.store)}(e),function(e){e.createObjectStore(zs.store,{keyPath:zs.keyPath}),e.createObjectStore(Vs.store,{keyPath:Vs.keyPath,autoIncrement:!0}).createIndex(Vs.userMutationsIndex,Vs.userMutationsKeyPath,{unique:!0}),e.createObjectStore(Js.store)}(e),tn(e),function(e){e.createObjectStore(Ks.store)}(e));var o=Ua.resolve();return a<3&&s>=3&&(0!==a&&(function(e){e.deleteObjectStore(Qs.store),e.deleteObjectStore(Xs.store),e.deleteObjectStore($s.store)}(e),tn(e)),o=o.next((function(){return function(e){var t=e.store($s.store),a=new $s(0,0,_.min().A(),0);return t.put($s.key,a)}(r)}))),a<4&&s>=4&&(0!==a&&(o=o.next((function(){return function(e,t){return t.store(Vs.store).Hs().next((function(a){e.deleteObjectStore(Vs.store),e.createObjectStore(Vs.store,{keyPath:Vs.keyPath,autoIncrement:!0}).createIndex(Vs.userMutationsIndex,Vs.userMutationsKeyPath,{unique:!0});var s=t.store(Vs.store),n=a.map((function(e){return s.put(e)}));return Ua.Cn(n)}))}(e,r)}))),o=o.next((function(){!function(e){e.createObjectStore(an.store,{keyPath:an.keyPath})}(e)}))),a<5&&s>=5&&(o=o.next((function(){return n.removeAcknowledgedMutations(r)}))),a<6&&s>=6&&(o=o.next((function(){return function(e){e.createObjectStore(Ys.store)}(e),n.addDocumentGlobal(r)}))),a<7&&s>=7&&(o=o.next((function(){return n.ensureSequenceNumbers(r)}))),a<8&&s>=8&&(o=o.next((function(){return n.createCollectionParentIndex(e,r)}))),a<9&&s>=9&&(o=o.next((function(){!function(e){e.objectStoreNames.contains("remoteDocumentChanges")&&e.deleteObjectStore("remoteDocumentChanges")}(e),function(e){var t=e.objectStore(Ks.store);t.createIndex(Ks.readTimeIndex,Ks.readTimeIndexPath,{unique:!1}),t.createIndex(Ks.collectionReadTimeIndex,Ks.collectionReadTimeIndexPath,{unique:!1})}(t)}))),a<10&&s>=10&&(o=o.next((function(){return n.rewriteCanonicalIds(r)}))),o},e.prototype.addDocumentGlobal=function(e){var t=0;return e.store(Ks.store).Zs((function(e,a){t+=Cs(a)})).next((function(){var a=new Ys(t);return e.store(Ys.store).put(Ys.key,a)}))},e.prototype.removeAcknowledgedMutations=function(e){var t=this,a=e.store(zs.store),s=e.store(Vs.store);return a.Hs().next((function(a){return Ua.forEach(a,(function(a){var n=IDBKeyRange.bound([a.userId,-1],[a.userId,a.lastAcknowledgedBatchId]);return s.Hs(Vs.userMutationsIndex,n).next((function(s){return Ua.forEach(s,(function(s){y(s.userId===a.userId);var n=ks(t.serializer,s);return js(e,a.userId,n).next((function(){}))}))}))}))}))},e.prototype.ensureSequenceNumbers=function(e){var t=e.store(Qs.store),a=e.store(Ks.store);return e.store($s.store).get($s.key).next((function(e){var s=[];return a.Zs((function(a,n){var r=new I(a),o=function(e){return[0,fs(e)]}(r);s.push(t.get(o).next((function(a){return a?Ua.resolve():function(a){return t.put(new Qs(0,fs(a),e.highestListenSequenceNumber))}(r)})))})).next((function(){return Ua.Cn(s)}))}))},e.prototype.createCollectionParentIndex=function(e,t){e.createObjectStore(en.store,{keyPath:en.keyPath});var a=t.store(en.store),s=new Fs,n=function(e){if(s.add(e)){var t=e.S(),n=e.p();return a.put({collectionId:t,parent:fs(n)})}};return t.store(Ks.store).Zs({Xs:!0},(function(e,t){var a=new I(e);return n(a.p())})).next((function(){return t.store(Js.store).Zs({Xs:!0},(function(e,t){e[0];var a=e[1],s=(e[2],ys(a));return n(s.p())}))}))},e.prototype.rewriteCanonicalIds=function(e){var t=this,a=e.store(Xs.store);return a.Zs((function(e,s){var n=Rs(s),r=Ns(t.serializer,n);return a.put(r)}))},e}(),Hs=function(e,t){this.seconds=e,this.nanoseconds=t},Bs=function(e,t,a){this.ownerId=e,this.allowTabSynchronization=t,this.leaseTimestampMs=a};Bs.store="owner",Bs.key="owner";var zs=function(e,t,a){this.userId=e,this.lastAcknowledgedBatchId=t,this.lastStreamToken=a};zs.store="mutationQueues",zs.keyPath="userId";var Vs=function(e,t,a,s,n){this.userId=e,this.batchId=t,this.localWriteTimeMs=a,this.baseMutations=s,this.mutations=n};Vs.store="mutations",Vs.keyPath="batchId",Vs.userMutationsIndex="userMutationsIndex",Vs.userMutationsKeyPath=["userId","batchId"];var Js=function(){function e(){}return e.prefixForUser=function(e){return[e]},e.prefixForPath=function(e,t){return[e,fs(t)]},e.key=function(e,t,a){return[e,fs(t),a]},e}();Js.store="documentMutations",Js.PLACEHOLDER=new Js;var Gs=function(e,t){this.path=e,this.readTime=t},Ws=function(e,t){this.path=e,this.version=t},Ks=function(e,t,a,s,n,r){this.unknownDocument=e,this.noDocument=t,this.document=a,this.hasCommittedMutations=s,this.readTime=n,this.parentPath=r};Ks.store="remoteDocuments",Ks.readTimeIndex="readTimeIndex",Ks.readTimeIndexPath="readTime",Ks.collectionReadTimeIndex="collectionReadTimeIndex",Ks.collectionReadTimeIndexPath=["parentPath","readTime"];var Ys=function(e){this.byteSize=e};Ys.store="remoteDocumentGlobal",Ys.key="remoteDocumentGlobalKey";var Xs=function(e,t,a,s,n,r,o){this.targetId=e,this.canonicalId=t,this.readTime=a,this.resumeToken=s,this.lastListenSequenceNumber=n,this.lastLimboFreeSnapshotVersion=r,this.query=o};Xs.store="targets",Xs.keyPath="targetId",Xs.queryTargetsIndexName="queryTargetsIndex",Xs.queryTargetsKeyPath=["canonicalId","targetId"];var Qs=function(e,t,a){this.targetId=e,this.path=t,this.sequenceNumber=a};Qs.store="targetDocuments",Qs.keyPath=["targetId","path"],Qs.documentTargetsIndex="documentTargetsIndex",Qs.documentTargetsKeyPath=["path","targetId"];var $s=function(e,t,a,s){this.highestTargetId=e,this.highestListenSequenceNumber=t,this.lastRemoteSnapshotVersion=a,this.targetCount=s};$s.key="targetGlobalKey",$s.store="targetGlobal";var en=function(e,t){this.collectionId=e,this.parent=t};function tn(e){e.createObjectStore(Qs.store,{keyPath:Qs.keyPath}).createIndex(Qs.documentTargetsIndex,Qs.documentTargetsKeyPath,{unique:!0}),e.createObjectStore(Xs.store,{keyPath:Xs.keyPath}).createIndex(Xs.queryTargetsIndexName,Xs.queryTargetsKeyPath,{unique:!0}),e.createObjectStore($s.store)}en.store="collectionParents",en.keyPath=["collectionId","parent"];var an=function(e,t,a,s){this.clientId=e,this.updateTimeMs=t,this.networkEnabled=a,this.inForeground=s};an.store="clientMetadata",an.keyPath="clientId";var sn=n.__spreadArrays(n.__spreadArrays(n.__spreadArrays([zs.store,Vs.store,Js.store,Ks.store,Xs.store,Bs.store,$s.store,Qs.store],[an.store]),[Ys.store]),[en.store]),nn=function(){function e(){this.Xr=new Fs}return e.prototype.Ar=function(e,t){var a=this;if(!this.Xr.has(t)){var s=t.S(),n=t.p();e.Wn((function(){a.Xr.add(t)}));var r={collectionId:s,parent:fs(n)};return rn(e).put(r)}return Ua.resolve()},e.prototype.hs=function(e,t){var a=[],s=IDBKeyRange.bound([t,""],[E(t),""],!1,!0);return rn(e).Hs(s).next((function(e){for(var s=0,n=e;sn.highestListenSequenceNumber&&(n.highestListenSequenceNumber=t),s.io(e,n)}))},e.prototype.ao=function(e,t){var a=this;return this.co(e,t).next((function(){return a.so(e).next((function(s){return s.targetCount+=1,a.uo(t,s),a.io(e,s)}))}))},e.prototype.lo=function(e,t){return this.co(e,t)},e.prototype._o=function(e,t){var a=this;return this.fo(e,t.targetId).next((function(){return dn(e).delete(t.targetId)})).next((function(){return a.so(e)})).next((function(t){return y(t.targetCount>0),t.targetCount-=1,a.io(e,t)}))},e.prototype.hr=function(e,t,a){var s=this,n=0,r=[];return dn(e).Zs((function(o,i){var c=Rs(i);c.sequenceNumber<=t&&null===a.get(c.targetId)&&(n++,r.push(s._o(e,c)))})).next((function(){return Ua.Cn(r)})).next((function(){return n}))},e.prototype.be=function(e,t){return dn(e).Zs((function(e,a){var s=Rs(a);t(s)}))},e.prototype.so=function(e){return ln(e).get($s.key).next((function(e){return y(null!==e),e}))},e.prototype.io=function(e,t){return ln(e).put($s.key,t)},e.prototype.co=function(e,t){return dn(e).put(Ns(this.serializer,t))},e.prototype.uo=function(e,t){var a=!1;return e.targetId>t.highestTargetId&&(t.highestTargetId=e.targetId,a=!0),e.sequenceNumber>t.highestListenSequenceNumber&&(t.highestListenSequenceNumber=e.sequenceNumber,a=!0),a},e.prototype.do=function(e){return this.so(e).next((function(e){return e.targetCount}))},e.prototype.wo=function(e,t){var a=z(t),s=IDBKeyRange.bound([a,Number.NEGATIVE_INFINITY],[a,Number.POSITIVE_INFINITY]),n=null;return dn(e).Zs({range:s,index:Xs.queryTargetsIndexName},(function(e,a,s){var r=Rs(a);V(t,r.target)&&(n=r,s.done())})).next((function(){return n}))},e.prototype.To=function(e,t,a){var s=this,n=[],r=un(e);return t.forEach((function(t){var o=fs(t.path);n.push(r.put(new Qs(a,o))),n.push(s.dr.Eo(e,a,t))})),Ua.Cn(n)},e.prototype.mo=function(e,t,a){var s=this,n=un(e);return Ua.forEach(t,(function(t){var r=fs(t.path);return Ua.Cn([n.delete([a,r]),s.dr.Io(e,a,t)])}))},e.prototype.fo=function(e,t){var a=un(e),s=IDBKeyRange.bound([t],[t+1],!1,!0);return a.delete(s)},e.prototype.Ao=function(e,t){var a=IDBKeyRange.bound([t],[t+1],!1,!0),s=un(e),n=he();return s.Zs({range:a,Xs:!0},(function(e,t,a){var s=ys(e[1]),r=new C(s);n=n.add(r)})).next((function(){return n}))},e.prototype.Nr=function(e,t){var a=fs(t.path),s=IDBKeyRange.bound([a],[E(a)],!1,!0),n=0;return un(e).Zs({index:Qs.documentTargetsIndex,Xs:!0,range:s},(function(e,t,a){var s=e[0];e[1],0!==s&&(n++,a.done())})).next((function(){return n>0}))},e.prototype.Me=function(e,t){return dn(e).get(t).next((function(e){return e?Rs(e):null}))},e}(); +/** + * @license + * Copyright 2017 Google LLC + * + * 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. + */function dn(e){return fn.Ms(e,Xs.store)}function ln(e){return fn.Ms(e,$s.store)}function un(e){return fn.Ms(e,Qs.store)} +/** + * @license + * Copyright 2017 Google LLC + * + * 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. + */var hn="Failed to obtain exclusive access to the persistence layer. To allow shared access, make sure to invoke `enablePersistence()` with `synchronizeTabs:true` in all tabs. If you are using `experimentalForceOwningTab:true`, make sure that only one tab has persistence enabled at any given time.",mn=function(e){function t(t,a){var s=this;return(s=e.call(this)||this).vr=t,s.Ro=a,s}return n.__extends(t,e),t}(Ha),fn=function(){function e(t,a,s,n,r,o,i,c,d,l){if(this.allowTabSynchronization=t,this.persistenceKey=a,this.clientId=s,this.ms=r,this.window=o,this.document=i,this.Po=d,this.Vo=l,this.yo=null,this.po=!1,this.isPrimary=!1,this.networkEnabled=!0,this.bo=null,this.inForeground=!1,this.vo=null,this.So=null,this.Do=Number.NEGATIVE_INFINITY,this.Co=function(e){return Promise.resolve()},!e.ks())throw new L(j.UNIMPLEMENTED,"This platform is either missing IndexedDB or is known to have an incomplete implementation. Offline persistence has been disabled.");this.dr=new yn(this,n),this.No=a+"main",this.serializer=new gs(c),this.Fo=new Wa(this.No,10,new qs(this.serializer)),this.ko=new cn(this.dr,this.serializer),this.zn=new nn,this.Kn=new Ds(this.serializer,this.zn),this.window&&this.window.localStorage?this.$o=this.window.localStorage:(this.$o=null,!1===l&&m("IndexedDbPersistence","LocalStorage is unavailable. As a result, persistence may not work reliably. In particular enablePersistence() could fail immediately after refreshing the page."))}return e.Ms=function(e,t){if(e instanceof mn)return Wa.Ms(e.vr,t);throw b()},e.prototype.start=function(){var e=this;return this.xo().then((function(){if(!e.isPrimary&&!e.allowTabSynchronization)throw new L(j.FAILED_PRECONDITION,hn);return e.Oo(),e.Mo(),e.Lo(),e.runTransaction("getHighestListenSequenceNumber","readonly",(function(t){return e.ko.oo(t)}))})).then((function(t){e.yo=new Va(t,e.Po)})).then((function(){e.po=!0})).catch((function(t){return e.Fo&&e.Fo.close(),Promise.reject(t)}))},e.prototype.qo=function(e){var t=this;return this.Co=function(a){return n.__awaiter(t,void 0,void 0,(function(){return n.__generator(this,(function(t){return this.tr?[2,e(a)]:[2]}))}))},e(this.isPrimary)},e.prototype.Bo=function(e){var t=this;this.Fo.Bs((function(a){return n.__awaiter(t,void 0,void 0,(function(){return n.__generator(this,(function(t){switch(t.label){case 0:return null===a.newVersion?[4,e()]:[3,2];case 1:t.sent(),t.label=2;case 2:return[2]}}))}))}))},e.prototype.Uo=function(e){var t=this;this.networkEnabled!==e&&(this.networkEnabled=e,this.ms.ai((function(){return n.__awaiter(t,void 0,void 0,(function(){return n.__generator(this,(function(e){switch(e.label){case 0:return this.tr?[4,this.xo()]:[3,2];case 1:e.sent(),e.label=2;case 2:return[2]}}))}))})))},e.prototype.xo=function(){var e=this;return this.runTransaction("updateClientMetadataAndTryBecomePrimary","readwrite",(function(t){return bn(t).put(new an(e.clientId,Date.now(),e.networkEnabled,e.inForeground)).next((function(){if(e.isPrimary)return e.Qo(t).next((function(t){t||(e.isPrimary=!1,e.ms.gi((function(){return e.Co(!1)})))}))})).next((function(){return e.Wo(t)})).next((function(a){return e.isPrimary&&!a?e.jo(t).next((function(){return!1})):!!a&&e.Ko(t).next((function(){return!0}))}))})).catch((function(t){if(Xa(t))return h("IndexedDbPersistence","Failed to extend owner lease: ",t),e.isPrimary;if(!e.allowTabSynchronization)throw t;return h("IndexedDbPersistence","Releasing owner lease after error during lease refresh",t),!1})).then((function(t){e.isPrimary!==t&&e.ms.gi((function(){return e.Co(t)})),e.isPrimary=t}))},e.prototype.Qo=function(e){var t=this;return pn(e).get(Bs.key).next((function(e){return Ua.resolve(t.Go(e))}))},e.prototype.zo=function(e){return bn(e).delete(this.clientId)},e.prototype.Ho=function(){return n.__awaiter(this,void 0,void 0,(function(){var t,a,s,r,o=this;return n.__generator(this,(function(n){switch(n.label){case 0:return!this.isPrimary||this.Yo(this.Do,18e5)?[3,2]:(this.Do=Date.now(),[4,this.runTransaction("maybeGarbageCollectMultiClientState","readwrite-primary",(function(t){var a=e.Ms(t,an.store);return a.Hs().next((function(e){var t=o.Jo(e,18e5),s=e.filter((function(e){return-1===t.indexOf(e)}));return Ua.forEach(s,(function(e){return a.delete(e.clientId)})).next((function(){return s}))}))})).catch((function(){return[]}))]);case 1:if(t=n.sent(),this.$o)for(a=0,s=t;aa&&(m("Detected an update time that is in the future: "+e+" > "+a),1))},e.prototype.Oo=function(){var e=this;null!==this.document&&"function"==typeof this.document.addEventListener&&(this.vo=function(){e.ms.ai((function(){return e.inForeground="visible"===e.document.visibilityState,e.xo()}))},this.document.addEventListener("visibilitychange",this.vo),this.inForeground="visible"===this.document.visibilityState)},e.prototype.nh=function(){this.vo&&(this.document.removeEventListener("visibilitychange",this.vo),this.vo=null)},e.prototype.Mo=function(){var e,t=this;"function"==typeof(null===(e=this.window)||void 0===e?void 0:e.addEventListener)&&(this.bo=function(){t.eh(),t.ms.ai((function(){return t.th()}))},this.window.addEventListener("unload",this.bo))},e.prototype.sh=function(){this.bo&&(this.window.removeEventListener("unload",this.bo),this.bo=null)},e.prototype.Zo=function(e){var t;try{var a=null!==(null===(t=this.$o)||void 0===t?void 0:t.getItem(this.Xo(e)));return h("IndexedDbPersistence","Client '"+e+"' "+(a?"is":"is not")+" zombied in LocalStorage"),a}catch(e){return m("IndexedDbPersistence","Failed to get zombied client id.",e),!1}},e.prototype.eh=function(){if(this.$o)try{this.$o.setItem(this.Xo(this.clientId),String(Date.now()))}catch(e){m("Failed to set zombie client id.",e)}},e.prototype.ih=function(){if(this.$o)try{this.$o.removeItem(this.Xo(this.clientId))}catch(e){}},e.prototype.Xo=function(e){return"firestore_zombie_"+this.persistenceKey+"_"+e},e}();function pn(e){return fn.Ms(e,Bs.store)}function bn(e){return fn.Ms(e,an.store)}var yn=function(){function e(e,t){this.db=e,this.Yi=new ms(this,t)}return e.prototype.ir=function(e){var t=this._h(e);return this.db.hh().do(e).next((function(e){return t.next((function(t){return e+t}))}))},e.prototype._h=function(e){var t=0;return this.or(e,(function(e){t++})).next((function(){return t}))},e.prototype.be=function(e,t){return this.db.hh().be(e,t)},e.prototype.or=function(e,t){return this.fh(e,(function(e,a){return t(a)}))},e.prototype.Eo=function(e,t,a){return gn(e,a)},e.prototype.Io=function(e,t,a){return gn(e,a)},e.prototype.hr=function(e,t,a){return this.db.hh().hr(e,t,a)},e.prototype.Dr=function(e,t){return gn(e,t)},e.prototype.dh=function(e,t){return function(e,t){var a=!1;return _s(e).ti((function(s){return Ps(e,s,t).next((function(e){return e&&(a=!0),Ua.resolve(!e)}))})).next((function(){return a}))}(e,t)},e.prototype.ar=function(e,t){var a=this,s=this.db.ah().jr(),n=[],r=0;return this.fh(e,(function(o,i){if(i<=t){var c=a.dh(e,o).next((function(t){if(!t)return r++,s.Ln(e,o).next((function(){return s.Mn(o),un(e).delete([0,fs(o.path)])}))}));n.push(c)}})).next((function(){return Ua.Cn(n)})).next((function(){return s.apply(e)})).next((function(){return r}))},e.prototype.removeTarget=function(e,t){var a=t.tt(e.Ro);return this.db.hh().lo(e,a)},e.prototype.wh=function(e,t){return gn(e,t)},e.prototype.fh=function(e,t){var a,s=un(e),n=Va.Es;return s.Zs({index:Qs.documentTargetsIndex},(function(e,s){var r=e[0],o=(e[1],s.path),i=s.sequenceNumber;0===r?(n!==Va.Es&&t(new C(ys(a)),n),n=i,a=o):n=Va.Es})).next((function(){n!==Va.Es&&t(new C(ys(a)),n)}))},e.prototype.ur=function(e){return this.db.ah().zr(e)},e}();function gn(e,t){return un(e).put(function(e,t){return new Qs(0,fs(e.path),t)}(t,e.Ro))}function vn(e,t){var a=e.projectId;return e.i||(a+="."+e.database),"firestore/"+t+"/"+a+"/"}var An=function(){function e(e,t,a){this.persistence=e,this.Th=t,this.Eh=new ee(w),this.mh=new P((function(e){return z(e)}),V),this.Ih=_.min(),this.Gn=e.oh(a),this.Ah=e.ah(),this.ko=e.hh(),this.Rh=new Ba(this.Ah,this.Gn,this.persistence.uh()),this.Th.Ph(this.Rh)}return e.prototype.er=function(e){var t=this;return this.persistence.runTransaction("Collect garbage","readwrite-primary",(function(a){return e.cr(a,t.Eh)}))},e}();function wn(e,t){var a=g(e);return a.persistence.runTransaction("Acknowledge batch","readwrite-primary",(function(e){var s=t.batch.keys(),n=a.Ah.jr({Gr:!0});return function(e,t,a,s){var n=a.batch,r=n.keys(),o=Ua.resolve();return r.forEach((function(e){o=o.next((function(){return s.Ln(t,e)})).next((function(t){var r=t,o=a.Pn.get(e);y(null!==o),(!r||r.version.o(o)<0)&&(r=n.En(e,r,a))&&s.xn(r,a.Rn)}))})),o.next((function(){return e.Gn.br(t,n)}))}(a,e,t,n).next((function(){return n.apply(e)})).next((function(){return a.Gn.Cr(e)})).next((function(){return a.Rh.Zn(e,s)}))}))}function Sn(e){var t=g(e);return t.persistence.runTransaction("Get last remote snapshot version","readonly",(function(e){return t.ko.ro(e)}))}function En(e,t){var a=g(e),s=t.Z,n=a.Eh;return a.persistence.runTransaction("Apply remote event","readwrite-primary",(function(e){var r=a.Ah.jr({Gr:!0});n=a.Eh;var o=[];t.Wt.forEach((function(t,r){var i=n.get(r);if(i){o.push(a.ko.mo(e,t.Zt,r).next((function(){return a.ko.To(e,t.Jt,r)})));var c=t.resumeToken;if(c.Y()>0){var d=i.et(c,s).tt(e.Ro);n=n.st(r,d),function(e,t,a){return y(t.resumeToken.Y()>0),0===e.resumeToken.Y()||t.Z.I()-e.Z.I()>=3e8||a.Jt.size+a.Xt.size+a.Zt.size>0}(i,d,t)&&o.push(a.ko.lo(e,d))}}}));var i=oe(),c=he();if(t.Kt.forEach((function(e,t){c=c.add(e)})),o.push(r.getEntries(e,c).next((function(n){t.Kt.forEach((function(c,d){var l=n.get(c);d instanceof na&&d.version.isEqual(_.min())?(r.Mn(c,s),i=i.st(c,d)):null==l||d.version.o(l.version)>0||0===d.version.o(l.version)&&l.hasPendingWrites?(r.xn(d,s),i=i.st(c,d)):h("LocalStore","Ignoring outdated watch update for ",c,". Current version:",l.version," Watch version:",d.version),t.Gt.has(c)&&o.push(a.persistence.dr.wh(e,c))}))}))),!s.isEqual(_.min())){var d=a.ko.ro(e).next((function(t){return a.ko.ho(e,e.Ro,s)}));o.push(d)}return Ua.Cn(o).next((function(){return r.apply(e)})).next((function(){return a.Rh.ts(e,i)}))})).then((function(e){return a.Eh=n,e}))}function Tn(e,t){var a=g(e);return a.persistence.runTransaction("Get next mutation batch","readonly",(function(e){return void 0===t&&(t=-1),a.Gn.gr(e,t)}))}function kn(e,t){var a=g(e);return a.persistence.runTransaction("Allocate target","readwrite",(function(e){var s;return a.ko.wo(e,t).next((function(n){return n?(s=n,Ua.resolve(s)):a.ko.no(e).next((function(n){return s=new Y(t,n,0,e.Ro),a.ko.ao(e,s).next((function(){return s}))}))}))})).then((function(e){var s=a.Eh.get(e.targetId);return(null===s||e.Z.o(s.Z)>0)&&(a.Eh=a.Eh.st(e.targetId,e),a.mh.set(t,e.targetId)),e}))}function Rn(e,t,a){return n.__awaiter(this,void 0,void 0,(function(){var s,r,o,i;return n.__generator(this,(function(n){switch(n.label){case 0:s=g(e),r=s.Eh.get(t),o=a?"readwrite":"readwrite-primary",n.label=1;case 1:return n.trys.push([1,4,,5]),a?[3,3]:[4,s.persistence.runTransaction("Release target",o,(function(e){return s.persistence.dr.removeTarget(e,r)}))];case 2:n.sent(),n.label=3;case 3:return[3,5];case 4:if(!Xa(i=n.sent()))throw i;return h("LocalStore","Failed to update sequence numbers for target "+t+": "+i),[3,5];case 5:return s.Eh=s.Eh.remove(t),s.mh.delete(r.target),[2]}}))}))}function Nn(e,t,a){var s=g(e),n=_.min(),r=he();return s.persistence.runTransaction("Execute query","readonly",(function(e){return function(e,t,a){var s=g(e),n=s.mh.get(a);return void 0!==n?Ua.resolve(s.Eh.get(n)):s.ko.wo(t,a)}(s,e,ha(t)).next((function(t){if(t)return n=t.lastLimboFreeSnapshotVersion,s.ko.Ao(e,t.targetId).next((function(e){r=e}))})).next((function(){return s.Th.ns(e,t,a?n:_.min(),a?r:he())})).next((function(e){return{documents:e,gh:r}}))}))}function xn(e,t){var a=g(e),s=g(a.ko),n=a.Eh.get(t);return n?Promise.resolve(n.target):a.persistence.runTransaction("Get target data","readonly",(function(e){return s.Me(e,t).next((function(e){return e?e.target:null}))}))}function Pn(e){return n.__awaiter(this,void 0,void 0,(function(){return n.__generator(this,(function(t){if(e.code!==j.FAILED_PRECONDITION||e.message!==qa)throw e;return h("LocalStore","Unexpectedly lost primary lease"),[2]}))}))} +/** + * @license + * Copyright 2017 Google LLC + * + * 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. + */var jn=function(){function e(){this.Vh=new se(Ln.yh),this.ph=new se(Ln.bh)}return e.prototype._=function(){return this.Vh._()},e.prototype.Eo=function(e,t){var a=new Ln(e,t);this.Vh=this.Vh.add(a),this.ph=this.ph.add(a)},e.prototype.vh=function(e,t){var a=this;e.forEach((function(e){return a.Eo(e,t)}))},e.prototype.Io=function(e,t){this.Sh(new Ln(e,t))},e.prototype.Dh=function(e,t){var a=this;e.forEach((function(e){return a.Io(e,t)}))},e.prototype.Ch=function(e){var t=this,a=new C(new I([])),s=new Ln(a,e),n=new Ln(a,e+1),r=[];return this.ph.St([s,n],(function(e){t.Sh(e),r.push(e.key)})),r},e.prototype.Nh=function(){var e=this;this.Vh.forEach((function(t){return e.Sh(t)}))},e.prototype.Sh=function(e){this.Vh=this.Vh.delete(e),this.ph=this.ph.delete(e)},e.prototype.Fh=function(e){var t=new C(new I([])),a=new Ln(t,e),s=new Ln(t,e+1),n=he();return this.ph.St([a,s],(function(e){n=n.add(e.key)})),n},e.prototype.Nr=function(e){var t=new Ln(e,0),a=this.Vh.Ct(t);return null!==a&&e.isEqual(a.key)},e}(),Ln=function(){function e(e,t){this.key=e,this.kh=t}return e.yh=function(e,t){return C.P(e.key,t.key)||w(e.kh,t.kh)},e.bh=function(e,t){return w(e.kh,t.kh)||C.P(e.key,t.key)},e}(),Mn=function(){function e(e){this.uid=e}return e.prototype.Er=function(){return null!=this.uid},e.prototype.$h=function(){return this.Er()?"uid:"+this.uid:"anonymous-user"},e.prototype.isEqual=function(e){return e.uid===this.uid},e}();Mn.UNAUTHENTICATED=new Mn(null),Mn.xh=new Mn("google-credentials-uid"),Mn.Oh=new Mn("first-party-uid"); +/** + * @license + * Copyright 2017 Google LLC + * + * 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. + */ +var _n=function(e,t){this.user=t,this.type="OAuth",this.Mh={},this.Mh.Authorization="Bearer "+e},Dn=function(){function e(){this.Lh=null}return e.prototype.getToken=function(){return Promise.resolve(null)},e.prototype.qh=function(){},e.prototype.Bh=function(e){this.Lh=e,e(Mn.UNAUTHENTICATED)},e.prototype.Uh=function(){this.Lh=null},e}(),In=function(){function e(e){var t=this;this.Qh=null,this.currentUser=Mn.UNAUTHENTICATED,this.Wh=!1,this.jh=0,this.Lh=null,this.forceRefresh=!1,this.Qh=function(){t.jh++,t.currentUser=t.Kh(),t.Wh=!0,t.Lh&&t.Lh(t.currentUser)},this.jh=0,this.auth=e.getImmediate({optional:!0}),this.auth?this.auth.addAuthTokenListener(this.Qh):(this.Qh(null),e.get().then((function(e){t.auth=e,t.Qh&&t.auth.addAuthTokenListener(t.Qh)}),(function(){})))}return e.prototype.getToken=function(){var e=this,t=this.jh,a=this.forceRefresh;return this.forceRefresh=!1,this.auth?this.auth.getToken(a).then((function(a){return e.jh!==t?(h("FirebaseCredentialsProvider","getToken aborted due to token change."),e.getToken()):a?(y("string"==typeof a.accessToken),new _n(a.accessToken,e.currentUser)):null})):Promise.resolve(null)},e.prototype.qh=function(){this.forceRefresh=!0},e.prototype.Bh=function(e){this.Lh=e,this.Wh&&e(this.currentUser)},e.prototype.Uh=function(){this.auth&&this.auth.removeAuthTokenListener(this.Qh),this.Qh=null,this.Lh=null},e.prototype.Kh=function(){var e=this.auth&&this.auth.getUid();return y(null===e||"string"==typeof e),new Mn(e)},e}(),On=function(){function e(e,t){this.Gh=e,this.zh=t,this.type="FirstParty",this.user=Mn.Oh}return Object.defineProperty(e.prototype,"Mh",{get:function(){var e={"X-Goog-AuthUser":this.zh},t=this.Gh.auth.Hh([]);return t&&(e.Authorization=t),e},enumerable:!1,configurable:!0}),e}(),Zn=function(){function e(e,t){this.Gh=e,this.zh=t}return e.prototype.getToken=function(){return Promise.resolve(new On(this.Gh,this.zh))},e.prototype.Bh=function(e){e(Mn.Oh)},e.prototype.Uh=function(){},e.prototype.qh=function(){},e}(),Cn=function(){function e(e,t,a,s,n,r){this.ms=e,this.Yh=a,this.Jh=s,this.Xh=n,this.listener=r,this.state=0,this.Zh=0,this.ta=null,this.stream=null,this.Ti=new Ga(e,t)}return e.prototype.ea=function(){return 1===this.state||2===this.state||4===this.state},e.prototype.na=function(){return 2===this.state},e.prototype.start=function(){3!==this.state?this.auth():this.sa()},e.prototype.stop=function(){return n.__awaiter(this,void 0,void 0,(function(){return n.__generator(this,(function(e){switch(e.label){case 0:return this.ea()?[4,this.close(0)]:[3,2];case 1:e.sent(),e.label=2;case 2:return[2]}}))}))},e.prototype.ia=function(){this.state=0,this.Ti.reset()},e.prototype.ra=function(){var e=this;this.na()&&null===this.ta&&(this.ta=this.ms.Ss(this.Yh,6e4,(function(){return e.oa()})))},e.prototype.ha=function(e){this.aa(),this.stream.send(e)},e.prototype.oa=function(){return n.__awaiter(this,void 0,void 0,(function(){return n.__generator(this,(function(e){return this.na()?[2,this.close(0)]:[2]}))}))},e.prototype.aa=function(){this.ta&&(this.ta.cancel(),this.ta=null)},e.prototype.close=function(e,t){return n.__awaiter(this,void 0,void 0,(function(){return n.__generator(this,(function(a){switch(a.label){case 0:return this.aa(),this.Ti.cancel(),this.Zh++,3!==e?this.Ti.reset():t&&t.code===j.RESOURCE_EXHAUSTED?(m(t.toString()),m("Using maximum backoff delay to prevent overloading the backend."),this.Ti.ps()):t&&t.code===j.UNAUTHENTICATED&&this.Xh.qh(),null!==this.stream&&(this.ca(),this.stream.close(),this.stream=null),this.state=e,[4,this.listener.ua(t)];case 1:return a.sent(),[2]}}))}))},e.prototype.ca=function(){},e.prototype.auth=function(){var e=this;this.state=1;var t=this.la(this.Zh),a=this.Zh;this.Xh.getToken().then((function(t){e.Zh===a&&e._a(t)}),(function(a){t((function(){var t=new L(j.UNKNOWN,"Fetching auth token failed: "+a.message);return e.fa(t)}))}))},e.prototype._a=function(e){var t=this,a=this.la(this.Zh);this.stream=this.da(e),this.stream.wa((function(){a((function(){return t.state=2,t.listener.wa()}))})),this.stream.ua((function(e){a((function(){return t.fa(e)}))})),this.stream.onMessage((function(e){a((function(){return t.onMessage(e)}))}))},e.prototype.sa=function(){var e=this;this.state=4,this.Ti.bs((function(){return n.__awaiter(e,void 0,void 0,(function(){return n.__generator(this,(function(e){return this.state=0,this.start(),[2]}))}))}))},e.prototype.fa=function(e){return h("PersistentStream","close with error: "+e),this.stream=null,this.close(3,e)},e.prototype.la=function(e){var t=this;return function(a){t.ms.ai((function(){return t.Zh===e?a():(h("PersistentStream","stream callback skipped by getCloseGuardedDispatcher."),Promise.resolve())}))}},e}(),Un=function(e){function t(t,a,s,n,r){var o=this;return(o=e.call(this,t,"listen_stream_connection_backoff","listen_stream_idle",a,s,r)||this).serializer=n,o}return n.__extends(t,e),t.prototype.da=function(e){return this.Jh.Ta("Listen",e)},t.prototype.onMessage=function(e){this.Ti.reset();var t=function(e,t){var a;if("targetChange"in t){t.targetChange;var s=function(e){return"NO_CHANGE"===e?0:"ADD"===e?1:"REMOVE"===e?2:"CURRENT"===e?3:"RESET"===e?4:b()}(t.targetChange.targetChangeType||"NO_CHANGE"),n=t.targetChange.targetIds||[],r=function(e,t){return e.Le?(y(void 0===t||"string"==typeof t),G.fromBase64String(t||"")):(y(void 0===t||t instanceof Uint8Array),G.fromUint8Array(t||new Uint8Array))}(e,t.targetChange.resumeToken),o=t.targetChange.cause,i=o&&function(e){var t=void 0===e.code?j.UNKNOWN:$(e.code);return new L(t,e.message||"")}(o);a=new Se(s,n,r,i||null)}else if("documentChange"in t){t.documentChange;var c=t.documentChange;c.document,c.document.name,c.document.updateTime;var d=nt(e,c.document.name),l=et(c.document.updateTime),u=new $t({mapValue:{fields:c.document.fields}}),h=new sa(d,l,u,{}),m=c.targetIds||[],f=c.removedTargetIds||[];a=new Ae(m,f,h.key,h)}else if("documentDelete"in t){t.documentDelete;var p=t.documentDelete;p.document;var g=nt(e,p.document),v=p.readTime?et(p.readTime):_.min(),A=new na(g,v),w=p.removedTargetIds||[];a=new Ae([],w,A.key,A)}else if("documentRemove"in t){t.documentRemove;var S=t.documentRemove;S.document;var E=nt(e,S.document),T=S.removedTargetIds||[];a=new Ae([],T,E,null)}else{if(!("filter"in t))return b();t.filter;var k=t.filter;k.targetId;var R=k.count||0,N=new X(R),x=k.targetId;a=new we(x,N)}return a}(this.serializer,e),a=function(e){if(!("targetChange"in e))return _.min();var t=e.targetChange;return t.targetIds&&t.targetIds.length?_.min():t.readTime?et(t.readTime):_.min()}(e);return this.listener.Ea(t,a)},t.prototype.ma=function(e){var t={};t.database=it(this.serializer),t.addTarget=function(e,t){var a,s=t.target;return(a=J(s)?{documents:ht(e,s)}:{query:mt(e,s)}).targetId=t.targetId,t.resumeToken.Y()>0&&(a.resumeToken=Qe(e,t.resumeToken)),a}(this.serializer,e);var a=function(e,t){var a=function(e,t){switch(t){case 0:return null;case 1:return"existence-filter-mismatch";case 2:return"limbo-document";default:return b()}}(0,t.X);return null==a?null:{"goog-listen-tags":a}}(this.serializer,e);a&&(t.labels=a),this.ha(t)},t.prototype.Ia=function(e){var t={};t.database=it(this.serializer),t.removeTarget=e,this.ha(t)},t}(Cn),Fn=function(e){function t(t,a,s,n,r){var o=this;return(o=e.call(this,t,"write_stream_connection_backoff","write_stream_idle",a,s,r)||this).serializer=n,o.Aa=!1,o}return n.__extends(t,e),Object.defineProperty(t.prototype,"Ra",{get:function(){return this.Aa},enumerable:!1,configurable:!0}),t.prototype.start=function(){this.Aa=!1,this.lastStreamToken=void 0,e.prototype.start.call(this)},t.prototype.ca=function(){this.Aa&&this.Pa([])},t.prototype.da=function(e){return this.Jh.Ta("Write",e)},t.prototype.onMessage=function(e){if(y(!!e.streamToken),this.lastStreamToken=e.streamToken,this.Aa){this.Ti.reset();var t=function(e,t){return e&&e.length>0?(y(void 0!==t),e.map((function(e){return function(e,t){var a=e.updateTime?et(e.updateTime):et(t);a.isEqual(_.min())&&(a=et(t));var s=null;return e.transformResults&&e.transformResults.length>0&&(s=e.transformResults),new Ot(a,s)}(e,t)}))):[]}(e.writeResults,e.commitTime),a=et(e.commitTime);return this.listener.ga(a,t)}return y(!e.writeResults||0===e.writeResults.length),this.Aa=!0,this.listener.Va()},t.prototype.ya=function(){var e={};e.database=it(this.serializer),this.ha(e)},t.prototype.Pa=function(e){var t=this,a={streamToken:this.lastStreamToken,writes:e.map((function(e){return lt(t.serializer,e)}))};this.ha(a)},t}(Cn),qn=function(e){function t(t,a,s){var n=this;return(n=e.call(this)||this).credentials=t,n.Jh=a,n.serializer=s,n.pa=!1,n}return n.__extends(t,e),t.prototype.ba=function(){if(this.pa)throw new L(j.FAILED_PRECONDITION,"The client has already been terminated.")},t.prototype.va=function(e,t,a){var s=this;return this.ba(),this.credentials.getToken().then((function(n){return s.Jh.va(e,t,a,n)})).catch((function(e){throw e.code===j.UNAUTHENTICATED&&s.credentials.qh(),e}))},t.prototype.Sa=function(e,t,a){var s=this;return this.ba(),this.credentials.getToken().then((function(n){return s.Jh.Sa(e,t,a,n)})).catch((function(e){throw e.code===j.UNAUTHENTICATED&&s.credentials.qh(),e}))},t.prototype.terminate=function(){this.pa=!1},t}((function(){})),Hn=function(){function e(e,t){this.ei=e,this.Da=t,this.state="Unknown",this.Ca=0,this.Na=null,this.Fa=!0}return e.prototype.ka=function(){var e=this;0===this.Ca&&(this.$a("Unknown"),this.Na=this.ei.Ss("online_state_timeout",1e4,(function(){return e.Na=null,e.xa("Backend didn't respond within 10 seconds."),e.$a("Offline"),Promise.resolve()})))},e.prototype.Oa=function(e){"Online"===this.state?this.$a("Unknown"):(this.Ca++,this.Ca>=1&&(this.Ma(),this.xa("Connection failed 1 times. Most recent error: "+e.toString()),this.$a("Offline")))},e.prototype.set=function(e){this.Ma(),this.Ca=0,"Online"===e&&(this.Fa=!1),this.$a(e)},e.prototype.$a=function(e){e!==this.state&&(this.state=e,this.Da(e))},e.prototype.xa=function(e){var t="Could not reach Cloud Firestore backend. "+e+"\nThis typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.";this.Fa?(m(t),this.Fa=!1):h("OnlineStateTracker",t)},e.prototype.Ma=function(){null!==this.Na&&(this.Na.cancel(),this.Na=null)},e}(),Bn=function(){function e(e,t,a,s,r){var o=this;this.La=e,this.qa=t,this.ei=a,this.Ba=[],this.Ua=new Map,this.Qa=null,this.Wa=new Set,this.ja=r,this.ja.Ka((function(e){a.ai((function(){return n.__awaiter(o,void 0,void 0,(function(){return n.__generator(this,(function(e){switch(e.label){case 0:return this.Ga()?(h("RemoteStore","Restarting streams for network reachability change."),[4,this.za()]):[3,2];case 1:e.sent(),e.label=2;case 2:return[2]}}))}))}))})),this.Ha=new Hn(a,s),this.Ya=function(e,t,a){var s=g(e);return s.ba(),new Un(t,s.Jh,s.credentials,s.serializer,a)}(this.qa,a,{wa:this.Ja.bind(this),ua:this.Xa.bind(this),Ea:this.Za.bind(this)}),this.tc=function(e,t,a){var s=g(e);return s.ba(),new Fn(t,s.Jh,s.credentials,s.serializer,a)}(this.qa,a,{wa:this.ec.bind(this),ua:this.nc.bind(this),Va:this.sc.bind(this),ga:this.ga.bind(this)})}return e.prototype.start=function(){return this.enableNetwork()},e.prototype.enableNetwork=function(){return this.Wa.delete(0),this.ic()},e.prototype.ic=function(){return n.__awaiter(this,void 0,void 0,(function(){return n.__generator(this,(function(e){switch(e.label){case 0:return this.Ga()?(this.rc()?this.oc():this.Ha.set("Unknown"),[4,this.hc()]):[3,2];case 1:e.sent(),e.label=2;case 2:return[2]}}))}))},e.prototype.disableNetwork=function(){return n.__awaiter(this,void 0,void 0,(function(){return n.__generator(this,(function(e){switch(e.label){case 0:return this.Wa.add(0),[4,this.ac()];case 1:return e.sent(),this.Ha.set("Offline"),[2]}}))}))},e.prototype.ac=function(){return n.__awaiter(this,void 0,void 0,(function(){return n.__generator(this,(function(e){switch(e.label){case 0:return[4,this.tc.stop()];case 1:return e.sent(),[4,this.Ya.stop()];case 2:return e.sent(),this.Ba.length>0&&(h("RemoteStore","Stopping write stream with "+this.Ba.length+" pending writes"),this.Ba=[]),this.cc(),[2]}}))}))},e.prototype.th=function(){return n.__awaiter(this,void 0,void 0,(function(){return n.__generator(this,(function(e){switch(e.label){case 0:return h("RemoteStore","RemoteStore shutting down."),this.Wa.add(5),[4,this.ac()];case 1:return e.sent(),this.ja.th(),this.Ha.set("Unknown"),[2]}}))}))},e.prototype.listen=function(e){this.Ua.has(e.targetId)||(this.Ua.set(e.targetId,e),this.rc()?this.oc():this.Ya.na()&&this.uc(e))},e.prototype.lc=function(e){this.Ua.delete(e),this.Ya.na()&&this._c(e),0===this.Ua.size&&(this.Ya.na()?this.Ya.ra():this.Ga()&&this.Ha.set("Unknown"))},e.prototype.Me=function(e){return this.Ua.get(e)||null},e.prototype.Oe=function(e){return this.fc.Oe(e)},e.prototype.uc=function(e){this.Qa.we(e.targetId),this.Ya.ma(e)},e.prototype._c=function(e){this.Qa.we(e),this.Ya.Ia(e)},e.prototype.oc=function(){this.Qa=new Te(this),this.Ya.start(),this.Ha.ka()},e.prototype.rc=function(){return this.Ga()&&!this.Ya.ea()&&this.Ua.size>0},e.prototype.Ga=function(){return 0===this.Wa.size},e.prototype.cc=function(){this.Qa=null},e.prototype.Ja=function(){return n.__awaiter(this,void 0,void 0,(function(){var e=this;return n.__generator(this,(function(t){return this.Ua.forEach((function(t,a){e.uc(t)})),[2]}))}))},e.prototype.Xa=function(e){return n.__awaiter(this,void 0,void 0,(function(){return n.__generator(this,(function(t){return this.cc(),this.rc()?(this.Ha.Oa(e),this.oc()):this.Ha.set("Unknown"),[2]}))}))},e.prototype.Za=function(e,t){return n.__awaiter(this,void 0,void 0,(function(){var a,s,r;return n.__generator(this,(function(n){switch(n.label){case 0:if(this.Ha.set("Online"),!(e instanceof Se&&2===e.state&&e.cause))return[3,6];n.label=1;case 1:return n.trys.push([1,3,,5]),[4,this.dc(e)];case 2:return n.sent(),[3,5];case 3:return a=n.sent(),h("RemoteStore","Failed to remove targets %s: %s ",e.targetIds.join(","),a),[4,this.wc(a)];case 4:return n.sent(),[3,5];case 5:return[3,13];case 6:if(e instanceof Ae?this.Qa.ge(e):e instanceof we?this.Qa.Ce(e):this.Qa.pe(e),t.isEqual(_.min()))return[3,13];n.label=7;case 7:return n.trys.push([7,11,,13]),[4,Sn(this.La)];case 8:return s=n.sent(),t.o(s)>=0?[4,this.Tc(t)]:[3,10];case 9:n.sent(),n.label=10;case 10:return[3,13];case 11:return h("RemoteStore","Failed to raise snapshot:",r=n.sent()),[4,this.wc(r)];case 12:return n.sent(),[3,13];case 13:return[2]}}))}))},e.prototype.wc=function(e,t){return n.__awaiter(this,void 0,void 0,(function(){var a=this;return n.__generator(this,(function(s){switch(s.label){case 0:if(!Xa(e))throw e;return this.Wa.add(1),[4,this.ac()];case 1:return s.sent(),this.Ha.set("Offline"),t||(t=function(){return Sn(a.La)}),this.ei.gi((function(){return n.__awaiter(a,void 0,void 0,(function(){return n.__generator(this,(function(e){switch(e.label){case 0:return h("RemoteStore","Retrying IndexedDB access"),[4,t()];case 1:return e.sent(),this.Wa.delete(1),[4,this.ic()];case 2:return e.sent(),[2]}}))}))})),[2]}}))}))},e.prototype.Ec=function(e){var t=this;return e().catch((function(a){return t.wc(a,e)}))},e.prototype.Tc=function(e){var t=this,a=this.Qa.ke(e);return a.Wt.forEach((function(a,s){if(a.resumeToken.Y()>0){var n=t.Ua.get(s);n&&t.Ua.set(s,n.et(a.resumeToken,e))}})),a.jt.forEach((function(e){var a=t.Ua.get(e);if(a){t.Ua.set(e,a.et(G.J,a.Z)),t._c(e);var s=new Y(a.target,e,1,a.sequenceNumber);t.uc(s)}})),this.fc.mc(a)},e.prototype.dc=function(e){return n.__awaiter(this,void 0,void 0,(function(){var t,a,s,r;return n.__generator(this,(function(n){switch(n.label){case 0:t=e.cause,a=0,s=e.targetIds,n.label=1;case 1:return a0?this.Ba[this.Ba.length-1].batchId:-1,s.label=1;case 1:if(!this.Ac())return[3,7];s.label=2;case 2:return s.trys.push([2,4,,6]),[4,Tn(this.La,e)];case 3:return null===(t=s.sent())?(0===this.Ba.length&&this.tc.ra(),[3,7]):(e=t.batchId,this.Rc(t),[3,6]);case 4:return a=s.sent(),[4,this.wc(a)];case 5:return s.sent(),[3,6];case 6:return[3,1];case 7:return this.Pc()&&this.gc(),[2]}}))}))},e.prototype.Ac=function(){return this.Ga()&&this.Ba.length<10},e.prototype.Vc=function(){return this.Ba.length},e.prototype.Rc=function(e){this.Ba.push(e),this.tc.na()&&this.tc.Ra&&this.tc.Pa(e.mutations)},e.prototype.Pc=function(){return this.Ga()&&!this.tc.ea()&&this.Ba.length>0},e.prototype.gc=function(){this.tc.start()},e.prototype.ec=function(){return n.__awaiter(this,void 0,void 0,(function(){return n.__generator(this,(function(e){return this.tc.ya(),[2]}))}))},e.prototype.sc=function(){return n.__awaiter(this,void 0,void 0,(function(){var e,t,a;return n.__generator(this,(function(s){for(e=0,t=this.Ba;e0||d&&a.pu(u,d)<0)&&(i=!0)):!l&&u?(s.track({type:0,doc:u}),f=!0):l&&!u&&(s.track({type:1,doc:l}),f=!0,(c||d)&&(i=!0)),f&&(u?(o=o.add(u),r=m?r.add(e):r.delete(e)):(o=o.delete(e),r=r.delete(e)))})),this.query.an()||this.query.cn())for(;o.size>this.query.limit;){var l=this.query.an()?o.last():o.first();o=o.delete(l.key),r=r.delete(l.key),s.track({type:1,doc:l})}return{bu:o,Du:s,Nu:i,qt:r}},e.prototype.Cu=function(e,t){return e.Ge&&t.hasCommittedMutations&&!t.Ge},e.prototype.Un=function(e,t,a){var s=this,n=this.bu;this.bu=e.bu,this.qt=e.qt;var r=e.Du.Mt();r.sort((function(e,t){return function(e,t){var a=function(e){switch(e){case 0:return 1;case 2:case 3:return 2;case 1:return 0;default:return b()}};return a(e)-a(t)}(e.type,t.type)||s.pu(e.doc,t.doc)})),this.Fu(a);var o=t?this.ku():[],i=0===this.yu.size&&this.Yt?1:0,c=i!==this.Vu;return this.Vu=i,0!==r.length||c?{snapshot:new ye(this.query,e.bu,n,r,e.qt,0===i,c,!1),$u:o}:{$u:o}},e.prototype.xu=function(e){return this.Yt&&"Offline"===e?(this.Yt=!1,this.Un({bu:this.bu,Du:new be,qt:this.qt,Nu:!1},!1)):{$u:[]}},e.prototype.Ou=function(e){return!this.gu.has(e)&&!!this.bu.has(e)&&!this.bu.get(e).Ge},e.prototype.Fu=function(e){var t=this;e&&(e.Jt.forEach((function(e){return t.gu=t.gu.add(e)})),e.Xt.forEach((function(e){})),e.Zt.forEach((function(e){return t.gu=t.gu.delete(e)})),this.Yt=e.Yt)},e.prototype.ku=function(){var e=this;if(!this.Yt)return[];var t=this.yu;this.yu=he(),this.bu.forEach((function(t){e.Ou(t.key)&&(e.yu=e.yu.add(t.key))}));var a=[];return t.forEach((function(t){e.yu.has(t)||a.push(new tr(t))})),this.yu.forEach((function(e){t.has(e)||a.push(new er(e))})),a},e.prototype.Mu=function(e){this.gu=e.gh,this.yu=he();var t=this.Su(e.documents);return this.Un(t,!0)},e.prototype.Lu=function(){return ye.Qt(this.query,this.bu,this.qt,0===this.Vu)},e}(),sr=function(e,t,a){this.query=e,this.targetId=t,this.view=a},nr=function(e){this.key=e,this.qu=!1},rr=function(){function e(e,t,a,s,n,r){this.La=e,this.Bu=t,this.qa=a,this.Uu=s,this.currentUser=n,this.Qu=r,this.Wu=null,this.ju=new P((function(e){return ya(e)}),ba),this.Ku=new Map,this.Gu=[],this.zu=new ee(C.P),this.Hu=new Map,this.Yu=new jn,this.Ju={},this.Xu=new Map,this.Zu=on.eo(),this.onlineState="Unknown",this.tl=void 0}return Object.defineProperty(e.prototype,"el",{get:function(){return!0===this.tl},enumerable:!1,configurable:!0}),e.prototype.subscribe=function(e){this.Wu=e},e.prototype.listen=function(e){return n.__awaiter(this,void 0,void 0,(function(){var t,a,s,r,o;return n.__generator(this,(function(n){switch(n.label){case 0:return this.nl("listen()"),(s=this.ju.get(e))?(t=s.targetId,this.Uu.eu(t),a=s.view.Lu(),[3,4]):[3,1];case 1:return[4,kn(this.La,ha(e))];case 2:return r=n.sent(),o=this.Uu.eu(r.targetId),t=r.targetId,[4,this.sl(e,t,"current"===o)];case 3:a=n.sent(),this.el&&this.Bu.listen(r),n.label=4;case 4:return[2,a]}}))}))},e.prototype.sl=function(e,t,a){return n.__awaiter(this,void 0,void 0,(function(){var s,r,o,i,c,d;return n.__generator(this,(function(n){switch(n.label){case 0:return[4,Nn(this.La,e,!0)];case 1:return s=n.sent(),r=new ar(e,s.gh),o=r.Su(s.documents),i=ve.Ht(t,a&&"Offline"!==this.onlineState),c=r.Un(o,this.el,i),this.il(t,c.$u),d=new sr(e,t,r),[2,(this.ju.set(e,d),this.Ku.has(t)?this.Ku.get(t).push(e):this.Ku.set(t,[e]),c.snapshot)]}}))}))},e.prototype.lc=function(e){return n.__awaiter(this,void 0,void 0,(function(){var t,a,s=this;return n.__generator(this,(function(n){switch(n.label){case 0:return this.nl("unlisten()"),t=this.ju.get(e),(a=this.Ku.get(t.targetId)).length>1?[2,(this.Ku.set(t.targetId,a.filter((function(t){return!ba(t,e)}))),void this.ju.delete(e))]:this.el?(this.Uu.su(t.targetId),this.Uu.Yc(t.targetId)?[3,2]:[4,Rn(this.La,t.targetId,!1).then((function(){s.Uu.ru(t.targetId),s.Bu.lc(t.targetId),s.rl(t.targetId)})).catch(Pn)]):[3,3];case 1:n.sent(),n.label=2;case 2:return[3,5];case 3:return this.rl(t.targetId),[4,Rn(this.La,t.targetId,!0)];case 4:n.sent(),n.label=5;case 5:return[2]}}))}))},e.prototype.write=function(e,t){return n.__awaiter(this,void 0,void 0,(function(){var a,s,r;return n.__generator(this,(function(n){switch(n.label){case 0:this.nl("write()"),n.label=1;case 1:return n.trys.push([1,5,,6]),[4,function(e,t){var a,s=g(e),n=M.now(),r=t.reduce((function(e,t){return e.add(t.key)}),he());return s.persistence.runTransaction("Locally write mutations","readwrite",(function(e){return s.Rh.Zn(e,r).next((function(r){a=r;for(var o=[],i=0,c=t;i0?s.qu=!0:e.Xt.size>0?y(s.qu):e.Zt.size>0&&(y(s.qu),s.qu=!1))})),[4,this.hl(t,e)];case 3:return s.sent(),[3,6];case 4:return[4,Pn(s.sent())];case 5:return s.sent(),[3,6];case 6:return[2]}}))}))},e.prototype.xu=function(e,t){if(this.el&&0===t||!this.el&&1===t){this.nl("applyOnlineStateChange()");var a=[];this.ju.forEach((function(t,s){var n=s.view.xu(e);n.snapshot&&a.push(n.snapshot)})),this.Wu.al(e),this.Wu.Ea(a),this.onlineState=e,this.el&&this.Uu.cu(e)}},e.prototype.Ic=function(e,t){return n.__awaiter(this,void 0,void 0,(function(){var a,s,r,o,i,c=this;return n.__generator(this,(function(n){switch(n.label){case 0:return this.nl("rejectListens()"),this.Uu.ou(e,"rejected",t),a=this.Hu.get(e),(s=a&&a.key)?(r=(r=new ee(C.P)).st(s,new na(s,_.min())),o=he().add(s),i=new ge(_.min(),new Map,new se(w),r,o),[4,this.mc(i)]):[3,2];case 1:return n.sent(),this.zu=this.zu.remove(s),this.Hu.delete(e),this.cl(),[3,4];case 2:return[4,Rn(this.La,e,!1).then((function(){return c.rl(e,t)})).catch(Pn)];case 3:n.sent(),n.label=4;case 4:return[2]}}))}))},e.prototype.yc=function(e){return n.__awaiter(this,void 0,void 0,(function(){var t,a;return n.__generator(this,(function(s){switch(s.label){case 0:this.nl("applySuccessfulWrite()"),t=e.batch.batchId,s.label=1;case 1:return s.trys.push([1,4,,6]),[4,wn(this.La,e)];case 2:return a=s.sent(),this.ul(t,null),this.ll(t),this.Uu.Zc(t,"acknowledged"),[4,this.hl(a)];case 3:return s.sent(),[3,6];case 4:return[4,Pn(s.sent())];case 5:return s.sent(),[3,6];case 6:return[2]}}))}))},e.prototype.bc=function(e,t){return n.__awaiter(this,void 0,void 0,(function(){var a;return n.__generator(this,(function(s){switch(s.label){case 0:this.nl("rejectFailedWrite()"),s.label=1;case 1:return s.trys.push([1,4,,6]),[4,function(e,t){var a=g(e);return a.persistence.runTransaction("Reject batch","readwrite-primary",(function(e){var s;return a.Gn.Rr(e,t).next((function(t){return y(null!==t),s=t.keys(),a.Gn.br(e,t)})).next((function(){return a.Gn.Cr(e)})).next((function(){return a.Rh.Zn(e,s)}))}))}(this.La,e)];case 2:return a=s.sent(),this.ul(e,t),this.ll(e),this.Uu.Zc(e,"rejected",t),[4,this.hl(a)];case 3:return s.sent(),[3,6];case 4:return[4,Pn(s.sent())];case 5:return s.sent(),[3,6];case 6:return[2]}}))}))},e.prototype._l=function(e){return n.__awaiter(this,void 0,void 0,(function(){var t,a,s,r;return n.__generator(this,(function(n){switch(n.label){case 0:this.Bu.Ga()||h("SyncEngine","The network is disabled. The task returned by 'awaitPendingWrites()' will not complete until the network is enabled."),n.label=1;case 1:return n.trys.push([1,3,,4]),[4,function(e){var t=g(e);return t.persistence.runTransaction("Get highest unacknowledged batch id","readonly",(function(e){return t.Gn.Vr(e)}))}(this.La)];case 2:return-1===(t=n.sent())?[2,void e.resolve()]:((a=this.Xu.get(t)||[]).push(e),this.Xu.set(t,a),[3,4]);case 3:return s=n.sent(),r=is(s,"Initialization of waitForPendingWrites() operation failed"),e.reject(r),[3,4];case 4:return[2]}}))}))},e.prototype.ll=function(e){(this.Xu.get(e)||[]).forEach((function(e){e.resolve()})),this.Xu.delete(e)},e.prototype.fl=function(e){this.Xu.forEach((function(t){t.forEach((function(t){t.reject(new L(j.CANCELLED,e))}))})),this.Xu.clear()},e.prototype.ol=function(e,t){var a=this.Ju[this.currentUser.$h()];a||(a=new ee(w)),a=a.st(e,t),this.Ju[this.currentUser.$h()]=a},e.prototype.ul=function(e,t){var a=this.Ju[this.currentUser.$h()];if(a){var s=a.get(e);s&&(t?s.reject(t):s.resolve(),a=a.remove(e)),this.Ju[this.currentUser.$h()]=a}},e.prototype.rl=function(e,t){var a=this;void 0===t&&(t=null),this.Uu.su(e);for(var s=0,n=this.Ku.get(e);s0&&this.zu.size=0&&(s.listeners.splice(r,1),a=0===s.listeners.length),a?[2,(this.gl.delete(t),this.fc.lc(t))]:[2]}))}))},e.prototype.Ea=function(e){for(var t=!1,a=0,s=e;a0)return!0;var t=this.Cl&&this.Cl.hasPendingWrites!==e.hasPendingWrites;return!(!e.Bt&&!t)&&!0===this.options.includeMetadataChanges},e.prototype.kl=function(e){e=ye.Qt(e.query,e.docs,e.qt,e.fromCache),this.Dl=!0,this.Sl.next(e)},e}(),yr=function(){function e(){}return e.prototype.Ph=function(e){this.xl=e},e.prototype.ns=function(e,t,a,s){var n=this;return t.hn()||a.isEqual(_.min())?this.Ol(e,t):this.xl.Zn(e,s).next((function(r){var i=n.Ml(t,r);return(t.an()||t.cn())&&n.Nu(t.nn,i,s,a)?n.Ol(e,t):(u()<=o.LogLevel.DEBUG&&h("IndexFreeQueryEngine","Re-using previous result from %s to execute query: %s",a.toString(),ga(t)),n.xl.ns(e,t,a).next((function(e){return i.forEach((function(t){e=e.st(t.key,t)})),e})))}))},e.prototype.Ml=function(e,t){var a=new se(Aa(e));return t.forEach((function(t,s){s instanceof sa&&va(e,s)&&(a=a.add(s))})),a},e.prototype.Nu=function(e,t,a,s){if(a.size!==t.size)return!0;var n="F"===e?t.last():t.first();return!!n&&(n.hasPendingWrites||n.version.o(s)>0)},e.prototype.Ol=function(e,t){return u()<=o.LogLevel.DEBUG&&h("IndexFreeQueryEngine","Using full collection scan to execute query:",ga(t)),this.xl.ns(e,t,_.min())},e}(),gr=function(){function e(e,t){this.zn=e,this.dr=t,this.Gn=[],this.Ll=1,this.ql=new se(Ln.yh)}return e.prototype.mr=function(e){return Ua.resolve(0===this.Gn.length)},e.prototype.Ir=function(e,t,a,s){var n=this.Ll;this.Ll++,this.Gn.length>0&&this.Gn[this.Gn.length-1];var r=new Za(n,t,a,s);this.Gn.push(r);for(var o=0,i=s;on?this.Gn[n]:null)},e.prototype.Vr=function(){return Ua.resolve(0===this.Gn.length?-1:this.Ll-1)},e.prototype.yr=function(e){return Ua.resolve(this.Gn.slice())},e.prototype.Yn=function(e,t){var a=this,s=new Ln(t,0),n=new Ln(t,Number.POSITIVE_INFINITY),r=[];return this.ql.St([s,n],(function(e){var t=a.Bl(e.kh);r.push(t)})),Ua.resolve(r)},e.prototype.es=function(e,t){var a=this,s=new se(w);return t.forEach((function(e){var t=new Ln(e,0),n=new Ln(e,Number.POSITIVE_INFINITY);a.ql.St([t,n],(function(e){s=s.add(e.kh)}))})),Ua.resolve(this.Ql(s))},e.prototype.as=function(e,t){var a=t.path,s=a.length+1,n=a;C.j(n)||(n=n.child(""));var r=new Ln(new C(n),0),o=new se(w);return this.ql.Dt((function(e){var t=e.key.path;return!!a.D(t)&&(t.length===s&&(o=o.add(e.kh)),!0)}),r),Ua.resolve(this.Ql(o))},e.prototype.Ql=function(e){var t=this,a=[];return e.forEach((function(e){var s=t.Bl(e);null!==s&&a.push(s)})),a},e.prototype.br=function(e,t){var a=this;y(0===this.Wl(t.batchId,"removed")),this.Gn.shift();var s=this.ql;return Ua.forEach(t.mutations,(function(n){var r=new Ln(n.key,t.batchId);return s=s.delete(r),a.dr.Dr(e,n.key)})).next((function(){a.ql=s}))},e.prototype.Sr=function(e){},e.prototype.Nr=function(e,t){var a=new Ln(t,0),s=this.ql.Ct(a);return Ua.resolve(t.isEqual(s&&s.key))},e.prototype.Cr=function(e){return this.Gn.length,Ua.resolve()},e.prototype.Wl=function(e,t){return this.Ul(e)},e.prototype.Ul=function(e){return 0===this.Gn.length?0:e-this.Gn[0].batchId},e.prototype.Bl=function(e){var t=this.Ul(e);return t<0||t>=this.Gn.length?null:this.Gn[t]},e}(),vr=function(){function e(e,t){this.zn=e,this.jl=t,this.docs=new ee(C.P),this.size=0}return e.prototype.xn=function(e,t,a){var s=t.key,n=this.docs.get(s),r=n?n.size:0,o=this.jl(t);return this.docs=this.docs.st(s,{Or:t,size:o,readTime:a}),this.size+=o-r,this.zn.Ar(e,s.path.p())},e.prototype.Mn=function(e){var t=this.docs.get(e);t&&(this.docs=this.docs.remove(e),this.size-=t.size)},e.prototype.Ln=function(e,t){var a=this.docs.get(t);return Ua.resolve(a?a.Or:null)},e.prototype.getEntries=function(e,t){var a=this,s=ie();return t.forEach((function(e){var t=a.docs.get(e);s=s.st(e,t?t.Or:null)})),Ua.resolve(s)},e.prototype.ns=function(e,t,a){for(var s=de(),n=new C(t.path.child("")),r=this.docs.ut(n);r.Tt();){var o=r.wt(),i=o.key,c=o.value,d=c.Or,l=c.readTime;if(!t.path.D(i.path))break;l.o(a)<=0||d instanceof sa&&va(t,d)&&(s=s.st(d.key,d))}return Ua.resolve(s)},e.prototype.Kl=function(e,t){return Ua.forEach(this.docs,(function(e){return t(e)}))},e.prototype.jr=function(t){return new e.Kr(this)},e.prototype.zr=function(e){return Ua.resolve(this.size)},e}();vr.Kr=function(e){function t(t){var a=this;return(a=e.call(this)||this).Hr=t,a}return n.__extends(t,e),t.prototype.Un=function(e){var t=this,a=[];return this.Fn.forEach((function(s,n){n?a.push(t.Hr.xn(e,n,t.readTime)):t.Hr.Mn(s)})),Ua.Cn(a)},t.prototype.qn=function(e,t){return this.Hr.Ln(e,t)},t.prototype.Bn=function(e,t){return this.Hr.getEntries(e,t)},t}(Fa); +/** + * @license + * Copyright 2017 Google LLC + * + * 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. + */ +var Ar=function(){function e(e){this.persistence=e,this.Gl=new P((function(e){return z(e)}),V),this.lastRemoteSnapshotVersion=_.min(),this.highestTargetId=0,this.zl=0,this.Hl=new jn,this.targetCount=0,this.Yl=on.to()}return e.prototype.be=function(e,t){return this.Gl.forEach((function(e,a){return t(a)})),Ua.resolve()},e.prototype.ro=function(e){return Ua.resolve(this.lastRemoteSnapshotVersion)},e.prototype.oo=function(e){return Ua.resolve(this.zl)},e.prototype.no=function(e){return this.highestTargetId=this.Yl.next(),Ua.resolve(this.highestTargetId)},e.prototype.ho=function(e,t,a){return a&&(this.lastRemoteSnapshotVersion=a),t>this.zl&&(this.zl=t),Ua.resolve()},e.prototype.co=function(e){this.Gl.set(e.target,e);var t=e.targetId;t>this.highestTargetId&&(this.Yl=new on(t),this.highestTargetId=t),e.sequenceNumber>this.zl&&(this.zl=e.sequenceNumber)},e.prototype.ao=function(e,t){return this.co(t),this.targetCount+=1,Ua.resolve()},e.prototype.lo=function(e,t){return this.co(t),Ua.resolve()},e.prototype._o=function(e,t){return this.Gl.delete(t.target),this.Hl.Ch(t.targetId),this.targetCount-=1,Ua.resolve()},e.prototype.hr=function(e,t,a){var s=this,n=0,r=[];return this.Gl.forEach((function(o,i){i.sequenceNumber<=t&&null===a.get(i.targetId)&&(s.Gl.delete(o),r.push(s.fo(e,i.targetId)),n++)})),Ua.Cn(r).next((function(){return n}))},e.prototype.do=function(e){return Ua.resolve(this.targetCount)},e.prototype.wo=function(e,t){var a=this.Gl.get(t)||null;return Ua.resolve(a)},e.prototype.To=function(e,t,a){return this.Hl.vh(t,a),Ua.resolve()},e.prototype.mo=function(e,t,a){this.Hl.Dh(t,a);var s=this.persistence.dr,n=[];return s&&t.forEach((function(t){n.push(s.Dr(e,t))})),Ua.Cn(n)},e.prototype.fo=function(e,t){return this.Hl.Ch(t),Ua.resolve()},e.prototype.Ao=function(e,t){var a=this.Hl.Fh(t);return Ua.resolve(a)},e.prototype.Nr=function(e,t){return Ua.resolve(this.Hl.Nr(t))},e}(),wr=function(){function e(e){var t=this;this.Jl={},this.yo=new Va(0),this.po=!1,this.po=!0,this.dr=e(this),this.ko=new Ar(this),this.zn=new Us,this.Kn=new vr(this.zn,(function(e){return t.dr.Xl(e)}))}return e.prototype.start=function(){return Promise.resolve()},e.prototype.th=function(){return this.po=!1,Promise.resolve()},Object.defineProperty(e.prototype,"tr",{get:function(){return this.po},enumerable:!1,configurable:!0}),e.prototype.Bo=function(){},e.prototype.Uo=function(){},e.prototype.uh=function(){return this.zn},e.prototype.oh=function(e){var t=this.Jl[e.$h()];return t||(t=new gr(this.zn,this.dr),this.Jl[e.$h()]=t),t},e.prototype.hh=function(){return this.ko},e.prototype.ah=function(){return this.Kn},e.prototype.runTransaction=function(e,t,a){var s=this;h("MemoryPersistence","Starting transaction:",e);var n=new Sr(this.yo.next());return this.dr.Zl(),a(n).next((function(e){return s.dr.t_(n).next((function(){return e}))})).Sn().then((function(e){return n.jn(),e}))},e.prototype.e_=function(e,t){return Ua.Nn(Object.values(this.Jl).map((function(a){return function(){return a.Nr(e,t)}})))},e}(),Sr=function(e){function t(t){var a=this;return(a=e.call(this)||this).Ro=t,a}return n.__extends(t,e),t}(Ha),Er=function(){function e(e){this.persistence=e,this.n_=new jn,this.s_=null}return e.i_=function(t){return new e(t)},Object.defineProperty(e.prototype,"r_",{get:function(){if(this.s_)return this.s_;throw b()},enumerable:!1,configurable:!0}),e.prototype.Eo=function(e,t,a){return this.n_.Eo(a,t),this.r_.delete(a.toString()),Ua.resolve()},e.prototype.Io=function(e,t,a){return this.n_.Io(a,t),this.r_.add(a.toString()),Ua.resolve()},e.prototype.Dr=function(e,t){return this.r_.add(t.toString()),Ua.resolve()},e.prototype.removeTarget=function(e,t){var a=this;this.n_.Ch(t.targetId).forEach((function(e){return a.r_.add(e.toString())}));var s=this.persistence.hh();return s.Ao(e,t.targetId).next((function(e){e.forEach((function(e){return a.r_.add(e.toString())}))})).next((function(){return s._o(e,t)}))},e.prototype.Zl=function(){this.s_=new Set},e.prototype.t_=function(e){var t=this,a=this.persistence.ah().jr();return Ua.forEach(this.r_,(function(s){var n=C.B(s);return t.o_(e,n).next((function(e){e||a.Mn(n)}))})).next((function(){return t.s_=null,a.apply(e)}))},e.prototype.wh=function(e,t){var a=this;return this.o_(e,t).next((function(e){e?a.r_.delete(t.toString()):a.r_.add(t.toString())}))},e.prototype.Xl=function(e){return 0},e.prototype.o_=function(e,t){var a=this;return Ua.Nn([function(){return Ua.resolve(a.n_.Nr(t))},function(){return a.persistence.hh().Nr(e,t)},function(){return a.persistence.e_(e,t)}])},e}(),Tr=function(){function e(e){this.h_=e.h_,this.a_=e.a_}return e.prototype.wa=function(e){this.c_=e},e.prototype.ua=function(e){this.u_=e},e.prototype.onMessage=function(e){this.l_=e},e.prototype.close=function(){this.a_()},e.prototype.send=function(e){this.h_(e)},e.prototype.__=function(){this.c_()},e.prototype.f_=function(e){this.u_(e)},e.prototype.d_=function(e){this.l_(e)},e}(),kr={BatchGetDocuments:"batchGet",Commit:"commit",RunQuery:"runQuery"},Rr=function(e){function t(t){var a=this;return(a=e.call(this,t)||this).forceLongPolling=t.forceLongPolling,a}return n.__extends(t,e),t.prototype.A_=function(e,t,a,s){return new Promise((function(n,r){var o=new c.XhrIo;o.listenOnce(c.EventType.COMPLETE,(function(){try{switch(o.getLastErrorCode()){case c.ErrorCode.NO_ERROR:var t=o.getResponseJson();h("Connection","XHR received:",JSON.stringify(t)),n(t);break;case c.ErrorCode.TIMEOUT:h("Connection",'RPC "'+e+'" timed out'),r(new L(j.DEADLINE_EXCEEDED,"Request time out"));break;case c.ErrorCode.HTTP_ERROR:var a=o.getStatus();if(h("Connection",'RPC "'+e+'" failed with status:',a,"response text:",o.getResponseText()),a>0){var s=o.getResponseJson().error;if(s&&s.status&&s.message){var i=function(e){var t=e.toLowerCase().replace("_","-");return Object.values(j).indexOf(t)>=0?t:j.UNKNOWN}(s.status);r(new L(i,s.message))}else r(new L(j.UNKNOWN,"Server responded with status "+o.getStatus()))}else r(new L(j.UNAVAILABLE,"Connection failed."));break;default:b()}}finally{h("Connection",'RPC "'+e+'" completed.')}}));var i=JSON.stringify(s);o.send(t,"POST",i,a,15)}))},t.prototype.Ta=function(e,t){var a=[this.T_,"/","google.firestore.v1.Firestore","/",e,"/channel"],s=c.createWebChannelTransport(),n={httpSessionIdParam:"gsessionid",initMessageHeaders:{},messageUrlParams:{database:"projects/"+this.s.projectId+"/databases/"+this.s.database},sendRawJson:!0,supportsCrossDomainXhr:!0,internalChannelParams:{forwardChannelRequestTimeoutMs:6e5},forceLongPolling:this.forceLongPolling};this.I_(n.initMessageHeaders,t),i.isMobileCordova()||i.isReactNative()||i.isElectron()||i.isIE()||i.isUWP()||i.isBrowserExtension()||(n.httpHeadersOverwriteParam="$httpHeaders");var r=a.join("");h("Connection","Creating WebChannel: "+r,n);var o=s.createWebChannel(r,n),d=!1,l=!1,u=new Tr({h_:function(e){l?h("Connection","Not sending because WebChannel is closed:",e):(d||(h("Connection","Opening WebChannel transport."),o.open(),d=!0),h("Connection","WebChannel sending:",e),o.send(e))},a_:function(){return o.close()}}),m=function(e,t){o.listen(e,(function(e){try{t(e)}catch(e){setTimeout((function(){throw e}),0)}}))};return m(c.WebChannel.EventType.OPEN,(function(){l||h("Connection","WebChannel transport opened.")})),m(c.WebChannel.EventType.CLOSE,(function(){l||(l=!0,h("Connection","WebChannel transport closed"),u.f_())})),m(c.WebChannel.EventType.ERROR,(function(e){l||(l=!0,f("Connection","WebChannel transport errored:",e),u.f_(new L(j.UNAVAILABLE,"The operation could not be completed")))})),m(c.WebChannel.EventType.MESSAGE,(function(e){var t;if(!l){var a=e.data[0];y(!!a);var s=a,n=s.error||(null===(t=s[0])||void 0===t?void 0:t.error);if(n){h("Connection","WebChannel received error:",n);var r=n.status,i=function(e){var t=W[e];if(void 0!==t)return $(t)}(r),c=n.message;void 0===i&&(i=j.INTERNAL,c="Unknown error status: "+r+" with message "+n.message),l=!0,u.f_(new L(i,c)),o.close()}else h("Connection","WebChannel received:",a),u.d_(a)}})),setTimeout((function(){u.__()}),0),u},t}(function(){function e(e){this.w_=e,this.s=e.s;var t=e.ssl?"https":"http";this.T_=t+"://"+e.host,this.E_="projects/"+this.s.projectId+"/databases/"+this.s.database+"/documents"}return e.prototype.va=function(e,t,a,s){var n=this.m_(e,t);h("RestConnection","Sending: ",n,a);var r={};return this.I_(r,s),this.A_(e,n,r,a).then((function(e){return h("RestConnection","Received: ",e),e}),(function(t){throw f("RestConnection",e+" failed with error: ",t,"url: ",n,"request:",a),t}))},e.prototype.Sa=function(e,t,a,s){return this.va(e,t,a,s)},e.prototype.I_=function(e,t){if(e["X-Goog-Api-Client"]="gl-js/ fire/7.19.0",e["Content-Type"]="text/plain",t)for(var a in t.Mh)t.Mh.hasOwnProperty(a)&&(e[a]=t.Mh[a])},e.prototype.m_=function(e,t){var a=kr[e];return this.T_+"/v1/"+t+":"+a},e}()),Nr=function(){function e(){var e=this;this.R_=function(){return e.P_()},this.g_=function(){return e.V_()},this.y_=[],this.p_()}return e.prototype.Ka=function(e){this.y_.push(e)},e.prototype.th=function(){window.removeEventListener("online",this.R_),window.removeEventListener("offline",this.g_)},e.prototype.p_=function(){window.addEventListener("online",this.R_),window.addEventListener("offline",this.g_)},e.prototype.P_=function(){h("ConnectivityMonitor","Network connectivity changed: AVAILABLE");for(var e=0,t=this.y_;es)throw new L(j.INVALID_ARGUMENT,"Function "+e+"() requires between "+a+" and "+s+" arguments, but was called with "+eo(t.length,"argument")+".")}function Fr(e,t,a,s){Jr(e,t,$r(a)+" argument",s)}function qr(e,t,a,s){void 0!==s&&Fr(e,t,a,s)}function Hr(e,t,a,s){Jr(e,t,a+" option",s)}function Br(e,t,a,s){void 0!==s&&Hr(e,t,a,s)}function zr(e,t,a,s,n){void 0!==s&&function(e,t,a,s,n){for(var r=[],o=0,i=n;o20&&(e=e.substring(0,20)+"..."),JSON.stringify(e);if("number"==typeof e||"boolean"==typeof e)return""+e;if("object"==typeof e){if(e instanceof Array)return"an array";var t=function(e){if(e.constructor){var t=/function\s+([^\s(]+)\s*\(/.exec(e.constructor.toString());if(t&&t.length>1)return t[1]}return null}(e);return t?"a custom "+t+" object":"an object"}return"function"==typeof e?"a function":b()}function Kr(e,t,a){if(void 0===a)throw new L(j.INVALID_ARGUMENT,"Function "+e+"() requires a valid "+$r(t)+" argument, but it was undefined.")}function Yr(e,t,a){N(t,(function(t,s){if(a.indexOf(t)<0)throw new L(j.INVALID_ARGUMENT,"Unknown option '"+t+"' passed to function "+e+"(). Available options: "+a.join(", "))}))}function Xr(e,t,a,s){var n=Wr(s);return new L(j.INVALID_ARGUMENT,"Function "+e+"() requires its "+$r(a)+" argument to be a "+t+", but it was: "+n)}function Qr(e,t,a){if(a<=0)throw new L(j.INVALID_ARGUMENT,"Function "+e+"() requires its "+$r(t)+" argument to be a positive number, but it was: "+a+".")}function $r(e){switch(e){case 1:return"first";case 2:return"second";case 3:return"third";default:return e+"th"}}function eo(e,t){return e+" "+t+(1===e?"":"s")} +/** + * @license + * Copyright 2017 Google LLC + * + * 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. + */function to(){if("undefined"==typeof Uint8Array)throw new L(j.UNIMPLEMENTED,"Uint8Arrays are not available in this environment.")}function ao(){if("undefined"==typeof atob)throw new L(j.UNIMPLEMENTED,"Blobs are unavailable in Firestore in this environment.")}var so=function(){function e(e){ao(),this.W_=e}return e.fromBase64String=function(t){Zr("Blob.fromBase64String",arguments,1),Fr("Blob.fromBase64String","string",1,t),ao();try{return new e(G.fromBase64String(t))}catch(t){throw new L(j.INVALID_ARGUMENT,"Failed to construct Blob from Base64 string: "+t)}},e.fromUint8Array=function(t){if(Zr("Blob.fromUint8Array",arguments,1),to(),!(t instanceof Uint8Array))throw Xr("Blob.fromUint8Array","Uint8Array",1,t);return new e(G.fromUint8Array(t))},e.prototype.toBase64=function(){return Zr("Blob.toBase64",arguments,0),ao(),this.W_.toBase64()},e.prototype.toUint8Array=function(){return Zr("Blob.toUint8Array",arguments,0),to(),this.W_.toUint8Array()},e.prototype.toString=function(){return"Blob(base64: "+this.toBase64()+")"},e.prototype.isEqual=function(e){return this.W_.isEqual(e.W_)},e}(),no=function(e){!function(e,t,a,s){if(!(t instanceof Array)||t.length<1)throw new L(j.INVALID_ARGUMENT,"Function FieldPath() requires its fieldNames argument to be an array with at least "+eo(1,"element")+".")}(0,e);for(var t=0;t90)throw new L(j.INVALID_ARGUMENT,"Latitude must be a number between -90 and 90, but was: "+e);if(!isFinite(t)||t<-180||t>180)throw new L(j.INVALID_ARGUMENT,"Longitude must be a number between -180 and 180, but was: "+t);this.ef=e,this.nf=t}return Object.defineProperty(e.prototype,"latitude",{get:function(){return this.ef},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"longitude",{get:function(){return this.nf},enumerable:!1,configurable:!0}),e.prototype.isEqual=function(e){return this.ef===e.ef&&this.nf===e.nf},e.prototype.toJSON=function(){return{latitude:this.ef,longitude:this.nf}},e.prototype.T=function(e){return w(this.ef,e.ef)||w(this.nf,e.nf)},e}(),go=/^__.*__$/,vo=function(e,t,a){this.sf=e,this.if=t,this.rf=a},Ao=function(){function e(e,t,a){this.data=e,this.qe=t,this.fieldTransforms=a}return e.prototype.hf=function(e,t){var a=[];return null!==this.qe?a.push(new Jt(e,this.data,this.qe,t)):a.push(new Vt(e,this.data,t)),this.fieldTransforms.length>0&&a.push(new Wt(e,this.fieldTransforms)),a},e}(),wo=function(){function e(e,t,a){this.data=e,this.qe=t,this.fieldTransforms=a}return e.prototype.hf=function(e,t){var a=[new Jt(e,this.data,this.qe,t)];return this.fieldTransforms.length>0&&a.push(new Wt(e,this.fieldTransforms)),a},e}();function So(e){switch(e){case 0:case 2:case 1:return!0;case 3:case 4:return!1;default:throw b()}}var Eo=function(){function e(e,t,a,s,n,r){this.settings=e,this.s=t,this.serializer=a,this.ignoreUndefinedProperties=s,void 0===n&&this.af(),this.fieldTransforms=n||[],this.qe=r||[]}return Object.defineProperty(e.prototype,"path",{get:function(){return this.settings.path},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"H_",{get:function(){return this.settings.H_},enumerable:!1,configurable:!0}),e.prototype.cf=function(t){return new e(Object.assign(Object.assign({},this.settings),t),this.s,this.serializer,this.ignoreUndefinedProperties,this.fieldTransforms,this.qe)},e.prototype.uf=function(e){var t,a=null===(t=this.path)||void 0===t?void 0:t.child(e),s=this.cf({path:a,X_:!1});return s.lf(e),s},e.prototype._f=function(e){var t,a=null===(t=this.path)||void 0===t?void 0:t.child(e),s=this.cf({path:a,X_:!1});return s.af(),s},e.prototype.ff=function(e){return this.cf({path:void 0,X_:!0})},e.prototype.Y_=function(e){return Io(e,this.settings.methodName,this.settings.df||!1,this.path,this.settings.J_)},e.prototype.contains=function(e){return void 0!==this.qe.find((function(t){return e.D(t)}))||void 0!==this.fieldTransforms.find((function(t){return e.D(t.field)}))},e.prototype.af=function(){if(this.path)for(var e=0;e=0;--h)if(!Oo(l,i[h])){var m=i[h],f=c[h],p=o._f(m);if(f instanceof io&&f.K_ instanceof co)l.push(m);else{var b=Po(f,p);null!=b&&(l.push(m),u.set(m,b))}}var y=new Dt(l);return new wo(u.ze(),y,o.fieldTransforms)}function xo(e,t,a,s){return void 0===s&&(s=!1),Po(a,e.wf(s?4:3,t))}function Po(e,t){if(Lo(e))return Mo("Unsupported field value:",t,e),jo(e,t);if(e instanceof io)return function(e,t){if(!So(t.H_))throw t.Y_(e.G_+"() can only be used with update() and set()");if(!t.path)throw t.Y_(e.G_+"() is not currently supported inside arrays");var a=e.z_(t);a&&t.fieldTransforms.push(a)}(e,t),null;if(t.path&&t.qe.push(t.path),e instanceof Array){if(t.settings.X_&&4!==t.H_)throw t.Y_("Nested arrays are not supported");return function(e,t){for(var a=[],s=0,n=0,r=e;n0&&t.qe.push(t.path):N(e,(function(e,s){var n=Po(s,t.uf(e));null!=n&&(a[e]=n)})),{mapValue:{fields:a}}}function Lo(e){return!("object"!=typeof e||null===e||e instanceof Array||e instanceof Date||e instanceof M||e instanceof yo||e instanceof so||e instanceof vo||e instanceof io)}function Mo(e,t,a){if(!Lo(a)||!Gr(a)){var s=Wr(a);throw"an object"===s?t.Y_(e+" a custom object"):t.Y_(e+" "+s)}}function _o(e,t,a){if(t instanceof no)return t.j_;if("string"==typeof t)return Do(e,t);throw Io("Field path arguments must be of type string or FieldPath.",e,!1,void 0,a)}function Do(e,t,a){try{return function(e){if(e.search(oo)>=0)throw new L(j.INVALID_ARGUMENT,"Invalid field path ("+e+"). Paths must not contain '~', '*', '/', '[', or ']'");try{return new(ro.bind.apply(ro,n.__spreadArrays([void 0],e.split("."))))}catch(t){throw new L(j.INVALID_ARGUMENT,"Invalid field path ("+e+"). Paths must not be empty, begin with '.', end with '.', or contain '..'")}}(t).j_}catch(t){throw Io((s=t)instanceof Error?s.message:s.toString(),e,!1,void 0,a)}var s}function Io(e,t,a,s,n){var r=s&&!s._(),o=void 0!==n,i="Function "+t+"() called with invalid data";a&&(i+=" (via `toFirestore()`)");var c="";return(r||o)&&(c+=" (found",r&&(c+=" in field "+s),o&&(c+=" in document "+n),c+=")"),new L(j.INVALID_ARGUMENT,(i+=". ")+e+c)}function Oo(e,t){return e.some((function(e){return e.isEqual(t)}))} +/** + * @license + * Copyright 2017 Google LLC + * + * 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. + */var Zo=function(){function e(e){this.qa=e,this.Tf=new Map,this.mutations=[],this.Ef=!1,this.mf=null,this.If=new Set}return e.prototype.Af=function(e){return n.__awaiter(this,void 0,void 0,(function(){var t,a=this;return n.__generator(this,(function(s){switch(s.label){case 0:if(this.Rf(),this.mutations.length>0)throw new L(j.INVALID_ARGUMENT,"Firestore transactions require all reads to be executed before all writes.");return[4,function(e,t){return n.__awaiter(this,void 0,void 0,(function(){var a,s,r,o,i,c;return n.__generator(this,(function(n){switch(n.label){case 0:return a=g(e),s=it(a.serializer)+"/documents",r={documents:t.map((function(e){return st(a.serializer,e)}))},[4,a.Sa("BatchGetDocuments",s,r)];case 1:return o=n.sent(),i=new Map,o.forEach((function(e){var t=function(e,t){return"found"in t?function(e,t){y(!!t.found),t.found.name,t.found.updateTime;var a=nt(e,t.found.name),s=et(t.found.updateTime),n=new $t({mapValue:{fields:t.found.fields}});return new sa(a,s,n,{})}(e,t):"missing"in t?function(e,t){y(!!t.missing),y(!!t.readTime);var a=nt(e,t.missing),s=et(t.readTime);return new na(a,s)}(e,t):b()}(a.serializer,e);i.set(t.key.toString(),t)})),c=[],[2,(t.forEach((function(e){var t=i.get(e.toString());y(!!t),c.push(t)})),c)]}}))}))}(this.qa,e)];case 1:return[2,((t=s.sent()).forEach((function(e){e instanceof na||e instanceof sa?a.Pf(e):b()})),t)]}}))}))},e.prototype.set=function(e,t){this.write(t.hf(e,this.Qe(e))),this.If.add(e.toString())},e.prototype.update=function(e,t){try{this.write(t.hf(e,this.gf(e)))}catch(e){this.mf=e}this.If.add(e.toString())},e.prototype.delete=function(e){this.write([new Xt(e,this.Qe(e))]),this.If.add(e.toString())},e.prototype.commit=function(){return n.__awaiter(this,void 0,void 0,(function(){var e,t=this;return n.__generator(this,(function(a){switch(a.label){case 0:if(this.Rf(),this.mf)throw this.mf;return e=this.Tf,this.mutations.forEach((function(t){e.delete(t.key.toString())})),e.forEach((function(e,a){var s=C.B(a);t.mutations.push(new Qt(s,t.Qe(s)))})),[4,function(e,t){return n.__awaiter(this,void 0,void 0,(function(){var a,s,r;return n.__generator(this,(function(n){switch(n.label){case 0:return a=g(e),s=it(a.serializer)+"/documents",r={writes:t.map((function(e){return lt(a.serializer,e)}))},[4,a.va("Commit",s,r)];case 1:return n.sent(),[2]}}))}))}(this.qa,this.mutations)];case 1:return a.sent(),this.Ef=!0,[2]}}))}))},e.prototype.Pf=function(e){var t;if(e instanceof sa)t=e.version;else{if(!(e instanceof na))throw b();t=_.min()}var a=this.Tf.get(e.key.toString());if(a){if(!t.isEqual(a))throw new L(j.ABORTED,"Document version changed between two reads.")}else this.Tf.set(e.key.toString(),t)},e.prototype.Qe=function(e){var t=this.Tf.get(e.toString());return!this.If.has(e.toString())&&t?Zt.updateTime(t):Zt.We()},e.prototype.gf=function(e){var t=this.Tf.get(e.toString());if(!this.If.has(e.toString())&&t){if(t.isEqual(_.min()))throw new L(j.INVALID_ARGUMENT,"Can't update a document that doesn't exist.");return Zt.updateTime(t)}return Zt.exists(!0)},e.prototype.write=function(e){this.Rf(),this.mutations=this.mutations.concat(e)},e.prototype.Rf=function(){},e}(),Co=function(){function e(e,t,a,s){this.ei=e,this.qa=t,this.updateFunction=a,this.ii=s,this.Vf=5,this.Ti=new Ga(this.ei,"transaction_retry")}return e.prototype.run=function(){this.yf()},e.prototype.yf=function(){var e=this;this.Ti.bs((function(){return n.__awaiter(e,void 0,void 0,(function(){var e,t,a=this;return n.__generator(this,(function(s){return e=new Zo(this.qa),(t=this.pf(e))&&t.then((function(t){a.ei.ai((function(){return e.commit().then((function(){a.ii.resolve(t)})).catch((function(e){a.bf(e)}))}))})).catch((function(e){a.bf(e)})),[2]}))}))}))},e.prototype.pf=function(e){try{var t=this.updateFunction(e);return!U(t)&&t.catch&&t.then?t:(this.ii.reject(Error("Transaction callback must return a Promise")),null)}catch(e){return this.ii.reject(e),null}},e.prototype.bf=function(e){var t=this;this.Vf>0&&this.vf(e)?(this.Vf-=1,this.ei.ai((function(){return t.yf(),Promise.resolve()}))):this.ii.reject(e)},e.prototype.vf=function(e){if("FirebaseError"===e.name){var t=e.code;return"aborted"===t||"failed-precondition"===t||!Q(t)}return!1},e}(),Uo=function(){function e(e,t){this.credentials=e,this.ei=t,this.clientId=A.t(),this.Sf=new Ja}return e.prototype.start=function(e,t,a,s){var n=this;this.Df(),this.w_=e;var r=new Ja,o=!1;return this.credentials.Bh((function(e){if(!o)return o=!0,h("FirestoreClient","Initializing. user=",e.uid),n.Cf(t,a,s,e,r).then(n.Sf.resolve,n.Sf.reject);n.ei.gi((function(){return n.Bu.vc(e)}))})),this.ei.ai((function(){return n.Sf.promise})),r.promise},e.prototype.enableNetwork=function(){var e=this;return this.Df(),this.ei.enqueue((function(){return e.persistence.Uo(!0),e.Bu.enableNetwork()}))},e.prototype.Cf=function(e,t,a,s,r){return n.__awaiter(this,void 0,void 0,(function(){var o,i,c=this;return n.__generator(this,(function(d){switch(d.label){case 0:return d.trys.push([0,3,,4]),o={ei:this.ei,w_:this.w_,clientId:this.clientId,credentials:this.credentials,N_:s,Qu:100,k_:a},[4,e.initialize(o)];case 1:return d.sent(),[4,t.initialize(e,o)];case 2:return d.sent(),this.persistence=e.persistence,this.Uu=e.Uu,this.La=e.La,this.S_=e.S_,this.qa=t.qa,this.Bu=t.Bu,this.fc=t.fc,this.Nf=t.q_,this.persistence.Bo((function(){return n.__awaiter(c,void 0,void 0,(function(){return n.__generator(this,(function(e){switch(e.label){case 0:return[4,this.terminate()];case 1:return e.sent(),[2]}}))}))})),r.resolve(),[3,4];case 3:if(i=d.sent(),r.reject(i),!this.Ff(i))throw i;return[2,(console.warn("Error enabling offline persistence. Falling back to persistence disabled: "+i),this.Cf(new Lr,new _r,{F_:!1},s,r))];case 4:return[2]}}))}))},e.prototype.Ff=function(e){return"FirebaseError"===e.name?e.code===j.FAILED_PRECONDITION||e.code===j.UNIMPLEMENTED:!("undefined"!=typeof DOMException&&e instanceof DOMException)||22===e.code||20===e.code||11===e.code},e.prototype.Df=function(){if(this.ei.mi)throw new L(j.FAILED_PRECONDITION,"The client has already been terminated.")},e.prototype.disableNetwork=function(){var e=this;return this.Df(),this.ei.enqueue((function(){return e.persistence.Uo(!1),e.Bu.disableNetwork()}))},e.prototype.terminate=function(){var e=this;this.ei.Pi();var t=new Ja;return this.ei.Ii((function(){return n.__awaiter(e,void 0,void 0,(function(){var e,a;return n.__generator(this,(function(s){switch(s.label){case 0:return s.trys.push([0,4,,5]),this.S_&&this.S_.stop(),[4,this.Bu.th()];case 1:return s.sent(),[4,this.Uu.th()];case 2:return s.sent(),[4,this.persistence.th()];case 3:return s.sent(),this.credentials.Uh(),t.resolve(),[3,5];case 4:return e=s.sent(),a=is(e,"Failed to shutdown persistence"),t.reject(a),[3,5];case 5:return[2]}}))}))})),t.promise},e.prototype.waitForPendingWrites=function(){var e=this;this.Df();var t=new Ja;return this.ei.ai((function(){return e.fc._l(t)})),t.promise},e.prototype.listen=function(e,t,a){var s=this;this.Df();var n=new Ir(a),r=new br(e,n,t);return this.ei.ai((function(){return s.Nf.listen(r)})),function(){n.Q_(),s.ei.ai((function(){return s.Nf.lc(r)}))}},e.prototype.kf=function(e){return n.__awaiter(this,void 0,void 0,(function(){return n.__generator(this,(function(t){switch(t.label){case 0:return this.Df(),[4,this.Sf.promise];case 1:return[2,(t.sent(),function(e,t,a){return n.__awaiter(this,void 0,void 0,(function(){var s,r=this;return n.__generator(this,(function(o){switch(o.label){case 0:return s=new Ja,[4,e.enqueue((function(){return n.__awaiter(r,void 0,void 0,(function(){var e,r,o;return n.__generator(this,(function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,function(e,t){var a=g(e);return a.persistence.runTransaction("read document","readonly",(function(e){return a.Rh.Hn(e,t)}))}(t,a)];case 1:return(e=n.sent())instanceof sa?s.resolve(e):e instanceof na?s.resolve(null):s.reject(new L(j.UNAVAILABLE,"Failed to get document from cache. (However, this document may exist on the server. Run again without setting 'source' in the GetOptions to attempt to retrieve the document from the server.)")),[3,3];case 2:return r=n.sent(),o=is(r,"Failed to get document '"+a+" from cache"),s.reject(o),[3,3];case 3:return[2]}}))}))}))];case 1:return[2,(o.sent(),s.promise)]}}))}))}(this.ei,this.La,e))]}}))}))},e.prototype.$f=function(e,t){return n.__awaiter(this,void 0,void 0,(function(){return n.__generator(this,(function(a){switch(a.label){case 0:return this.Df(),[4,this.Sf.promise];case 1:return[2,(a.sent(),function(e,t,a,s){var n=new Ja,r=Fo(e,t,da(a.path),{includeMetadataChanges:!0,$l:!0},{next:function(e){r();var t=e.docs.has(a);!t&&e.fromCache?n.reject(new L(j.UNAVAILABLE,"Failed to get document because the client is offline.")):t&&e.fromCache&&s&&"server"===s.source?n.reject(new L(j.UNAVAILABLE,'Failed to get document from server. (However, this document does exist in the local cache. Run again without setting source to "server" to retrieve the cached document.)')):n.resolve(e)},error:function(e){return n.reject(e)}});return n.promise}(this.ei,this.Nf,e,t))]}}))}))},e.prototype.xf=function(e){return n.__awaiter(this,void 0,void 0,(function(){return n.__generator(this,(function(t){switch(t.label){case 0:return this.Df(),[4,this.Sf.promise];case 1:return[2,(t.sent(),function(e,t,a){return n.__awaiter(this,void 0,void 0,(function(){var s,r=this;return n.__generator(this,(function(o){switch(o.label){case 0:return s=new Ja,[4,e.enqueue((function(){return n.__awaiter(r,void 0,void 0,(function(){var e,r,o,i,c,d;return n.__generator(this,(function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,Nn(t,a,!0)];case 1:return e=n.sent(),r=new ar(a,e.gh),o=r.Su(e.documents),i=r.Un(o,!1),s.resolve(i.snapshot),[3,3];case 2:return c=n.sent(),d=is(c,"Failed to execute query '"+a+" against cache"),s.reject(d),[3,3];case 3:return[2]}}))}))}))];case 1:return[2,(o.sent(),s.promise)]}}))}))}(this.ei,this.La,e))]}}))}))},e.prototype.Of=function(e,t){return n.__awaiter(this,void 0,void 0,(function(){return n.__generator(this,(function(a){switch(a.label){case 0:return this.Df(),[4,this.Sf.promise];case 1:return[2,(a.sent(),function(e,t,a,s){var n=new Ja,r=Fo(e,t,a,{includeMetadataChanges:!0,$l:!0},{next:function(e){r(),e.fromCache&&s&&"server"===s.source?n.reject(new L(j.UNAVAILABLE,'Failed to get documents from server. (However, these documents may exist in the local cache. Run again without setting source to "server" to retrieve the cached documents.)')):n.resolve(e)},error:function(e){return n.reject(e)}});return n.promise}(this.ei,this.Nf,e,t))]}}))}))},e.prototype.write=function(e){var t=this;this.Df();var a=new Ja;return this.ei.ai((function(){return t.fc.write(e,a)})),a.promise},e.prototype.s=function(){return this.w_.s},e.prototype.bl=function(e){var t=this;this.Df();var a=new Ir(e);return this.ei.ai((function(){return n.__awaiter(t,void 0,void 0,(function(){return n.__generator(this,(function(e){return[2,this.Nf.bl(a)]}))}))})),function(){a.Q_(),t.ei.ai((function(){return n.__awaiter(t,void 0,void 0,(function(){return n.__generator(this,(function(e){return[2,this.Nf.vl(a)]}))}))}))}},Object.defineProperty(e.prototype,"Mf",{get:function(){return this.ei.mi},enumerable:!1,configurable:!0}),e.prototype.transaction=function(e){var t=this;this.Df();var a=new Ja;return this.ei.ai((function(){return new Co(t.ei,t.qa,e,a).run(),Promise.resolve()})),a.promise},e}(); +/** + * @license + * Copyright 2019 Google LLC + * + * 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. + */function Fo(e,t,a,s,n){var r=new Ir(n),o=new br(a,r,s);return e.ai((function(){return t.listen(o)})),function(){r.Q_(),e.ai((function(){return t.lc(o)}))}}var qo=function(){function e(e,t,a,s){this.s=e,this.timestampsInSnapshots=t,this.Lf=a,this.qf=s}return e.prototype.Bf=function(e){switch(je(e)){case 0:return null;case 1:return e.booleanValue;case 2:return Ze(e.integerValue||e.doubleValue);case 3:return this.Uf(e.timestampValue);case 4:return this.Qf(e);case 5:return e.stringValue;case 6:return new so(Ce(e.bytesValue));case 7:return this.Wf(e.referenceValue);case 8:return this.jf(e.geoPointValue);case 9:return this.Kf(e.arrayValue);case 10:return this.Gf(e.mapValue);default:throw b()}},e.prototype.Gf=function(e){var t=this,a={};return N(e.fields||{},(function(e,s){a[e]=t.Bf(s)})),a},e.prototype.jf=function(e){return new yo(Ze(e.latitude),Ze(e.longitude))},e.prototype.Kf=function(e){var t=this;return(e.values||[]).map((function(e){return t.Bf(e)}))},e.prototype.Qf=function(e){switch(this.Lf){case"previous":var t=function e(t){var a=t.mapValue.fields.__previous_value__;return Ne(a)?e(a):a}(e);return null==t?null:this.Bf(t);case"estimate":return this.Uf(xe(e));default:return null}},e.prototype.Uf=function(e){var t=Oe(e),a=new M(t.seconds,t.nanos);return this.timestampsInSnapshots?a:a.toDate()},e.prototype.Wf=function(e){var t=I.k(e);y(wt(t));var a=new k(t.get(1),t.get(3)),s=new C(t.V(5));return a.isEqual(this.s)||m("Document "+s+" contains a document reference within a different database ("+a.projectId+"/"+a.database+") which is not supported. It will be treated as a reference in the current database ("+this.s.projectId+"/"+this.s.database+") instead."),this.qf(s)},e}(),Ho=us.ji,Bo=function(){function e(e){var t,a,s,n;if(void 0===e.host){if(void 0!==e.ssl)throw new L(j.INVALID_ARGUMENT,"Can't provide ssl option if host option is not set");this.host="firestore.googleapis.com",this.ssl=!0}else Hr("settings","non-empty string","host",e.host),this.host=e.host,Br("settings","boolean","ssl",e.ssl),this.ssl=null===(t=e.ssl)||void 0===t||t;if(Yr("settings",e,["host","ssl","credentials","timestampsInSnapshots","cacheSizeBytes","experimentalForceLongPolling","ignoreUndefinedProperties"]),Br("settings","object","credentials",e.credentials),this.credentials=e.credentials,Br("settings","boolean","timestampsInSnapshots",e.timestampsInSnapshots),Br("settings","boolean","ignoreUndefinedProperties",e.ignoreUndefinedProperties),!0===e.timestampsInSnapshots?m("The setting 'timestampsInSnapshots: true' is no longer required and should be removed."):!1===e.timestampsInSnapshots&&m("Support for 'timestampsInSnapshots: false' will be removed soon. You must update your code to handle Timestamp objects."),this.timestampsInSnapshots=null===(a=e.timestampsInSnapshots)||void 0===a||a,this.ignoreUndefinedProperties=null!==(s=e.ignoreUndefinedProperties)&&void 0!==s&&s,Br("settings","number","cacheSizeBytes",e.cacheSizeBytes),void 0===e.cacheSizeBytes)this.cacheSizeBytes=us.Gi;else{if(e.cacheSizeBytes!==Ho&&e.cacheSizeBytes=0)throw new L(j.INVALID_ARGUMENT,"Invalid collection ID '"+e+"' passed to function Firestore.collectionGroup(). Collection IDs must not contain '/'.");return this.Xf(),new si(function(e){return new ia(I.$(),e)}(e),this,null)},e.prototype.runTransaction=function(e){var t=this;return Zr("Firestore.runTransaction",arguments,1),Fr("Firestore.runTransaction","function",1,e),this.Xf().transaction((function(a){return e(new Vo(t,a))}))},e.prototype.batch=function(){return this.Xf(),new Jo(this)},Object.defineProperty(e,"logLevel",{get:function(){switch(u()){case o.LogLevel.DEBUG:return"debug";case o.LogLevel.ERROR:return"error";case o.LogLevel.SILENT:return"silent";case o.LogLevel.WARN:return"warn";case o.LogLevel.INFO:return"info";case o.LogLevel.VERBOSE:return"verbose";default:return"error"}},enumerable:!1,configurable:!0}),e.setLogLevel=function(e){var t;Zr("Firestore.setLogLevel",arguments,1),Vr("setLogLevel",["debug","error","silent","warn","info","verbose"],1,e),t=e,l.setLogLevel(t)},e.prototype.fd=function(){return this.sd.timestampsInSnapshots},e}(),Vo=function(){function e(e,t){this.dd=e,this.wd=t}return e.prototype.get=function(e){var t=this;Zr("Transaction.get",arguments,1);var a=di("Transaction.get",e,this.dd);return this.wd.Af([a.if]).then((function(e){if(!e||1!==e.length)return b();var s=e[0];if(s instanceof na)return new Ko(t.dd,a.if,null,!1,!1,a.rf);if(s instanceof sa)return new Ko(t.dd,a.if,s,!1,!1,a.rf);throw b()}))},e.prototype.set=function(e,t,a){Ur("Transaction.set",arguments,2,3);var s=di("Transaction.set",e,this.dd);a=oi("Transaction.set",a);var n=ui(s.rf,t,a),r=ko(this.dd.rd,"Transaction.set",s.if,n,null!==s.rf,a);return this.wd.set(s.if,r),this},e.prototype.update=function(e,t,a){for(var s,n,r=[],o=3;o0?this.dd.Xf().write(this.Td):Promise.resolve()},e.prototype.md=function(){if(this.Ed)throw new L(j.FAILED_PRECONDITION,"A write batch can no longer be used after commit() has been called.")},e}(),Go=function(e){function t(t,a,s){var n=this;return(n=e.call(this,a.sf,t,s)||this).if=t,n.firestore=a,n.rf=s,n.Zf=n.firestore.Xf(),n}return n.__extends(t,e),t._d=function(e,a,s){if(e.length%2!=0)throw new L(j.INVALID_ARGUMENT,"Invalid document reference. Document references must have an even number of segments, but "+e.F()+" has "+e.length);return new t(new C(e),a,s)},Object.defineProperty(t.prototype,"id",{get:function(){return this.if.path.S()},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"parent",{get:function(){return new ri(this.if.path.p(),this.firestore,this.rf)},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"path",{get:function(){return this.if.path.F()},enumerable:!1,configurable:!0}),t.prototype.collection=function(e){if(Zr("DocumentReference.collection",arguments,1),Fr("DocumentReference.collection","non-empty string",1,e),!e)throw new L(j.INVALID_ARGUMENT,"Must provide a non-empty collection name to collection()");var t=I.k(e);return new ri(this.if.path.child(t),this.firestore,null)},t.prototype.isEqual=function(e){if(!(e instanceof t))throw Xr("isEqual","DocumentReference",1,e);return this.firestore===e.firestore&&this.if.isEqual(e.if)&&this.rf===e.rf},t.prototype.set=function(e,t){Ur("DocumentReference.set",arguments,1,2),t=oi("DocumentReference.set",t);var a=ui(this.rf,e,t),s=ko(this.firestore.rd,"DocumentReference.set",this.if,a,null!==this.rf,t);return this.Zf.write(s.hf(this.if,Zt.We()))},t.prototype.update=function(e,t){for(var a,s=[],n=2;n, or >=) must be on the same field. But you have inequality filters on '"+a.toString()+"' and '"+t.field.toString()+"'");var s=e.un();null!==s&&ti(e,t.field,s)}var n=e.fn(function(e){switch(e){case"!=":return["!=","not-in"];case"array-contains":return["array-contains","array-contains-any","not-in"];case"in":return["array-contains-any","in","not-in"];case"array-contains-any":return["array-contains","array-contains-any","in","not-in"];case"not-in":return["array-contains","array-contains-any","in","not-in","!="];default:return[]}}(t.op));if(null!==n)throw n===t.op?new L(j.INVALID_ARGUMENT,"Invalid query. You cannot use more than one '"+t.op.toString()+"' filter."):new L(j.INVALID_ARGUMENT,"Invalid query. You cannot use '"+t.op.toString()+"' filters with '"+n.toString()+"' filters.")}(e,h),h}function Qo(e,t,a){if(null!==e.startAt)throw new L(j.INVALID_ARGUMENT,"Invalid query. You must not call startAt() or startAfter() before calling orderBy().");if(null!==e.endAt)throw new L(j.INVALID_ARGUMENT,"Invalid query. You must not call endAt() or endBefore() before calling orderBy().");var s=new Da(t,a);return function(e,t){if(null===e.un()){var a=e.ln();null!==a&&ti(e,a,t.field)}}(e,s),s}function $o(e,t,a){if("string"==typeof a){if(""===a)throw new L(j.INVALID_ARGUMENT,"Invalid query. When querying with FieldPath.documentId(), you must provide a valid document ID, but it was an empty string.");if(!la(t)&&-1!==a.indexOf("/"))throw new L(j.INVALID_ARGUMENT,"Invalid query. When querying a collection by FieldPath.documentId(), you must provide a plain document ID, but '"+a+"' contains a '/' character.");var s=t.path.child(I.k(a));if(!C.j(s))throw new L(j.INVALID_ARGUMENT,"Invalid query. When querying a collection group by FieldPath.documentId(), the value provided must result in a valid document path, but '"+s+"' is not because it has an odd number of segments ("+s.length+").");return Ue(e,new C(s))}if(a instanceof vo)return Ue(e,a.if);throw new L(j.INVALID_ARGUMENT,"Invalid query. When querying with FieldPath.documentId(), you must provide a valid string or a DocumentReference, but it was: "+Wr(a)+".")}function ei(e,t){if(!Array.isArray(e)||0===e.length)throw new L(j.INVALID_ARGUMENT,"Invalid Query. A non-empty array is required for '"+t.toString()+"' filters.");if(e.length>10)throw new L(j.INVALID_ARGUMENT,"Invalid Query. '"+t.toString()+"' filters support a maximum of 10 elements in the value array.");if("in"===t||"array-contains-any"===t){if(e.indexOf(null)>=0)throw new L(j.INVALID_ARGUMENT,"Invalid Query. '"+t.toString()+"' filters cannot contain 'null' in the value array.");if(e.filter((function(e){return Number.isNaN(e)})).length>0)throw new L(j.INVALID_ARGUMENT,"Invalid Query. '"+t.toString()+"' filters cannot contain 'NaN' in the value array.")}}function ti(e,t,a){if(!a.isEqual(t))throw new L(j.INVALID_ARGUMENT,"Invalid query. You have a where filter with an inequality (<, <=, >, or >=) on field '"+t.toString()+"' and so you must also use '"+t.toString()+"' as your first orderBy(), but your first orderBy() is on field '"+a.toString()+"' instead.")}function ai(e){if(e.cn()&&0===e.en.length)throw new L(j.UNIMPLEMENTED,"limitToLast() queries require specifying at least one orderBy() clause")}var si=function(){function e(e,t,a){this.gd=e,this.firestore=t,this.rf=a}return e.prototype.where=function(t,a,s){var n;Zr("Query.where",arguments,3),Kr("Query.where",3,s),n="not-in"===a||"!="===a?a:Vr("Query.where",["<","<=","==",">=",">","array-contains","in","array-contains-any"],2,a);var r=_o("Query.where",t),o=Xo(this.gd,"Query.where",this.firestore.rd,this.firestore.sf,r,n,s);return new e(function(e,t){var a=e.filters.concat([t]);return new ia(e.path,e.collectionGroup,e.en.slice(),a,e.limit,e.nn,e.startAt,e.endAt)}(this.gd,o),this.firestore,this.rf)},e.prototype.orderBy=function(t,a){var s;if(Ur("Query.orderBy",arguments,1,2),qr("Query.orderBy","non-empty string",2,a),void 0===a||"asc"===a)s="asc";else{if("desc"!==a)throw new L(j.INVALID_ARGUMENT,"Function Query.orderBy() has unknown direction '"+a+"', expected 'asc' or 'desc'.");s="desc"}var n=_o("Query.orderBy",t),r=Qo(this.gd,n,s);return new e(function(e,t){var a=e.en.concat([t]);return new ia(e.path,e.collectionGroup,a,e.filters.slice(),e.limit,e.nn,e.startAt,e.endAt)}(this.gd,r),this.firestore,this.rf)},e.prototype.limit=function(t){return Zr("Query.limit",arguments,1),Fr("Query.limit","number",1,t),Qr("Query.limit",1,t),new e(ma(this.gd,t,"F"),this.firestore,this.rf)},e.prototype.limitToLast=function(t){return Zr("Query.limitToLast",arguments,1),Fr("Query.limitToLast","number",1,t),Qr("Query.limitToLast",1,t),new e(ma(this.gd,t,"L"),this.firestore,this.rf)},e.prototype.startAt=function(t){for(var a=[],s=1;so.length)throw new L(j.INVALID_ARGUMENT,"Too many arguments provided to "+s+"(). The number of arguments must be less than or equal to the number of orderBy() clauses");for(var i=[],c=0;c=e.length&&(e=void 0),{value:e&&e[s++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}var r,o="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},i=i||{},c=o||self;function d(){}function l(e){var t=typeof e;return"object"!=t?t:e?Array.isArray(e)?"array":t:"null"}function u(e){var t=l(e);return"array"==t||"object"==t&&"number"==typeof e.length}function h(e){var t=typeof e;return"object"==t&&null!=e||"function"==t}var m="closure_uid_"+(1e9*Math.random()>>>0),f=0;function p(e,t,a){return e.call.apply(e.bind,arguments)}function b(e,t,a){if(!e)throw Error();if(2t?1:0}e:{var L=c.navigator;if(L){var M=L.userAgent;if(M){N=M;break e}}N=""}function _(e,t,a){for(var s in e)t.call(a,e[s],s,e)}function D(e){var t={};for(var a in e)t[a]=e[a];return t}var I="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" ");function O(e,t){for(var a,s,n=1;nparseFloat(G)){C=String(K);break e}}C=G}var Y,X={};function Q(e){return function(e,t){var a=X;return Object.prototype.hasOwnProperty.call(a,e)?a[e]:a[e]=t(e)}(e,(function(){for(var t=0,a=x(String(C)).split("."),s=x(String(e)).split("."),n=Math.max(a.length,s.length),r=0;0==t&&r=e.keyCode)&&(e.keyCode=-1)}catch(e){}};var ie="closure_listenable_"+(1e6*Math.random()|0),ce=0;function de(e,t,a,s,n){this.listener=e,this.proxy=null,this.src=t,this.type=a,this.capture=!!s,this.ca=n,this.key=++ce,this.Y=this.Z=!1}function le(e){e.Y=!0,e.listener=null,e.proxy=null,e.src=null,e.ca=null}function ue(e){this.src=e,this.a={},this.b=0}function he(e,t){var a=t.type;if(a in e.a){var s,n=e.a[a],r=S(n,t);(s=0<=r)&&Array.prototype.splice.call(n,r,1),s&&(le(t),0==e.a[a].length&&(delete e.a[a],e.b--))}}function me(e,t,a,s){for(var n=0;n>>0);function Te(e){return"function"==l(e)?e:(e[Ee]||(e[Ee]=function(t){return e.handleEvent(t)}),e[Ee])}function ke(){w.call(this),this.c=new ue(this),this.J=this,this.C=null}function Re(e,t,a,s){if(!(t=e.c.a[String(t)]))return!0;t=t.concat();for(var n=!0,r=0;rs.length)){var n=s[1];if(Array.isArray(n)&&!(1>n.length)){var r=n[0];if("noop"!=r&&"stop"!=r&&"close"!=r)for(var o=1;ot.length?bt:(t=t.substr(s,a),e.D=s+a,t))}function wt(e){e.U=v()+e.P,St(e,e.P)}function St(e,t){if(null!=e.o)throw Error("WatchDog timer not null");e.o=at(y(e.Ua,e),t)}function Et(e){e.o&&(c.clearTimeout(e.o),e.o=null)}function Tt(e){0==e.g.v||e.A||qa(e.g,e)}function kt(e){Et(e);var t=e.F;t&&"function"==typeof t.ja&&t.ja(),e.F=null,Ue(e.R),Je(e.J),e.a&&(t=e.a,e.a=null,t.abort(),t.ja())}function Rt(e,t){try{var a=e.g;if(0!=a.v&&(a.a==e||ra(a.b,e)))if(a.I=e.N,!e.C&&ra(a.b,e)&&3==a.v){try{var s=a.ka.a.parse(t)}catch(e){s=null}if(Array.isArray(s)&&3==s.length){var n=s;if(0==n[0]){e:if(!a.j){if(a.a){if(!(a.a.u+3e3n[2]&&a.H&&0==a.o&&!a.m&&(a.m=at(y(a.Ra,a),6e3));if(1>=na(a.b)&&a.ea){try{a.ea()}catch(e){}a.ea=void 0}}else Ba(a,11)}else if((e.C||a.a==e)&&Fa(a),!R(t))for(t=s=a.ka.a.parse(t),s=0;st||3==t&&!B&&!this.a.$())){this.A||4!=t||7==a||Qe(8==a||0>=s?3:2),Et(this);var n=this.a.X();this.N=n;var r=this.a.$();if(this.b=200==n,function(e,t,a,s,n,r,o){e.info((function(){return"XMLHTTP RESP ("+s+") [ attempt "+n+"]: "+t+"\n"+a+"\n"+r+" "+o}))}(this.c,this.m,this.l,this.f,this.T,t,n),this.b){if(this.V&&!this.C){t:{if(this.a){var o,i=this.a;if((o=i.a?i.a.getResponseHeader("X-HTTP-Initial-Response"):null)&&!R(o)){var c=o;break t}}c=null}if(!c){this.b=!1,this.h=3,et(12),kt(this),Tt(this);break e}We(this.c,this.f,c,"Initial handshake response via X-HTTP-Initial-Response"),this.C=!0,Rt(this,c)}this.I?(vt(this,t,r),B&&this.b&&3==t&&(Ve(this.J,this.R,"tick",this.Va),this.R.start())):(We(this.c,this.f,r,null),Rt(this,r)),4==t&&kt(this),this.b&&!this.A&&(4==t?qa(this.g,this):(this.b=!1,wt(this)))}else 400==n&&0t)throw Error("Bad port number "+t);e.h=t}else e.h=null}function Zt(e,t,a){t instanceof Wt?(e.b=t,function(e,t){t&&!e.f&&(Kt(e),e.c=null,e.a.forEach((function(e,t){var a=t.toLowerCase();t!=a&&(Yt(this,t),Qt(this,a,e))}),e)),e.f=t}(e.b,e.a)):(a||(t=qt(t,Jt)),e.b=new Wt(t,e.a))}function Ct(e,t,a){e.b.set(t,a)}function Ut(e){return Ct(e,"zx",Math.floor(2147483648*Math.random()).toString(36)+Math.abs(Math.floor(2147483648*Math.random())^v()).toString(36)),e}function Ft(e,t){return e?t?decodeURI(e.replace(/%25/g,"%2525")):decodeURIComponent(e):""}function qt(e,t,a){return"string"==typeof e?(e=encodeURI(e).replace(t,Ht),a&&(e=e.replace(/%25([0-9a-fA-F]{2})/g,"%$1")),e):null}function Ht(e){return"%"+((e=e.charCodeAt(0))>>4&15).toString(16)+(15&e).toString(16)}Mt.prototype.toString=function(){var e=[],t=this.f;t&&e.push(qt(t,Bt,!0),":");var a=this.c;return(a||"file"==t)&&(e.push("//"),(t=this.j)&&e.push(qt(t,Bt,!0),"@"),e.push(encodeURIComponent(String(a)).replace(/%25([0-9a-fA-F]{2})/g,"%$1")),null!=(a=this.h)&&e.push(":",String(a))),(a=this.g)&&(this.c&&"/"!=a.charAt(0)&&e.push("/"),e.push(qt(a,"/"==a.charAt(0)?Vt:zt,!0))),(a=this.b.toString())&&e.push("?",a),(a=this.i)&&e.push("#",qt(a,Gt)),e.join("")};var Bt=/[#\/\?@]/g,zt=/[#\?:]/g,Vt=/[#\?]/g,Jt=/[#\?@]/g,Gt=/#/g;function Wt(e,t){this.b=this.a=null,this.c=e||null,this.f=!!t}function Kt(e){e.a||(e.a=new xt,e.b=0,e.c&&function(e,t){if(e){e=e.split("&");for(var a=0;a2*e.c&&Pt(e)))}function Xt(e,t){return Kt(e),t=$t(e,t),jt(e.a.b,t)}function Qt(e,t,a){Yt(e,t),0=e.f}function na(e){return e.b?1:e.a?e.a.size:0}function ra(e,t){return e.b?e.b==t:!!e.a&&e.a.has(t)}function oa(e,t){e.a?e.a.add(t):e.b=t}function ia(e,t){e.b&&e.b==t?e.b=null:e.a&&e.a.has(t)&&e.a.delete(t)}function ca(e){var t,a;if(null!=e.b)return e.c.concat(e.b.s);if(null!=e.a&&0!==e.a.size){var s=e.c;try{for(var r=n(e.a.values()),o=r.next();!o.done;o=r.next()){var i=o.value;s=s.concat(i.s)}}catch(e){t={error:e}}finally{try{o&&!o.done&&(a=r.return)&&a.call(r)}finally{if(t)throw t.error}}return s}return k(e.c)}function da(){}function la(){this.a=new da}function ua(e,t,a){var s=a||"";try{Nt(e,(function(e,a){var n=e;h(e)&&(n=Ne(e)),t.push(s+a+"="+encodeURIComponent(n))}))}catch(e){throw t.push(s+"type="+encodeURIComponent("_badmap")),e}}function ha(e,t,a,s,n){try{t.onload=null,t.onerror=null,t.onabort=null,t.ontimeout=null,n(s)}catch(e){}}ta.prototype.cancel=function(){var e,t;if(this.c=ca(this),this.b)this.b.cancel(),this.b=null;else if(this.a&&0!==this.a.size){try{for(var a=n(this.a.values()),s=a.next();!s.done;s=a.next()){s.value.cancel()}}catch(t){e={error:t}}finally{try{s&&!s.done&&(t=a.return)&&t.call(a)}finally{if(e)throw e.error}}this.a.clear()}},da.prototype.stringify=function(e){return c.JSON.stringify(e,void 0)},da.prototype.parse=function(e){return c.JSON.parse(e,void 0)};var ma=c.JSON.parse;function fa(e){ke.call(this),this.headers=new xt,this.H=e||null,this.b=!1,this.s=this.a=null,this.B="",this.h=0,this.f="",this.g=this.A=this.l=this.u=!1,this.o=0,this.m=null,this.I=pa,this.D=this.F=!1}A(fa,ke);var pa="",ba=/^https?$/i,ya=["POST","PUT"];function ga(e){return"content-type"==e.toLowerCase()}function va(e,t){e.b=!1,e.a&&(e.g=!0,e.a.abort(),e.g=!1),e.f=t,e.h=5,Aa(e),Sa(e)}function Aa(e){e.u||(e.u=!0,e.dispatchEvent("complete"),e.dispatchEvent("error"))}function wa(e){if(e.b&&void 0!==i&&(!e.s[1]||4!=Ta(e)||2!=e.X()))if(e.l&&4==Ta(e))Fe(e.za,0,e);else if(e.dispatchEvent("readystatechange"),4==Ta(e)){e.b=!1;try{var t,a=e.X();e:switch(a){case 200:case 201:case 202:case 204:case 206:case 304:case 1223:var s=!0;break e;default:s=!1}if(!(t=s)){var n;if(n=0===a){var r=String(e.B).match(Lt)[1]||null;if(!r&&c.self&&c.self.location){var o=c.self.location.protocol;r=o.substr(0,o.length-1)}n=!ba.test(r?r.toLowerCase():"")}t=n}if(t)e.dispatchEvent("complete"),e.dispatchEvent("success");else{e.h=6;try{var d=2(d-=r))r=Math.max(0,n[c].b-100),i=!1;else try{ua(l,o,"req"+d+"_")}catch(e){s&&s(l)}}if(i){s=o.join("&");break e}}return e=e.g.splice(0,a),t.s=e,s}function Oa(e){e.a||e.j||(e.U=1,De(e.Aa,e),e.o=0)}function Za(e){return!(e.a||e.j||3<=e.o)&&(e.U++,e.j=at(y(e.Aa,e),Ha(e,e.o)),e.o++,!0)}function Ca(e){null!=e.s&&(c.clearTimeout(e.s),e.s=null)}function Ua(e){e.a=new mt(e,e.c,"rpc",e.U),null===e.i&&(e.a.B=e.l),e.a.O=0;var t=_t(e.la);Ct(t,"RID","rpc"),Ct(t,"SID",e.J),Ct(t,"CI",e.H?"0":"1"),Ct(t,"AID",e.P),Da(e,t),Ct(t,"TYPE","xmlhttp"),e.i&&e.l&&ka(t,e.i,e.l),e.D&&e.a.setTimeout(e.D);var a=e.a;e=e.ga,a.H=1,a.i=Ut(_t(t)),a.j=null,a.I=!0,gt(a,e)}function Fa(e){null!=e.m&&(c.clearTimeout(e.m),e.m=null)}function qa(e,t){var a=null;if(e.a==t){Fa(e),Ca(e),e.a=null;var s=2}else{if(!ra(e.b,t))return;a=t.s,ia(e.b,t),s=1}if(e.I=t.N,0!=e.v)if(t.b)if(1==s){a=t.j?t.j.length:0,t=v()-t.u;var n=e.u;(s=Ye()).dispatchEvent(new tt(s,a,t,n)),Ma(e)}else Oa(e);else if(3==(n=t.h)||0==n&&0=e.b.f-(e.h?1:0))&&(e.h?(e.g=t.s.concat(e.g),!0):!(1==e.v||2==e.v||e.u>=(e.Ia?0:e.Ja))&&(e.h=at(y(e.Ba,e,t),Ha(e,e.u)),e.u++,!0))}(e,t)||2==s&&Za(e)))switch(a&&0t?null:"string"==typeof e?e.charAt(t):e[t]}(n.L()),a=c.FormData&&e instanceof c.FormData,!(0<=S(ya,t))||s||a||n.set("Content-Type","application/x-www-form-urlencoded;charset=utf-8"),n.forEach((function(e,t){this.a.setRequestHeader(t,e)}),this),this.I&&(this.a.responseType=this.I),"withCredentials"in this.a&&this.a.withCredentials!==this.F&&(this.a.withCredentials=this.F);try{Ea(this),0=this.N)){var e=2*this.N;this.c.info("BP detection timer enabled: "+e),this.s=at(y(this.Sa,this),e)}},r.Sa=function(){this.s&&(this.s=null,this.c.info("BP detection timeout reached."),this.c.info("Buffering proxy detected and switch to long-polling!"),this.H=!1,this.F=!0,Pa(this),Ua(this))},r.Ra=function(){null!=this.m&&(this.m=null,Pa(this),Za(this),et(19))},r.Xa=function(e){e?(this.c.info("Successfully pinged google.com"),et(2)):(this.c.info("Failed to ping google.com"),et(1))},(r=Ga.prototype).ta=function(){},r.sa=function(){},r.ra=function(){},r.qa=function(){},r.Ha=function(){},Wa.prototype.a=function(e,t){return new Ka(e,t)},A(Ka,ke),(r=Ka.prototype).addEventListener=function(e,t,a,s){Ka.S.addEventListener.call(this,e,t,a,s)},r.removeEventListener=function(e,t,a,s){Ka.S.removeEventListener.call(this,e,t,a,s)},r.Oa=function(){this.a.f=this.f,this.h&&(this.a.C=!0);var e=this.a,t=this.l,a=this.b||void 0;et(0),e.fa=t,e.W=a||{},e.H=e.T,e.B=Va(e,null,e.fa),Ma(e)},r.close=function(){xa(this.a)},r.Pa=function(e){if("string"==typeof e){var t={};t.__data__=e,La(this.a,t)}else this.g?((t={}).__data__=Ne(e),La(this.a,t)):La(this.a,e)},r.G=function(){this.a.f=null,delete this.f,xa(this.a),delete this.a,Ka.S.G.call(this)},A(Ya,lt),A(Xa,ut),A(Qa,Ga),Qa.prototype.ta=function(){this.a.dispatchEvent("a")},Qa.prototype.sa=function(e){this.a.dispatchEvent(new Ya(e))},Qa.prototype.ra=function(e){this.a.dispatchEvent(new Xa(e))},Qa.prototype.qa=function(){this.a.dispatchEvent("b")},Wa.prototype.createWebChannel=Wa.prototype.a,Ka.prototype.send=Ka.prototype.Pa,Ka.prototype.open=Ka.prototype.Oa,Ka.prototype.close=Ka.prototype.close,st.NO_ERROR=0,st.TIMEOUT=8,st.HTTP_ERROR=6,nt.COMPLETE="complete",it.EventType=dt,dt.OPEN="a",dt.CLOSE="b",dt.ERROR="c",dt.MESSAGE="d",ke.prototype.listen=ke.prototype.va,fa.prototype.listenOnce=fa.prototype.wa,fa.prototype.getLastError=fa.prototype.Qa,fa.prototype.getLastErrorCode=fa.prototype.ua,fa.prototype.getStatus=fa.prototype.X,fa.prototype.getResponseJson=fa.prototype.Na,fa.prototype.getResponseText=fa.prototype.$,fa.prototype.send=fa.prototype.ba;var $a={createWebChannelTransport:function(){return new Wa},ErrorCode:st,EventType:nt,WebChannel:it,XhrIo:fa},es=$a.createWebChannelTransport,ts=$a.ErrorCode,as=$a.EventType,ss=$a.WebChannel,ns=$a.XhrIo;t.default=$a}.call(this,a(1))},function(e,t,a){const s=a(0),n=new THREE.Color;function r(e,t,a){n.set(a),e.uniforms?(e.uniforms[t].value.x=n.r,e.uniforms[t].value.y=n.g,e.uniforms[t].value.z=n.b):e[t].set(a)}function o(e,t,a,s,n,r){e.fillStyle=t,e.fillRect(a,s,n,r)}function i(e,t,a,s,n,r,o){let i;i=r>o?e.createLinearGradient(0,0,r,0):e.createLinearGradient(0,0,0,o),i.addColorStop(0,t),i.addColorStop(1,a),e.fillStyle=i,e.fillRect(s,n,r,o)}if(AFRAME.registerSystem("materials",{schema:{},init:function(){this.curve=null,this.panelMaterials=[];const e=localStorage.getItem("colorScheme")||"default";this.scheme=s.schemes[e],this.textureList=[],this.beatsCanvas=document.createElement("canvas"),this.beatsTexture=new THREE.CanvasTexture(this.beatsCanvas),this.generateBeatsTexture(),this.textureList.push(this.beatsTexture),this.envmapCanvas=document.createElement("canvas"),this.envmapTexture=new THREE.CanvasTexture(this.envmapCanvas),this.generateEnvmapTexture(),this.textureList.push(this.envmapTexture),this.fistsCanvas=document.createElement("canvas"),this.fistsTexture=new THREE.CanvasTexture(this.fistsCanvas),this.generateFistsTexture(),this.textureList.push(this.fistsTexture),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{this.createMaterials()}):this.createMaterials()},play:function(){this.setColorScheme()},tick:function(e,t){this.aurora.uniforms.time.value=e,this.home.animate&&(this.home.uniforms.time.value=e),this.leftFistWeapon.uniforms.time.value=e,this.leftWeapon.uniforms.time.value=e,this.rightFistWeapon.uniforms.time.value=e,this.rightWeapon.uniforms.time.value=e,this.rings.uniforms.time.value=e,this.tube.uniforms.time.value=e},createMaterials:function(){const e=this.scheme;this.tunnel=new THREE.ShaderMaterial({vertexShader:a(108),fragmentShader:a(109),uniforms:{fogColor:{value:new THREE.Color(e.primary)},color1:{value:new THREE.Color(e.primary)},color2:{value:new THREE.Color(e.secondary)},color3:{value:new THREE.Color(e.tertiary)},scale:{value:1}},transparent:!0}),this.merkaba=new THREE.MeshBasicMaterial({color:new THREE.Color(e.primary)}),this.backglow=new THREE.MeshBasicMaterial({transparent:!0,map:(new THREE.TextureLoader).load(document.getElementById("backGlowImg").src),color:new THREE.Color(e.primary)}),this.textureList.push(this.backglow.map),this.aurora=new THREE.ShaderMaterial({vertexShader:a(110),fragmentShader:a(111),uniforms:{colorPrimary:{value:new THREE.Color(e.primary)},colorSecondary:{value:new THREE.Color(e.secondary)},time:{value:0}},transparent:!0}),this.rings=new THREE.ShaderMaterial({vertexShader:a(112),fragmentShader:a(113),uniforms:{colorPrimary:{value:new THREE.Color(e.primary)},colorSecondary:{value:new THREE.Color(e.secondary)},colorTertiary:{value:new THREE.Color(e.tertiary)},time:{value:0}},transparent:!0,depthWrite:!1}),this.moon=new THREE.ShaderMaterial({vertexShader:a(114),fragmentShader:a(115),uniforms:{map:{value:(new THREE.TextureLoader).load(document.getElementById("moonImg").src)},tint:{value:new THREE.Color(e.secondarybright)}},transparent:!0}),this.textureList.push(this.moon.uniforms.map.value),this.home=new THREE.ShaderMaterial({vertexShader:a(116),fragmentShader:a(117),uniforms:{color1:{value:new THREE.Color(e.primary)},color2:{value:new THREE.Color(e.secondary)},color3:{value:new THREE.Color(e.tertiary)},src:{value:(new THREE.TextureLoader).load(document.getElementById("homeShadowImg").src)},time:{value:0}},transparent:!0}),this.textureList.push(this.home.uniforms.src.value);const t=(new THREE.TextureLoader).load(document.getElementById("weaponImg").src);t.wrapS=THREE.RepeatWrapping,t.wrapT=THREE.RepeatWrapping,t.repeat.set(2,2),t.magFilter=THREE.NearestFilter,this.textureList.push(t),this.rightWeapon=new THREE.ShaderMaterial({vertexShader:a(25),fragmentShader:a(26),uniforms:{src:{value:t},color:{value:new THREE.Color(e.secondary)},thickness:{value:1.6},time:{value:0}},transparent:!0,blending:THREE.AdditiveBlending}),this.leftWeapon=new THREE.ShaderMaterial({vertexShader:a(25),fragmentShader:a(26),uniforms:{src:{value:t},color:{value:new THREE.Color(e.primary)},thickness:{value:1.6},time:{value:0}},transparent:!0,blending:THREE.AdditiveBlending}),this.leftFistWeapon=new THREE.ShaderMaterial({vertexShader:a(16),fragmentShader:a(27),uniforms:{src:{value:t},color:{value:new THREE.Color(e.primary)},time:{value:0}},side:THREE.DoubleSide,transparent:!0,blending:THREE.AdditiveBlending}),this.rightFistWeapon=new THREE.ShaderMaterial({vertexShader:a(16),fragmentShader:a(27),uniforms:{src:{value:t},color:{value:new THREE.Color(e.secondary)},time:{value:0}},side:THREE.DoubleSide,transparent:!0,blending:THREE.AdditiveBlending});const n=(new THREE.TextureLoader).load(document.getElementById("weaponImg").src),r=(new THREE.TextureLoader).load(document.getElementById("weaponHandleImg").src);n.mapping=THREE.SphericalReflectionMapping,this.textureList.push(n),this.textureList.push(r),this.leftWeaponHandle=new THREE.MeshStandardMaterial({roughness:.4,metalness:.5,color:new THREE.Color(e.primary),map:r,envMap:n}),this.rightWeaponHandle=new THREE.MeshStandardMaterial({roughness:.4,metalness:.5,color:new THREE.Color(e.secondary),map:r,envMap:n});const o=(new THREE.TextureLoader).load(document.getElementById("weapon2Img").src);o.mapping=THREE.SphericalReflectionMapping,this.leftFist=new THREE.MeshStandardMaterial({roughness:.3,metalness:.8,map:this.fistsTexture,envMap:o,transparent:!0}),this.rightFist=new THREE.MeshStandardMaterial({roughness:.3,metalness:.8,map:this.fistsTexture,envMap:o,transparent:!0}),this.beat=new THREE.MeshLambertMaterial({map:this.beatsTexture,transparent:!0}),this.blueBeatPieces=new THREE.MeshLambertMaterial({map:this.beatsTexture,color:e.secondary,emissive:e.secondary,emissiveIntensity:.2}),this.redBeatPieces=new THREE.MeshLambertMaterial({map:this.beatsTexture,color:e.primary,emissive:e.primary,emissiveIntensity:.2}),this.minePieces=new THREE.MeshLambertMaterial({color:e.tertiary,emissive:e.tertiary,emissiveIntensity:.2});const i=(new THREE.TextureLoader).load(document.getElementById("backGlowImg").src);this.redBeatGlow=new THREE.MeshBasicMaterial({color:e.primary,map:i,blending:THREE.AdditiveBlending,transparent:!0}),this.blueBeatGlow=new THREE.MeshBasicMaterial({color:e.secondary,map:i,blending:THREE.AdditiveBlending,transparent:!0}),this.textureList.push(i),this.stars=new THREE.PointsMaterial({size:1,map:(new THREE.TextureLoader).load(document.getElementById("starImg").src),blending:THREE.AdditiveBlending,transparent:!0,color:new THREE.Color(e.secondary)}),this.textureList.push(this.stars.map);const c=(new THREE.TextureLoader).load(document.getElementById("sideglowImg").src);this.textureList.push(c),this.leftsideglow=new THREE.MeshBasicMaterial({map:c,transparent:!0,blending:THREE.AdditiveBlending,depthTest:!1,side:THREE.BackSide,color:new THREE.Color(s.OFF)}),this.rightsideglow=new THREE.MeshBasicMaterial({map:c,transparent:!0,blending:THREE.AdditiveBlending,depthTest:!1,color:new THREE.Color(s.OFF)});const d=(new THREE.TextureLoader).load(document.getElementById("plumeImg").src);d.minFilter=THREE.LinearFilter,this.arrowBluePlume=new THREE.ShaderMaterial({vertexShader:a(7),fragmentShader:a(8),uniforms:{color:{value:new THREE.Color(e.secondary)},src:{value:d}},transparent:!0,depthTest:!1}),this.arrowRedPlume=new THREE.ShaderMaterial({vertexShader:a(7),fragmentShader:a(8),uniforms:{color:{value:new THREE.Color(e.primary)},src:{value:d}},transparent:!0,depthTest:!1}),this.dotBluePlume=new THREE.ShaderMaterial({vertexShader:a(7),fragmentShader:a(8),uniforms:{color:{value:new THREE.Color(e.secondary)},src:{value:d}},transparent:!0,depthTest:!1}),this.dotRedPlume=new THREE.ShaderMaterial({vertexShader:a(7),fragmentShader:a(8),uniforms:{color:{value:new THREE.Color(e.primary)},src:{value:d}},transparent:!0,depthTest:!1}),this.minePlume=new THREE.ShaderMaterial({vertexShader:a(7),fragmentShader:a(8),uniforms:{color:{value:new THREE.Color(e.tertiary)},src:{value:d}},transparent:!0,depthTest:!1});const l=(new THREE.TextureLoader).load(document.getElementById("tubeImg").src),u=(new THREE.TextureLoader).load(document.getElementById("tubeColorImg").src);l.generateMipmaps=!1,l.minFilter=THREE.LinearFilter,u.generateMipmaps=!1,u.minFilter=THREE.LinearFilter,this.tube=new THREE.ShaderMaterial({vertexShader:a(118),fragmentShader:a(119),uniforms:{time:{value:0},opacity:{value:0},src:{value:l},color:{value:u}},transparent:!0,depthTest:!1,side:THREE.BackSide});const h=(new THREE.TextureLoader).load(document.getElementById("handStarTrailImg").src);h.generateMipmaps=!1,h.minFilter=THREE.LinearFilter,this.handStarTrail=new THREE.ShaderMaterial({vertexShader:a(120),fragmentShader:a(121),uniforms:{colorPrimary:{value:new THREE.Color(e.primary)},colorSecondary:{value:new THREE.Color(e.secondary)},colorTertiary:{value:new THREE.Color(e.tertiary)},pulse:{value:0},src:{value:h}},transparent:!0,depthTest:!1,blending:THREE.AdditiveBlending,side:THREE.DoubleSide})},setColorScheme:function(e){this.el.sceneEl;const t=this.scheme=s.schemes[e]||s.schemes.default;r(this.arrowBluePlume,"color",t.secondary),r(this.arrowRedPlume,"color",t.primary),r(this.aurora,"colorPrimary",t.primary),r(this.aurora,"colorSecondary",t.secondary),r(this.backglow,"color",t.primary),r(this.blueBeatGlow,"color",t.secondary),r(this.blueBeatGlow,"color",t.secondary),r(this.blueBeatPieces,"color",t.secondary),r(this.blueBeatPieces,"emissive",t.secondary),r(this.dotBluePlume,"color",t.secondary),r(this.dotRedPlume,"color",t.primary),r(this.handStarTrail,"colorPrimary",t.primary),r(this.handStarTrail,"colorSecondary",t.secondary),r(this.handStarTrail,"colorTertiary",t.tertiary),r(this.home,"color1",t.primary),r(this.home,"color2",t.secondary),r(this.home,"color3",t.tertiary),r(this.leftFist,"color",t.primarybright),r(this.leftFistWeapon,"color",t.primary),r(this.leftWeapon,"color",t.primary),r(this.leftWeaponHandle,"color",t.primary),r(this.merkaba,"color",t.primary),r(this.minePieces,"color",t.tertiary),r(this.minePieces,"emissive",t.tertiary),r(this.minePlume,"color",t.tertiary),r(this.moon,"tint",t.secondarybright),r(this.redBeatGlow,"color",t.primary),r(this.redBeatGlow,"color",t.primary),r(this.redBeatPieces,"color",t.primary),r(this.redBeatPieces,"emissive",t.primary),r(this.rightFist,"color",t.secondarybright),r(this.rightWeapon,"color",t.secondary),r(this.rightFistWeapon,"color",t.secondary),r(this.rightWeaponHandle,"color",t.secondary),r(this.rings,"colorPrimary",t.primary),r(this.rings,"colorSecondary",t.secondary),r(this.rings,"colorTertiary",t.tertiary),r(this.stars,"color",t.secondary),r(this.tunnel,"fogColor",t.primary),r(this.tunnel,"color1",t.primary),r(this.tunnel,"color2",t.secondary),r(this.tunnel,"color3",t.tertiary),this.generateBeatsTexture(),this.generateEnvmapTexture(),this.generateFistsTexture(),document.querySelectorAll("a-entity[wall]").forEach(e=>{r(e.getObject3D("mesh").material,"colorTertiary",t.tertiary)}),this.panelMaterials.forEach(e=>{r(e,"colorPrimary",t.primary),r(e,"colorSecondary",t.secondary)}),r(this.curve,"fogColor",t.primary),r(this.curve,"color1",t.primary),r(this.curve,"color2",t.secondary)},generateBeatsTexture:function(){const e=this.scheme,t=new THREE.Color(e.primary),a=new THREE.Color(e.secondary),s=new THREE.Color(e.tertiary),n=this.beatsCanvas,r=n.getContext("2d");n.width=512,n.height=32,o(r,s.getStyle(),0,0,128,6),o(r,"#000",128,0,128,6),o(r,a.getStyle(),256,0,128,6),o(r,t.getStyle(),384,0,105,6),o(r,"#FFF",489,0,23,6),i(r,"#000000",a.getStyle(),0,6,512,4),i(r,"#000",t.getStyle(),0,10,512,5),i(r,"#000",s.getStyle(),0,15,512,4),i(r,`rgba(${a.r}, ${a.g}, ${a.b}, 0)`,a.getStyle(),0,19,512,5),i(r,`rgba(${t.r}, ${t.g}, ${t.b}, 0)`,t.getStyle(),0,24,512,4),i(r,`rgba(${s.r}, ${s.g}, ${s.b}, 0)`,s.getStyle(),0,28,512,4);const c=this.beatsTexture;return c.generateMipmaps=!1,c.magFilter=THREE.LinearFilter,c.minFilter=THREE.LinearFilter,c.needsUpdate=!0,c},generateFistsTexture:function(){const e=this.scheme,t=new THREE.Color(e.primarybright),a=new THREE.Color(e.secondarybright),s=this.fistsCanvas,n=s.getContext("2d");return s.width=8,s.height=128,i(n,t.getStyle(),`rgba(${t.r}, ${t.g}, ${t.b}, 0)`,0,0,4,128),i(n,a.getStyle(),`rgba(${a.r}, ${a.g}, ${a.b}, 0)`,4,0,4,128),this.fistsTexture.needsUpdate=!0,this.fistsTexture},generateEnvmapTexture:function(){const e=this.scheme,t=new THREE.Color(e.primary),a=new THREE.Color(e.secondary),s=document.getElementById("envmapTemplateImg");s.addEventListener("load",()=>{const e=s.width,n=s.height,r=this.envmapCanvas;r.width=e,r.height=n;const o=r.getContext("2d");o.drawImage(s,0,0);const i=o.getImageData(0,0,e,n),c=i.data;let d,l;for(let e=0;e{"mesh"===t.detail.type&&(e=this.el.getObject3D("mesh"),e&&this.applyMaterial(e))}),this.material.animate=this.data.animate},applyMaterial:function(e){e.detail&&(e=e.detail.model),this.data.recursive?e.traverse(e=>{"Mesh"===e.type&&(e.material=this.material)}):e.material=this.material}}),AFRAME.registerComponent("materials-color-menu",{play:function(){this.text=document.getElementById("colorName")},events:{mouseenter:function(e){this.text.setAttribute("text","value",e.target.dataset.colorName)},mouseleave:function(e){this.text.setAttribute("text","value","")},click:function(e){this.el.sceneEl.systems.materials.setColorScheme(e.target.dataset.colorScheme),this.el.sceneEl.emit("colorschemechange",e.target.dataset.colorScheme,!1)}}}),window.AFRAME){const t=["materials","materials-color-menu"],a=[],s=["materials"];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.el.object3D.visible=!1,setTimeout(()=>{this.el.components.layout.update(),this.el.object3D.visible=!0},150)})},events:{click:function(e){this.el.sceneEl.emit("menudifficultyselect",e.target.closest(".difficultyOption").dataset.difficulty,!1)}}}),window.AFRAME){const t=["menu-difficulty-select"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.el.sceneEl.emit("genreselect",e.target.closest(".genre").dataset.bindForKey)})}}),window.AFRAME){const t=["menu-genre"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{const t=e.target.closest("[data-mode]"),a=t.dataset.mode,s=t.dataset.name;this.el.sceneEl.emit("gamemode",a,!1),this.data.hasVR&&localStorage.setItem("gameMode",s),this.setModeOption(s)})},update:function(){this.data.hasVR?(this.setModeOption(localStorage.getItem("gameMode")||"punchvr"),this.el.sceneEl.emit("gamemode",r[localStorage.getItem("gameMode")||"punchvr"])):this.setModeOption("ride2d")},setModeOption:function(e){const t=this.el.querySelectorAll(".modeItem");document.getElementById("modeIcon").object3D.position.y=n[e];for(let a=0;a{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.el.components.animation__scaledown.beginAnimation(),this.el.object3D.position.z=0},800))}}),window.AFRAME){const t=["menu-playlist-button"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{const t=e.target.closest(".playlist");this.eventDetail.id=t.dataset.playlist,this.eventDetail.title=t.dataset.title,this.el.sceneEl.emit("playlistselect",this.eventDetail)})}}),window.AFRAME){const t=["menu-playlist"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{27===e.keyCode&&this.pauseGame()}),this.el.sceneEl.addEventListener("controllerconnected",e=>{"vive-controls"===e.detail.name?this.el.addEventListener("menudown",this.pauseGame):(this.el.addEventListener("thumbstickdown",this.pauseGame),this.el.addEventListener("trackpaddown",this.pauseGame))}),document.addEventListener("visibilitychange",()=>{"hidden"===document.visibilityState&&this.pauseGame()})},pauseGame:function(){this.data.enabled&&this.el.sceneEl.emit("pausegame",null,!1)}}),window.AFRAME){const t=["pauser"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.data.enabled&&this.system.playSound(this.src,this.data.volume)})},update:function(){this.src=this.data.sound,this.data.sound.startsWith("#")&&(this.src=document.querySelector(this.data.sound).getAttribute("src"))}}),window.AFRAME){const t=["play-sound"],a=[],s=["play-sound"];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s3&&e.shift(),e.push(this.el.object3D.position.y),this.height=function(e){e.sort(s);const t=e.length/2;return t%1?e[t-.5]:(e[t-1]+e[t])/2}(e);const t=(a=this.height,n=1.6,r=2.2,Math.min(Math.max(a,n),r));var a,n,r,o,i;this.beatOffset=(i=0)+(.2-i)*(t-(o=1.6))/(2.2-o)}}),window.AFRAME){const t=["player-height"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;sthis.curveFollowRig.object3D.position.z+10)this.returnToPool();else for(let e=0;e{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.addEventListener("menudown",this.recenter),e.addEventListener("thumbstickdown",this.recenter)}),this.el.addEventListener("recenter",this.recenter)},recenter:(s=new THREE.Euler,n=new THREE.Matrix4,r=new THREE.Matrix4,o=new THREE.Matrix4,function(){const e=this.el;if(!this.data.enabled)return;const t=e.sceneEl.camera.el.object3D;n.identity(),s.set(0,-1*t.rotation.y,0),r.makeRotationFromEuler(s),o.makeTranslation(-1*t.position.x,0,-1*t.position.z),n.multiply(r).multiply(o),n.decompose(e.object3D.position,e.object3D.quaternion,e.object3D.scale),e.object3D.updateMatrixWorld(!0),e.emit("recentered",null,!1)})}),window.AFRAME){const t=["recenter"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.draw(a,t)}}e.length!==this.lastNumResults&&this.updateAlphaMap(e.length),this.lastNumResults=e.length},draw:function(e,t){this.ctx.drawImage(e,0,t*(512/384*64),64,512/384*64),this.el.getObject3D("mesh").material.map.needsUpdate=!0},clearCanvas:function(){const e=this.canvas;this.ctx.fillStyle="#111",this.ctx.fillRect(0,0,e.width,e.height)},updateAlphaMap:function(e){const t=this.alphaCanvas,a=this.alphaCtx;a.fillStyle="#FFF",a.fillRect(0,0,t.width,t.height),a.fillStyle="#000",a.fillRect(0,e*(512/384*64),t.width,t.height-e*(512/384*64)),this.el.getObject3D("mesh").material.alphaMap.needsUpdate=!0,this.el.getObject3D("mesh").material.needsUpdate=!0}}),window.AFRAME){const t=["search-thumbnail-atlas"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s0;t--){const a=Math.floor(Math.random()*(t+1));[e[t],e[a]]=[e[a],e[t]]}}(this.popularHits),this.queryObject={hitsPerPage:0,query:""},this.el.sceneEl.addEventListener("searchclear",()=>{this.search("")})},update:function(e){this.popularHits&&(this.search(this.data.query),e.query&&!this.data.query&&(this.keyboardEl.components["super-keyboard"].data.value="",this.keyboardEl.components["super-keyboard"].updateTextInput("")),this.debouncedSearch=s(this.search.bind(this),1e3))},play:function(){this.el.sceneEl.emit("searchresults",this.eventDetail),this.search("")},events:{superkeyboardchange:function(e){e.target===this.el&&this.debouncedSearch(e.detail.value)}},search:function(e){if(!e&&"All"===this.data.difficultyFilter&&!this.data.genre&&!this.data.playlist&&this.popularHits)return this.eventDetail.results=this.popularHits,this.eventDetail.query="",void this.el.sceneEl.emit("searchresults",this.eventDetail);if(this.eventDetail.query=e,this.queryObject.query=e,this.queryObject.hitsPerPage=e?30:150,"favorites"===this.data.playlist)return this.eventDetail.results=JSON.parse(localStorage.getItem("favorites-v2")),void this.el.sceneEl.emit("searchresults",this.eventDetail);let t="https://beatsaver.com/api/search/text/CURRENT_PAGE_INDEX?sortOrder=Rating&automapper=true&q="+encodeURIComponent(e);if(this.data.playlist)t=`https://api.beatsaver.com/playlists/id/${this.data.playlist}/CURRENT_PAGE_INDEX`;else if(this.data.genre){const e={Pop:"pop","R&B":"rb",Rap:"hip-hop-rap",Rock:"rock",Soundtrack:"tv-movie-soundtrack","Video Games":"video-game-soundtrack",Electronic:"electronic","Hip Hop":"hip-hop-rap",House:"house","J-Pop":"j-pop","K-Pop":"k-pop",Meme:"comedy-meme",Alternative:"alternative",Anime:"anime",Comedy:"comedy-meme",Dubstep:"dubstep",Dance:"dance"}[this.data.genre];t="https://beatsaver.com/api/search/text/CURRENT_PAGE_INDEX?sortOrder=Rating&automapper=true&tags="+encodeURIComponent(e)}else if(e&&e.length<3)return;fetch(t.replaceAll("CURRENT_PAGE_INDEX",0)).then(e=>e.json()).then(e=>{var a=(e.docs||e.maps).map(n);this.eventDetail.results=a,this.eventDetail.url=t,this.eventDetail.urlPage=0,this.el.sceneEl.emit("searchresults",this.eventDetail)})}}),AFRAME.registerComponent("search-result-list",{init:function(){new MutationObserver(e=>{for(let t=0;t{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s=t||a<0||b&&e-d>=r}function w(){var e=m();if(A(e))return S(e);i=setTimeout(w,function(e){var a=t-(e-c);return b?h(a,r-(e-d)):a}(e))}function S(e){return i=void 0,y&&s?g(e):(s=n=void 0,o)}function E(){var e=m(),a=A(e);if(s=arguments,n=this,c=e,a){if(void 0===i)return v(c);if(b)return i=setTimeout(w,t),g(c)}return void 0===i&&(i=setTimeout(w,t)),o}return t=p(t)||0,f(a)&&(l=!!a.leading,r=(b="maxWait"in a)?u(p(a.maxWait)||0,t):r,y="trailing"in a?!!a.trailing:y),E.cancel=function(){void 0!==i&&clearTimeout(i),d=0,s=c=n=i=void 0},E.flush=function(){return void 0===i?o:S(m())},E}}).call(this,a(1))},function(e,t){e.exports=[{id:"2144",name:"Shut Up and Dance - WALK THE MOON",description:"Difficulties: Expert+ (Added 11/15), Expert, Hard, Normal\r\nYouTube Preview: https://youtu.be/x9hJbTlPQUY",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:128,duration:200,songName:"Shut Up and Dance",songSubName:"WALK THE MOON",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:47856,upvotes:15705,downvotes:243,score:.9584},uploaded:"2018-11-21T01:27:00Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"89cf8bb07afb3c59ae7b5ac00337d62261c36fb4",key:"2144",state:"Published",createdAt:"2018-11-21T01:27:00Z",sageScore:3,diffs:[{njs:10,offset:0,notes:301,bombs:4,obstacles:24,nps:1.578,length:407,characteristic:"Standard",difficulty:"Normal",events:380,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:190.781,paritySummary:{errors:64,warns:19,resets:0}},{njs:10,offset:0,notes:486,bombs:4,obstacles:24,nps:2.547,length:407,characteristic:"Standard",difficulty:"Hard",events:380,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:190.781,paritySummary:{errors:76,warns:34,resets:0}},{njs:10,offset:0,notes:620,bombs:4,obstacles:24,nps:3.246,length:407.5,characteristic:"Standard",difficulty:"Expert",events:380,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.016,paritySummary:{errors:88,warns:68,resets:0}},{njs:12,offset:0,notes:894,bombs:0,obstacles:0,nps:4.68,length:407.5,characteristic:"Standard",difficulty:"ExpertPlus",events:380,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.016,paritySummary:{errors:99,warns:120,resets:0}}],downloadURL:"https://cdn.beatsaver.com/89cf8bb07afb3c59ae7b5ac00337d62261c36fb4.zip",coverURL:"https://cdn.beatsaver.com/89cf8bb07afb3c59ae7b5ac00337d62261c36fb4.jpg",previewURL:"https://cdn.beatsaver.com/89cf8bb07afb3c59ae7b5ac00337d62261c36fb4.mp3"}],createdAt:"2018-11-21T01:27:00Z",updatedAt:"2018-11-21T01:27:00Z",lastPublishedAt:"2018-11-21T01:27:00Z"},{id:"66e6",name:"League of Legends - Legends never die (ft. Against The Current)",description:"A special request from Prima1URGE",uploader:{id:4285107,name:"kikaeaeon",uniqueSet:!0,hash:"5cff0b7498cc5a672c85109b",avatar:"https://cdn.beatsaver.com/avatar/103715469822816256.png",type:"DISCORD"},metadata:{bpm:140,duration:236,songName:"Legends Never Die",songSubName:"",songAuthorName:"League of Legends & Against The Current",levelAuthorName:"KikaeAeon"},stats:{plays:0,downloads:30647,upvotes:10346,downvotes:160,score:.9549},uploaded:"2019-09-30T10:19:45.606Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"732bd4072b89d4b3bf0e63db812a7ffc3096e837",key:"66e6",state:"Published",createdAt:"2019-09-30T10:19:45.606Z",sageScore:6,diffs:[{njs:12,offset:0,notes:705,bombs:0,obstacles:10,nps:3.041,length:541,characteristic:"Standard",difficulty:"Expert",events:1693,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.857,paritySummary:{errors:4,warns:2,resets:0}},{njs:16,offset:0,notes:876,bombs:0,obstacles:10,nps:3.778,length:541,characteristic:"Standard",difficulty:"ExpertPlus",events:1693,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.857,paritySummary:{errors:3,warns:2,resets:0}}],downloadURL:"https://cdn.beatsaver.com/732bd4072b89d4b3bf0e63db812a7ffc3096e837.zip",coverURL:"https://cdn.beatsaver.com/732bd4072b89d4b3bf0e63db812a7ffc3096e837.jpg",previewURL:"https://cdn.beatsaver.com/732bd4072b89d4b3bf0e63db812a7ffc3096e837.mp3"}],createdAt:"2019-09-30T10:19:45.606Z",updatedAt:"2019-09-30T10:19:45.606Z",lastPublishedAt:"2019-09-30T10:19:45.606Z"},{id:"570",name:"Mr. Blue Sky | Electric Light Orchestra",description:"Channel your inner Baby Groot. Normal, Hard, Expert\r\nSpecial thanks to BennydaBeast for his help on this track!",uploader:{id:41378,name:"greatyazer",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea71",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ea71?d=retro",type:"SIMPLE"},metadata:{bpm:174,duration:222,songName:"Mr. Blue Sky",songSubName:"Electric Light Orchestra",songAuthorName:"GreatYazer",levelAuthorName:"greatyazer"},stats:{plays:0,downloads:53449,upvotes:29661,downvotes:731,score:.9547},uploaded:"2018-06-16T16:53:34Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"236173d5ba7dc379d480b9cb5fb6b4fa5abe77da",key:"570",state:"Published",createdAt:"2018-06-16T16:53:34Z",sageScore:5,diffs:[{njs:10,offset:0,notes:462,bombs:0,obstacles:25,nps:2.228,length:601.313,characteristic:"Standard",difficulty:"Normal",events:816,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.349,paritySummary:{errors:132,warns:16,resets:0},stars:1.46},{njs:10,offset:0,notes:639,bombs:0,obstacles:40,nps:3.082,length:601.313,characteristic:"Standard",difficulty:"Hard",events:816,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.349,paritySummary:{errors:109,warns:27,resets:0}},{njs:10,offset:0,notes:825,bombs:0,obstacles:40,nps:3.979,length:601.313,characteristic:"Standard",difficulty:"Expert",events:816,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.349,paritySummary:{errors:119,warns:57,resets:0}}],downloadURL:"https://cdn.beatsaver.com/236173d5ba7dc379d480b9cb5fb6b4fa5abe77da.zip",coverURL:"https://cdn.beatsaver.com/236173d5ba7dc379d480b9cb5fb6b4fa5abe77da.jpg",previewURL:"https://cdn.beatsaver.com/236173d5ba7dc379d480b9cb5fb6b4fa5abe77da.mp3"}],createdAt:"2018-06-16T16:53:34Z",updatedAt:"2018-06-16T16:53:34Z",lastPublishedAt:"2018-06-16T16:53:34Z"},{id:"3cf5",name:"Caramelldansen",description:"Preview: https://youtu.be/V5p0HOzunY0\n\n\nTwitter: https://twitter.com/Dack731",uploader:{id:4285250,name:"dack",uniqueSet:!0,hash:"5cff0b7598cc5a672c852c6f",avatar:"https://cdn.beatsaver.com/avatar/297344689798119424.png",type:"DISCORD"},metadata:{bpm:165,duration:178,songName:"Caramelldansen (Speedcake Remix)",songSubName:"Caramell",songAuthorName:"Dack",levelAuthorName:"Dack"},stats:{plays:0,downloads:30551,upvotes:19321,downvotes:422,score:.9543},uploaded:"2019-03-09T22:54:54Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"cf5e32d6b7f30095f7198da5894139c92336cad7",key:"3cf5",state:"Published",createdAt:"2019-03-09T22:54:54Z",sageScore:4,diffs:[{njs:14,offset:0,notes:722,bombs:52,obstacles:28,nps:4.254,length:466.75,characteristic:"Standard",difficulty:"Expert",events:597,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:169.727,paritySummary:{errors:37,warns:23,resets:0}}],downloadURL:"https://cdn.beatsaver.com/cf5e32d6b7f30095f7198da5894139c92336cad7.zip",coverURL:"https://cdn.beatsaver.com/cf5e32d6b7f30095f7198da5894139c92336cad7.jpg",previewURL:"https://cdn.beatsaver.com/cf5e32d6b7f30095f7198da5894139c92336cad7.mp3"}],createdAt:"2019-03-09T22:54:54Z",updatedAt:"2019-03-09T22:54:54Z",lastPublishedAt:"2019-03-09T22:54:54Z"},{id:"133b",name:"Daddy - PSY",description:"Insanely fun dance map! Enjoy!\nSee the map in action (Expert): https://www.youtube.com/watch?v=7jOIdfo0j4Q\n\nThank you to my playtesters:\nDuoVR (https://www.twitch.tv/duovr)\nSourgurl (https://www.twitch.tv/sourgurl)\nRexxxzi (https://www.twitch.tv/rexxxzi)\nAshleyriott (https://www.twitch.tv/ashleyriott)",uploader:{id:38202,name:"fafurion",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f945",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f945?d=retro",type:"SIMPLE"},metadata:{bpm:132,duration:232,songName:"Daddy",songSubName:"PSY",songAuthorName:"Fafurion",levelAuthorName:"fafurion"},stats:{plays:0,downloads:21881,upvotes:11227,downvotes:192,score:.9542},uploaded:"2018-09-02T23:43:45Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"dc489921185f92dfecb9cb07b84fc556123bd134",key:"133b",state:"Published",createdAt:"2018-09-02T23:43:45Z",sageScore:5,diffs:[{njs:10,offset:0,notes:671,bombs:0,obstacles:16,nps:3.012,length:490.125,characteristic:"Standard",difficulty:"Hard",events:1586,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:222.784,paritySummary:{errors:38,warns:39,resets:0}},{njs:10,offset:0,notes:831,bombs:0,obstacles:16,nps:3.73,length:490.125,characteristic:"Standard",difficulty:"Expert",events:1587,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:222.784,paritySummary:{errors:44,warns:40,resets:0}}],downloadURL:"https://cdn.beatsaver.com/dc489921185f92dfecb9cb07b84fc556123bd134.zip",coverURL:"https://cdn.beatsaver.com/dc489921185f92dfecb9cb07b84fc556123bd134.jpg",previewURL:"https://cdn.beatsaver.com/dc489921185f92dfecb9cb07b84fc556123bd134.mp3"}],createdAt:"2018-09-02T23:43:45Z",updatedAt:"2018-09-02T23:43:45Z",lastPublishedAt:"2018-09-02T23:43:45Z"},{id:"121f",name:"Skillet - Feel Invincible",description:"Expert / Hard\r\nhttps://www.youtube.com/watch?v=nq-Qul4XxbE",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:126,duration:227,songName:"Feel Invincible",songSubName:"Skillet",songAuthorName:"Rustic",levelAuthorName:"rustic"},stats:{plays:0,downloads:24093,upvotes:9596,downvotes:150,score:.9541},uploaded:"2018-08-27T16:47:05Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"2e9ab6e1fb8055649e241cade98b018926cc93a8",key:"121f",state:"Published",createdAt:"2018-08-27T16:47:05Z",sageScore:6,diffs:[{njs:10,offset:0,notes:620,bombs:0,obstacles:10,nps:2.764,length:471,characteristic:"Standard",difficulty:"Hard",events:1654,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:224.286,paritySummary:{errors:15,warns:58,resets:0}},{njs:12,offset:0,notes:738,bombs:0,obstacles:11,nps:3.29,length:471,characteristic:"Standard",difficulty:"Expert",events:1654,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:224.286,paritySummary:{errors:21,warns:72,resets:0}}],downloadURL:"https://cdn.beatsaver.com/2e9ab6e1fb8055649e241cade98b018926cc93a8.zip",coverURL:"https://cdn.beatsaver.com/2e9ab6e1fb8055649e241cade98b018926cc93a8.jpg",previewURL:"https://cdn.beatsaver.com/2e9ab6e1fb8055649e241cade98b018926cc93a8.mp3"}],createdAt:"2018-08-27T16:47:05Z",updatedAt:"2018-08-27T16:47:05Z",lastPublishedAt:"2018-08-27T16:47:05Z"},{id:"4e6f",name:"Kero Kero Bonito - Flamingo",description:"edited: NJS was a tad slow my b\r\nfuramingo \r\noh oh ooh oh\r\nthis needed to be remapped\r\n \r\nPlease check out Kero Kero Bonito and the rest of their songs\r\nI'll be mappin more of em soon\r\n\r\nBPM 178\r\nFlamingo (Expert)\r\nShrimp (Hard)\r\n\r\nhave fun \r\n\r\ngimme feedback on Discord\r\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:178,duration:197,songName:"Flamingo",songSubName:"Kero Kero Bonito",songAuthorName:"ETAN",levelAuthorName:"ETAN"},stats:{plays:0,downloads:22969,upvotes:10417,downvotes:173,score:.954},uploaded:"2019-05-22T00:46:47Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"585ee25e654ebf5db5aa0ec02c3bcecbaccf3e0b",key:"4e6f",state:"Published",createdAt:"2019-05-22T00:46:47Z",sageScore:5,diffs:[{njs:13,offset:0,notes:519,bombs:8,obstacles:86,nps:2.692,length:572,characteristic:"Standard",difficulty:"Hard",events:2271,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192.809,paritySummary:{errors:43,warns:43,resets:2}},{njs:16,offset:0,notes:679,bombs:10,obstacles:86,nps:3.522,length:572,characteristic:"Standard",difficulty:"Expert",events:2271,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192.809,paritySummary:{errors:35,warns:24,resets:4}}],downloadURL:"https://cdn.beatsaver.com/585ee25e654ebf5db5aa0ec02c3bcecbaccf3e0b.zip",coverURL:"https://cdn.beatsaver.com/585ee25e654ebf5db5aa0ec02c3bcecbaccf3e0b.jpg",previewURL:"https://cdn.beatsaver.com/585ee25e654ebf5db5aa0ec02c3bcecbaccf3e0b.mp3"}],createdAt:"2019-05-22T00:46:47Z",updatedAt:"2019-05-22T00:46:47Z",lastPublishedAt:"2019-05-22T00:46:47Z"},{id:"1fef",name:"Imagine Dragons - Believer (100k ver.) | 100k Contest",description:"This is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes. Go to https://bsaber.com/100k-contest/ to register!",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:125,duration:205,songName:"Believer (100k ver.)",songSubName:"Imagine Dragons",songAuthorName:"Rustic",levelAuthorName:"rustic"},stats:{plays:0,downloads:39471,upvotes:16897,downvotes:378,score:.9528},uploaded:"2018-11-12T17:53:58Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9a7a5beadfdd1c7c0f137ecba6e5f6ff377eb390",key:"1fef",state:"Published",createdAt:"2018-11-12T17:53:58Z",sageScore:6,diffs:[{njs:10,offset:0,notes:216,bombs:0,obstacles:0,nps:1.09,length:413,characteristic:"Standard",difficulty:"Easy",events:3418,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.24,paritySummary:{errors:42,warns:14,resets:0}},{njs:10,offset:0,notes:388,bombs:0,obstacles:8,nps:1.957,length:413,characteristic:"Standard",difficulty:"Normal",events:3418,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.24,paritySummary:{errors:18,warns:21,resets:0}},{njs:11,offset:0,notes:514,bombs:0,obstacles:10,nps:2.593,length:413,characteristic:"Standard",difficulty:"Hard",events:3418,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.24,paritySummary:{errors:57,warns:59,resets:0}},{njs:12,offset:0,notes:560,bombs:0,obstacles:12,nps:2.825,length:413,characteristic:"Standard",difficulty:"Expert",events:3430,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.24,paritySummary:{errors:102,warns:70,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9a7a5beadfdd1c7c0f137ecba6e5f6ff377eb390.zip",coverURL:"https://cdn.beatsaver.com/9a7a5beadfdd1c7c0f137ecba6e5f6ff377eb390.jpg",previewURL:"https://cdn.beatsaver.com/9a7a5beadfdd1c7c0f137ecba6e5f6ff377eb390.mp3"}],createdAt:"2018-11-12T17:53:58Z",updatedAt:"2018-11-12T17:53:58Z",lastPublishedAt:"2018-11-12T17:53:58Z"},{id:"4c6",name:"Muse - Uprising",description:"Expert / Hard\r\nhttps://youtu.be/WpFUt3UNp7c",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:251,songName:"Uprising",songSubName:"Muse",songAuthorName:"Rustic",levelAuthorName:"rustic"},stats:{plays:0,downloads:31460,upvotes:12140,downvotes:243,score:.9522},uploaded:"2018-06-11T21:47:41Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"00e5671e594a6fe621c3605fcc5a0e4466ba6478",key:"4c6",state:"Published",createdAt:"2018-06-11T21:47:41Z",sageScore:6,diffs:[{njs:10,offset:0,notes:633,bombs:0,obstacles:13,nps:2.599,length:519.625,characteristic:"Standard",difficulty:"Hard",events:1975,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:243.574,paritySummary:{errors:122,warns:57,resets:0},stars:1.45},{njs:12,offset:0,notes:880,bombs:0,obstacles:19,nps:3.613,length:519.625,characteristic:"Standard",difficulty:"Expert",events:1975,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:243.574,paritySummary:{errors:104,warns:75,resets:0},stars:2.19}],downloadURL:"https://cdn.beatsaver.com/00e5671e594a6fe621c3605fcc5a0e4466ba6478.zip",coverURL:"https://cdn.beatsaver.com/00e5671e594a6fe621c3605fcc5a0e4466ba6478.jpg",previewURL:"https://cdn.beatsaver.com/00e5671e594a6fe621c3605fcc5a0e4466ba6478.mp3"}],createdAt:"2018-06-11T21:47:41Z",updatedAt:"2018-06-11T21:47:41Z",lastPublishedAt:"2018-06-11T21:47:41Z"},{id:"da60",name:"[Extra Sensory] Dirty Androids - Midnight Lady",description:'Enjoy the ride.\n\nMassive thanks to Nyri0 and Checkthepan for helping with scripts and some math!!\n\n\nThis map was released as a part of the "Extra Sensory" event.\n\nVideo showcase thingy: https://youtu.be/pE_s9bvntA0 (watch tougeVR\'s instead tho)',uploader:{id:4235136,name:"reaxt",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8ab",avatar:"https://cdn.beatsaver.com/avatar/163052863038291970.png",type:"DISCORD"},metadata:{bpm:128,duration:127,songName:"Midnight Lady",songSubName:"",songAuthorName:"Dirty Androids",levelAuthorName:"Reaxt"},stats:{plays:0,downloads:17800,upvotes:6632,downvotes:93,score:.9519},uploaded:"2020-08-20T16:48:21.705Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ee501d7348223470c16ca88eac4a946e41cd11a9",key:"da60",state:"Published",createdAt:"2020-08-20T16:48:21.705Z",sageScore:2,diffs:[{njs:18,offset:0,notes:748,bombs:0,obstacles:4878,nps:6.233,length:256,characteristic:"Standard",difficulty:"ExpertPlus",events:767,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:120,paritySummary:{errors:7,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ee501d7348223470c16ca88eac4a946e41cd11a9.zip",coverURL:"https://cdn.beatsaver.com/ee501d7348223470c16ca88eac4a946e41cd11a9.jpg",previewURL:"https://cdn.beatsaver.com/ee501d7348223470c16ca88eac4a946e41cd11a9.mp3"}],createdAt:"2020-08-20T16:48:21.705Z",updatedAt:"2020-08-20T16:48:21.705Z",lastPublishedAt:"2020-08-20T16:48:21.705Z"},{id:"2087",name:"Panic at the disco - The Greatest Show reimagined | (100K Contest)",description:"Here is a bonus map for the 100K contest! Playing any difficulty will give you 4x the normal chance of winning up to $12000 in prizes!!\r\nBig thank you to the beat saber mapping group for helping me out with a few things, you guys are great!\r\n\r\nTo enter, you need to go to the following website and download the mod installer: https://bsaber.com/100k-contest/\r\n\r\nThe competition is now over, but the maps remain!\r\nVideo Preview: https://www.youtube.com/watch?v=E929e6puEQA",uploader:{id:4785,name:"stumi",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f720",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro",type:"SIMPLE"},metadata:{bpm:77,duration:174,songName:"The greatest show reimagined",songSubName:"Panic at the disco",songAuthorName:"Stumi",levelAuthorName:"stumi"},stats:{plays:0,downloads:26198,upvotes:9073,downvotes:160,score:.9518},uploaded:"2018-11-16T17:57:55Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"afc2a905079d1fcdc9d82fa50e83c842d4d42118",key:"2087",state:"Published",createdAt:"2018-11-16T17:57:55Z",sageScore:5,diffs:[{njs:10,offset:0,notes:252,bombs:0,obstacles:6,nps:1.542,length:209.75,characteristic:"Standard",difficulty:"Easy",events:1328,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.442,paritySummary:{errors:35,warns:26,resets:0}},{njs:10,offset:0,notes:342,bombs:0,obstacles:5,nps:2.092,length:209.75,characteristic:"Standard",difficulty:"Normal",events:1327,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.442,paritySummary:{errors:37,warns:36,resets:0}},{njs:11,offset:0,notes:472,bombs:0,obstacles:5,nps:2.888,length:209.75,characteristic:"Standard",difficulty:"Hard",events:1326,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.442,paritySummary:{errors:37,warns:41,resets:0}},{njs:12,offset:0,notes:565,bombs:0,obstacles:5,nps:3.457,length:209.75,characteristic:"Standard",difficulty:"Expert",events:1329,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.442,paritySummary:{errors:39,warns:30,resets:0}}],downloadURL:"https://cdn.beatsaver.com/afc2a905079d1fcdc9d82fa50e83c842d4d42118.zip",coverURL:"https://cdn.beatsaver.com/afc2a905079d1fcdc9d82fa50e83c842d4d42118.jpg",previewURL:"https://cdn.beatsaver.com/afc2a905079d1fcdc9d82fa50e83c842d4d42118.mp3"}],createdAt:"2018-11-16T17:57:55Z",updatedAt:"2018-11-16T17:57:55Z",lastPublishedAt:"2018-11-16T17:57:55Z"},{id:"747",name:"Technologic - Daft Punk (Update)",description:"Expert / Hard / Normal",uploader:{id:44595,name:"awfulnaut",uniqueSet:!0,hash:"5cff0b7398cc5a672c84edac",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84edac?d=retro",type:"SIMPLE"},metadata:{bpm:127,duration:169,songName:"Technologic",songSubName:"Daft Punk",songAuthorName:"Awfulnaut",levelAuthorName:"awfulnaut"},stats:{plays:0,downloads:26292,upvotes:10662,downvotes:205,score:.9518},uploaded:"2018-06-30T18:30:38Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"831247d7d02e948e5d03622748bb130b5057023d",key:"747",state:"Published",createdAt:"2018-06-30T18:30:38Z",sageScore:6,diffs:[{njs:10,offset:0,notes:375,bombs:334,obstacles:9,nps:2.276,length:350.021,characteristic:"Standard",difficulty:"Normal",events:1321,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:165.364,paritySummary:{errors:62,warns:48,resets:110}},{njs:10,offset:0,notes:480,bombs:306,obstacles:3,nps:2.913,length:350,characteristic:"Standard",difficulty:"Hard",events:1321,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:165.354,paritySummary:{errors:31,warns:59,resets:96}},{njs:10,offset:0,notes:662,bombs:138,obstacles:3,nps:4.018,length:350,characteristic:"Standard",difficulty:"Expert",events:1327,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:165.354,paritySummary:{errors:42,warns:68,resets:43}}],downloadURL:"https://cdn.beatsaver.com/831247d7d02e948e5d03622748bb130b5057023d.zip",coverURL:"https://cdn.beatsaver.com/831247d7d02e948e5d03622748bb130b5057023d.jpg",previewURL:"https://cdn.beatsaver.com/831247d7d02e948e5d03622748bb130b5057023d.mp3"}],createdAt:"2018-06-30T18:30:38Z",updatedAt:"2018-06-30T18:30:38Z",lastPublishedAt:"2018-06-30T18:30:38Z"},{id:"1023",name:"I Wanna Be Like You (Sim Gretina Remix)",description:"Who doesn't love The Jungle Book? \r\nPreview: https://youtu.be/DXdo1-FlxSk",uploader:{id:4285668,name:"connorjc",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fb89",avatar:"https://cdn.beatsaver.com/avatar/99724057217355776.png",type:"DISCORD"},metadata:{bpm:110,duration:172,songName:"I Wanna Be Like You (Sim Gretina Remix)",songSubName:"Jungle Book",songAuthorName:"ConnorJC",levelAuthorName:"ConnorJC"},stats:{plays:0,downloads:15215,upvotes:7020,downvotes:108,score:.9513},uploaded:"2018-08-16T13:41:07Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"638cf20187a122490b4662555e9072cd8073146b",key:"1023",state:"Published",createdAt:"2018-08-16T13:41:07Z",sageScore:4,diffs:[{njs:10,offset:0,notes:512,bombs:0,obstacles:52,nps:3.276,length:286.5,characteristic:"Standard",difficulty:"Expert",events:486,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:156.273,paritySummary:{errors:81,warns:50,resets:0}}],downloadURL:"https://cdn.beatsaver.com/638cf20187a122490b4662555e9072cd8073146b.zip",coverURL:"https://cdn.beatsaver.com/638cf20187a122490b4662555e9072cd8073146b.jpg",previewURL:"https://cdn.beatsaver.com/638cf20187a122490b4662555e9072cd8073146b.mp3"}],createdAt:"2018-08-16T13:41:07Z",updatedAt:"2018-08-16T13:41:07Z",lastPublishedAt:"2018-08-16T13:41:07Z"},{id:"18cc",name:"Du Hast by Rammstein (Kole Edit)",description:"Many has been asking, many have been waiting patiently, many have been confused as to why this hasn't been done before, but now it's here and now you can have it too; here's Du Hast by Rammstein now in Beat Saber!\r\n\r\nSong has been edited (shortened) to be tighter and not too repetitive.\r\n\r\nPreview:\r\nhttps://youtu.be/3i1mf2EGSjc\r\n\r\nBPM: 125.09\r\nDuration: 2:57\r\nEasy, Normal, Hard and Expert difficulties.\r\n\r\nEasy: 251, 0 obstacles, 0 mines\r\nNormal: 444 notes, 0 obstacles, 0 mines\r\nHard: 581 notes, 0 obstacles, 0 mines\r\nExpert: 437 notes, 0 obstacles, 0 mines\r\n\r\nThanks to VenclaireVR, Redmagi, Horseman, Saut and elliotttate for playtesting!\r\n\r\nDownload the One Saber version of this map here:\r\nhttps://beatsaver.com/browse/detail/6784-6436\r\n\r\nEnjoy!",uploader:{id:4285318,name:"kolezan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fcbb",avatar:"https://cdn.beatsaver.com/avatar/220513618763055106.png",type:"DISCORD"},metadata:{bpm:125,duration:177,songName:"Du Hast",songSubName:"Rammstein",songAuthorName:"Level by Kolezan",levelAuthorName:"Kolezan"},stats:{plays:0,downloads:19197,upvotes:9801,downvotes:188,score:.9511},uploaded:"2018-10-05T06:17:10Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6df961680ead49e2d92de1a95b789e0ce4a026db",key:"18cc",state:"Published",createdAt:"2018-10-05T06:17:10Z",sageScore:4,diffs:[{njs:10,offset:0,notes:251,bombs:0,obstacles:0,nps:1.487,length:352,characteristic:"Standard",difficulty:"Easy",events:581,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.96,paritySummary:{errors:65,warns:24,resets:0}},{njs:11,offset:0,notes:444,bombs:0,obstacles:0,nps:2.63,length:352,characteristic:"Standard",difficulty:"Normal",events:581,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.96,paritySummary:{errors:74,warns:35,resets:0}},{njs:12,offset:0,notes:581,bombs:0,obstacles:0,nps:3.441,length:352,characteristic:"Standard",difficulty:"Hard",events:581,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.96,paritySummary:{errors:83,warns:44,resets:0}},{njs:12,offset:0,notes:723,bombs:0,obstacles:0,nps:4.282,length:352,characteristic:"Standard",difficulty:"Expert",events:581,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.96,paritySummary:{errors:57,warns:57,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6df961680ead49e2d92de1a95b789e0ce4a026db.zip",coverURL:"https://cdn.beatsaver.com/6df961680ead49e2d92de1a95b789e0ce4a026db.jpg",previewURL:"https://cdn.beatsaver.com/6df961680ead49e2d92de1a95b789e0ce4a026db.mp3"}],createdAt:"2018-10-05T06:17:10Z",updatedAt:"2018-10-05T06:17:10Z",lastPublishedAt:"2018-10-05T06:17:10Z"},{id:"23c3",name:"Without Me (ILLENIUM Remix) - Halsey",description:"All 5 Difficulties\r\nBPM: 136\r\nNote Jumps Speed from E+to Easy: 14, 12, 11, 10, 10\r\n\r\nLemme know what you think!",uploader:{id:30754,name:"styngme",uniqueSet:!1,hash:"5cff0b7298cc5a672c84e9cd",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9cd?d=retro",type:"SIMPLE"},metadata:{bpm:136,duration:247,songName:"Without Me - ILLENIUM Remix",songSubName:"Halsey, ILLENIUM",songAuthorName:"StyngMe",levelAuthorName:"styngme"},stats:{plays:0,downloads:23662,upvotes:8757,downvotes:162,score:.9507},uploaded:"2018-12-04T15:46:54Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a684cee0d634b9bb59eef234665fd28ef27876ac",key:"23c3",state:"Published",createdAt:"2018-12-04T15:46:54Z",sageScore:7,diffs:[{njs:10,offset:0,notes:571,bombs:0,obstacles:78,nps:2.652,length:488,characteristic:"Standard",difficulty:"Easy",events:2901,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.294,paritySummary:{errors:5,warns:2,resets:0}},{njs:10,offset:0,notes:747,bombs:0,obstacles:78,nps:3.47,length:488,characteristic:"Standard",difficulty:"Normal",events:2901,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.294,paritySummary:{errors:51,warns:40,resets:0}},{njs:11,offset:0,notes:788,bombs:0,obstacles:78,nps:3.66,length:488,characteristic:"Standard",difficulty:"Hard",events:2901,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.294,paritySummary:{errors:58,warns:40,resets:0}},{njs:12,offset:0,notes:850,bombs:0,obstacles:78,nps:3.948,length:488,characteristic:"Standard",difficulty:"Expert",events:2901,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.294,paritySummary:{errors:72,warns:69,resets:0}},{njs:14,offset:0,notes:872,bombs:0,obstacles:78,nps:4.05,length:488,characteristic:"Standard",difficulty:"ExpertPlus",events:2901,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.294,paritySummary:{errors:67,warns:70,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a684cee0d634b9bb59eef234665fd28ef27876ac.zip",coverURL:"https://cdn.beatsaver.com/a684cee0d634b9bb59eef234665fd28ef27876ac.jpg",previewURL:"https://cdn.beatsaver.com/a684cee0d634b9bb59eef234665fd28ef27876ac.mp3"}],createdAt:"2018-12-04T15:46:54Z",updatedAt:"2018-12-04T15:46:54Z",lastPublishedAt:"2018-12-04T15:46:54Z"},{id:"38ff",name:"Ievan Polkka",description:"",uploader:{id:30164,name:"fraktar",uniqueSet:!0,hash:"5cff0b7698cc5a672c8551b0",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8551b0?d=retro",type:"SIMPLE"},metadata:{bpm:119,duration:147,songName:"Ievan Polkka",songSubName:"Hatsune Miku",songAuthorName:"Fraktar",levelAuthorName:"Fraktar"},stats:{plays:0,downloads:17204,upvotes:8751,downvotes:167,score:.9501},uploaded:"2019-02-23T15:58:08Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"72bf749f5df632cd103fccd734c9fd5cc7596caa",key:"38ff",state:"Published",createdAt:"2019-02-23T15:58:08Z",sageScore:5,diffs:[{njs:12,offset:0,notes:734,bombs:0,obstacles:16,nps:5.09,length:286,characteristic:"Standard",difficulty:"Expert",events:1360,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:144.202,paritySummary:{errors:70,warns:39,resets:0}}],downloadURL:"https://cdn.beatsaver.com/72bf749f5df632cd103fccd734c9fd5cc7596caa.zip",coverURL:"https://cdn.beatsaver.com/72bf749f5df632cd103fccd734c9fd5cc7596caa.jpg",previewURL:"https://cdn.beatsaver.com/72bf749f5df632cd103fccd734c9fd5cc7596caa.mp3"}],createdAt:"2019-02-23T15:58:08Z",updatedAt:"2019-02-23T15:58:08Z",lastPublishedAt:"2019-02-23T15:58:08Z"},{id:"8553",name:"Blinding Lights - The Weeknd",description:"This map was supposed to release last year and have a 90 degree difficulty but it got cut because life ¯\\_(ツ)_/¯ Fantastic song though.\n\nExpert Playthrough : https://youtu.be/GonnTYPmDVY",uploader:{id:13320,name:"novashaft",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ee55",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee55?d=retro",type:"SIMPLE"},metadata:{bpm:171,duration:199,songName:"Blinding Lights",songSubName:"",songAuthorName:"The Weeknd",levelAuthorName:"NovaShaft"},stats:{plays:0,downloads:34508,upvotes:11999,downvotes:269,score:.95},uploaded:"2020-02-08T17:26:23.499Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"17d298f2bf78b453cd66474ce268ae9dac9fab46",key:"8553",state:"Published",createdAt:"2020-02-08T17:26:23.499Z",sageScore:7,diffs:[{njs:10,offset:0,notes:271,bombs:0,obstacles:15,nps:1.482,length:521,characteristic:"Standard",difficulty:"Easy",events:3071,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:182.807,paritySummary:{errors:71,warns:4,resets:0}},{njs:13,offset:1,notes:457,bombs:16,obstacles:25,nps:2.5,length:521,characteristic:"Standard",difficulty:"Hard",events:3071,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:182.807,paritySummary:{errors:6,warns:7,resets:1}},{njs:17,offset:.5,notes:594,bombs:44,obstacles:33,nps:3.249,length:521,characteristic:"Standard",difficulty:"Expert",events:3146,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:182.807,paritySummary:{errors:14,warns:13,resets:0}}],downloadURL:"https://cdn.beatsaver.com/17d298f2bf78b453cd66474ce268ae9dac9fab46.zip",coverURL:"https://cdn.beatsaver.com/17d298f2bf78b453cd66474ce268ae9dac9fab46.jpg",previewURL:"https://cdn.beatsaver.com/17d298f2bf78b453cd66474ce268ae9dac9fab46.mp3"}],createdAt:"2020-02-08T17:26:23.499Z",updatedAt:"2020-02-08T17:26:23.499Z",lastPublishedAt:"2020-02-08T17:26:23.499Z"},{id:"2e9e",name:"YoiYoi Kokon - REOL",description:"Put on your yukata; lets travel back in time and enjoy ourselves! Here's REOL's probably most popular song mapped by me, YoiYoi Kokon (宵々古今)!\r\n\r\nThe audio version of the song is that of the music video (slightly edited by me) as I love the addition of the fireworks in the last part of the song. Together with the crowd in the intro this makes it feel like you're attending a festival.\r\n\r\nExpert+ is basically Expert but with no pauses and with the melody followed instead of the shouts.\r\n\r\nPreview:\r\nhttps://youtu.be/G61m6Au2foM\r\n\r\nBPM: 150\r\nDuration: 4:16\r\nEasy, Normal, Hard, Expert and Expert+ difficulties.\r\n\r\nEasy: 332, 12 obstacles, 0 mines\r\nNormal: 471 notes, 17 obstacles, 0 mines\r\nHard: 679 notes, 17 obstacles, 0 mines\r\nExpert: 954 notes, 17 obstacles, 0 mines\r\nExpert+: 1086 notes, 1 obstacles, 0 mines\r\n\r\nThanks to Redmagi, Aithke, aggrogahu, Don and Emperor of the Internet for playtesting!\r\n\r\nEnjoy!",uploader:{id:4285318,name:"kolezan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fcbb",avatar:"https://cdn.beatsaver.com/avatar/220513618763055106.png",type:"DISCORD"},metadata:{bpm:150,duration:256,songName:"YoiYoi Kokon",songSubName:"REOL",songAuthorName:"Kolezan",levelAuthorName:"Kolezan"},stats:{plays:0,downloads:13836,upvotes:6975,downvotes:118,score:.9499},uploaded:"2019-01-18T09:22:30Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"766a222b102b6522cd5d31e82ec7adc7c5ff011e",key:"2e9e",state:"Published",createdAt:"2019-01-18T09:22:30Z",sageScore:7,diffs:[{njs:9,offset:0,notes:332,bombs:0,obstacles:12,nps:1.349,length:615.203,characteristic:"Standard",difficulty:"Easy",events:2115,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:246.081,paritySummary:{errors:48,warns:24,resets:0}},{njs:10,offset:0,notes:471,bombs:0,obstacles:17,nps:1.914,length:615.203,characteristic:"Standard",difficulty:"Normal",events:2115,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:246.081,paritySummary:{errors:67,warns:38,resets:0}},{njs:11,offset:0,notes:679,bombs:0,obstacles:17,nps:2.759,length:615.203,characteristic:"Standard",difficulty:"Hard",events:2115,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:246.081,paritySummary:{errors:79,warns:71,resets:0}},{njs:12.5,offset:0,notes:954,bombs:0,obstacles:17,nps:3.877,length:615.203,characteristic:"Standard",difficulty:"Expert",events:2115,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:246.081,paritySummary:{errors:104,warns:144,resets:0}},{njs:12.5,offset:0,notes:1086,bombs:0,obstacles:1,nps:4.413,length:615.203,characteristic:"Standard",difficulty:"ExpertPlus",events:2115,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:246.081,paritySummary:{errors:102,warns:152,resets:0}}],downloadURL:"https://cdn.beatsaver.com/766a222b102b6522cd5d31e82ec7adc7c5ff011e.zip",coverURL:"https://cdn.beatsaver.com/766a222b102b6522cd5d31e82ec7adc7c5ff011e.jpg",previewURL:"https://cdn.beatsaver.com/766a222b102b6522cd5d31e82ec7adc7c5ff011e.mp3"}],createdAt:"2019-01-18T09:22:30Z",updatedAt:"2019-01-18T09:22:30Z",lastPublishedAt:"2019-01-18T09:22:30Z"},{id:"30fd",name:"Love The Way You Lie (ft. Rihanna) - Eminem, Rihanna | Charted by StyngMe",description:"I hope you enjoy!\r\nBPM: 87\r\nDifficulties: ALL\r\nNote Jump Speed for E+ through Easy: 16, 14, 12, 12, 11",uploader:{id:30754,name:"styngme",uniqueSet:!1,hash:"5cff0b7298cc5a672c84e9cd",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9cd?d=retro",type:"SIMPLE"},metadata:{bpm:87,duration:265,songName:"Love The Way You Lie (ft. Rihanna)",songSubName:"Eminem, Rihanna",songAuthorName:"StyngMe",levelAuthorName:"styngme"},stats:{plays:0,downloads:24461,upvotes:7923,downvotes:147,score:.9497},uploaded:"2019-01-25T15:48:22Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8161daf97cab8c95aea0556549b4b8cfb29a13d3",key:"30fd",state:"Published",createdAt:"2019-01-25T15:48:22Z",sageScore:7,diffs:[{njs:11,offset:0,notes:387,bombs:0,obstacles:18,nps:1.661,length:337.75,characteristic:"Standard",difficulty:"Easy",events:2082,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:232.931,paritySummary:{errors:28,warns:28,resets:0}},{njs:12,offset:0,notes:503,bombs:0,obstacles:6,nps:2.159,length:337.75,characteristic:"Standard",difficulty:"Normal",events:2082,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:232.931,paritySummary:{errors:21,warns:36,resets:0}},{njs:12,offset:0,notes:617,bombs:0,obstacles:0,nps:2.649,length:337.75,characteristic:"Standard",difficulty:"Hard",events:2082,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:232.931,paritySummary:{errors:37,warns:38,resets:0}},{njs:14,offset:0,notes:1006,bombs:0,obstacles:0,nps:4.319,length:337.75,characteristic:"Standard",difficulty:"Expert",events:2082,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:232.931,paritySummary:{errors:24,warns:55,resets:0}},{njs:16,offset:0,notes:1207,bombs:0,obstacles:0,nps:5.182,length:337.75,characteristic:"Standard",difficulty:"ExpertPlus",events:2085,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:232.931,paritySummary:{errors:39,warns:76,resets:0}}],downloadURL:"https://cdn.beatsaver.com/8161daf97cab8c95aea0556549b4b8cfb29a13d3.zip",coverURL:"https://cdn.beatsaver.com/8161daf97cab8c95aea0556549b4b8cfb29a13d3.jpg",previewURL:"https://cdn.beatsaver.com/8161daf97cab8c95aea0556549b4b8cfb29a13d3.mp3"}],createdAt:"2019-01-25T15:48:22Z",updatedAt:"2019-01-25T15:48:22Z",lastPublishedAt:"2019-01-25T15:48:22Z"},{id:"26f6",name:"IGNITE (Ranked Version) [Sword Art Online Season 2 Opening] - Aoi Eir",description:"Trying to get this version ranked! New version with changes according to the ranking criteria: Double directional notes fixed, flow improvements, removed fast dodge walls on bridge section.",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:171,duration:244,songName:"IGNITE",songSubName:"Aoi Eir",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:23842,upvotes:11061,downvotes:245,score:.9495},uploaded:"2018-12-20T01:21:47Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"125b07ebcc06fe9667e83fc2d6b9ae5ecbc72e8c",key:"26f6",state:"Published",createdAt:"2018-12-20T01:21:47Z",sageScore:6,diffs:[{njs:14,offset:0,notes:1093,bombs:16,obstacles:16,nps:4.594,length:678,characteristic:"Standard",difficulty:"Expert",events:1642,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:237.895,paritySummary:{errors:77,warns:79,resets:0},stars:3.21}],downloadURL:"https://cdn.beatsaver.com/125b07ebcc06fe9667e83fc2d6b9ae5ecbc72e8c.zip",coverURL:"https://cdn.beatsaver.com/125b07ebcc06fe9667e83fc2d6b9ae5ecbc72e8c.jpg",previewURL:"https://cdn.beatsaver.com/125b07ebcc06fe9667e83fc2d6b9ae5ecbc72e8c.mp3"}],createdAt:"2018-12-20T01:21:47Z",updatedAt:"2018-12-20T01:21:47Z",lastPublishedAt:"2018-12-20T01:21:47Z"},{id:"6b55",name:"ABIS & Signal & Tasha Baxter - The Wall (Buunshin Remix)",description:"https://youtu.be/xEowRTlHvuI",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:172,duration:271,songName:"The Wall",songSubName:"(Buunshin Remix)",songAuthorName:"ABIS & Signal & Tasha Baxter",levelAuthorName:"Rustic"},stats:{plays:0,downloads:8045,upvotes:4697,downvotes:61,score:.9491},uploaded:"2019-10-21T13:30:47.405Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e855d1a7b17904322aa3ebaf3bb002421bce568a",key:"6b55",state:"Published",createdAt:"2019-10-21T13:30:47.405Z",sageScore:6,diffs:[{njs:20,offset:0,notes:449,bombs:0,obstacles:9581,nps:1.828,length:704,characteristic:"Standard",difficulty:"Hard",events:7859,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:245.581,paritySummary:{errors:0,warns:0,resets:0}},{njs:20,offset:0,notes:606,bombs:0,obstacles:9589,nps:2.468,length:704,characteristic:"Standard",difficulty:"Expert",events:7808,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:245.581,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e855d1a7b17904322aa3ebaf3bb002421bce568a.zip",coverURL:"https://cdn.beatsaver.com/e855d1a7b17904322aa3ebaf3bb002421bce568a.jpg",previewURL:"https://cdn.beatsaver.com/e855d1a7b17904322aa3ebaf3bb002421bce568a.mp3"}],createdAt:"2019-10-21T13:30:47.405Z",updatedAt:"2019-10-21T13:30:47.405Z",lastPublishedAt:"2019-10-21T13:30:47.405Z"},{id:"5e81",name:"Stressed Out - Twenty One Pilots",description:'"Stressed Out" is a song by American musical duo Twenty One Pilots, for their fourth studio album, Blurryface. Written by Tyler Joseph and produced by Mike Elizondo, the lyrics discuss the harsh end of adolescence and the transition to adulthood.',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:170,duration:203,songName:"Stressed Out",songSubName:"",songAuthorName:"Twenty One Pilots",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:18746,upvotes:6062,downvotes:98,score:.9491},uploaded:"2019-08-22T14:20:38.731Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"068a80d89857a6a2221f54e8a5d374584b2db77e",key:"5e81",state:"Published",createdAt:"2019-08-22T14:20:38.731Z",sageScore:6,diffs:[{njs:14,offset:0,notes:651,bombs:0,obstacles:42,nps:3.282,length:562,characteristic:"Standard",difficulty:"Expert",events:1670,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.353,paritySummary:{errors:69,warns:69,resets:0}}],downloadURL:"https://cdn.beatsaver.com/068a80d89857a6a2221f54e8a5d374584b2db77e.zip",coverURL:"https://cdn.beatsaver.com/068a80d89857a6a2221f54e8a5d374584b2db77e.jpg",previewURL:"https://cdn.beatsaver.com/068a80d89857a6a2221f54e8a5d374584b2db77e.mp3"}],createdAt:"2019-08-22T14:20:38.731Z",updatedAt:"2019-08-22T14:20:38.731Z",lastPublishedAt:"2019-08-22T14:20:38.731Z"},{id:"5552",name:"It's Tricky - Run DMC",description:"\"It's Tricky\" is the fourth and final single released from Run-DMC's third album, Raising Hell which was released early in 1987. \n\nThis is one of favorite workout songs, can't believe I haven't mapped it yet :P",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:128,duration:184,songName:"It's Tricky",songSubName:"",songAuthorName:"Run DMC",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:13372,upvotes:4472,downvotes:56,score:.9489},uploaded:"2019-07-02T17:23:10.798Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9027d4274febf8722078a5f70b51da58cf433322",key:"5552",state:"Published",createdAt:"2019-07-02T17:23:10.798Z",sageScore:6,diffs:[{njs:14,offset:0,notes:721,bombs:0,obstacles:8,nps:3.998,length:384.688,characteristic:"Standard",difficulty:"Expert",events:3029,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.322,paritySummary:{errors:34,warns:36,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9027d4274febf8722078a5f70b51da58cf433322.zip",coverURL:"https://cdn.beatsaver.com/9027d4274febf8722078a5f70b51da58cf433322.jpg",previewURL:"https://cdn.beatsaver.com/9027d4274febf8722078a5f70b51da58cf433322.mp3"}],createdAt:"2019-07-02T17:23:10.798Z",updatedAt:"2019-07-02T17:23:10.798Z",lastPublishedAt:"2019-07-02T17:23:10.798Z"},{id:"3038",name:"Moves Like Jagger - Maroon 5 ft. Christina Aguilera",description:"See it in Action: https://www.youtube.com/watch?v=buZypCnR1r8",uploader:{id:38202,name:"fafurion",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f945",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f945?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:204,songName:"Moves Like Jagger",songSubName:"Maroon 5 ft. Christina Aguilera",songAuthorName:"Fafurion",levelAuthorName:"fafurion"},stats:{plays:0,downloads:24035,upvotes:7173,downvotes:137,score:.9482},uploaded:"2019-01-23T00:01:22Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6f5e229b8ec73c9e448c00a680548b0ce25918ee",key:"3038",state:"Published",createdAt:"2019-01-23T00:01:22Z",sageScore:5,diffs:[{njs:10,offset:0,notes:297,bombs:0,obstacles:88,nps:1.547,length:409.5,characteristic:"Standard",difficulty:"Easy",events:2966,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.953,paritySummary:{errors:21,warns:30,resets:0}},{njs:10,offset:0,notes:343,bombs:0,obstacles:88,nps:1.787,length:409.5,characteristic:"Standard",difficulty:"Normal",events:2966,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.953,paritySummary:{errors:29,warns:33,resets:0}},{njs:12,offset:0,notes:524,bombs:0,obstacles:125,nps:2.73,length:409.5,characteristic:"Standard",difficulty:"Hard",events:2966,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.953,paritySummary:{errors:40,warns:62,resets:0}},{njs:12,offset:0,notes:695,bombs:0,obstacles:100,nps:3.621,length:409.5,characteristic:"Standard",difficulty:"Expert",events:2966,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.953,paritySummary:{errors:81,warns:108,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6f5e229b8ec73c9e448c00a680548b0ce25918ee.zip",coverURL:"https://cdn.beatsaver.com/6f5e229b8ec73c9e448c00a680548b0ce25918ee.jpg",previewURL:"https://cdn.beatsaver.com/6f5e229b8ec73c9e448c00a680548b0ce25918ee.mp3"}],createdAt:"2019-01-23T00:01:22Z",updatedAt:"2019-01-23T00:01:22Z",lastPublishedAt:"2019-01-23T00:01:22Z"},{id:"bd3",name:"New Rules - Dua Lipa",description:"Difficulties: Expert+, Expert, Hard, Normal\r\nYouTube Preview: https://youtu.be/Ohq6cA_1NAE\r\nLighting by Heisenberg: https://beatsaver.com/index.php/browse/byuser/1089",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:116,duration:211,songName:"New Rules",songSubName:"Dua Lipa",songAuthorName:"BennyDaBeast (Lighting: Heisenberg)",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:18879,upvotes:7509,downvotes:149,score:.948},uploaded:"2018-07-25T20:53:52Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"674b1b540ac5851c92c8cde7dd456698f5a733c4",key:"bd3",state:"Published",createdAt:"2018-07-25T20:53:52Z",sageScore:4,diffs:[{njs:10,offset:0,notes:423,bombs:0,obstacles:7,nps:2.055,length:398,characteristic:"Standard",difficulty:"Normal",events:2753,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.862,paritySummary:{errors:81,warns:58,resets:0}},{njs:10,offset:0,notes:507,bombs:0,obstacles:32,nps:2.463,length:398,characteristic:"Standard",difficulty:"Hard",events:2753,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.862,paritySummary:{errors:73,warns:67,resets:0}},{njs:10,offset:0,notes:771,bombs:0,obstacles:32,nps:3.745,length:398.003,characteristic:"Standard",difficulty:"Expert",events:2753,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.863,paritySummary:{errors:95,warns:124,resets:0}},{njs:10,offset:0,notes:873,bombs:0,obstacles:32,nps:4.241,length:398,characteristic:"Standard",difficulty:"ExpertPlus",events:2753,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.862,paritySummary:{errors:103,warns:146,resets:0}}],downloadURL:"https://cdn.beatsaver.com/674b1b540ac5851c92c8cde7dd456698f5a733c4.zip",coverURL:"https://cdn.beatsaver.com/674b1b540ac5851c92c8cde7dd456698f5a733c4.jpg",previewURL:"https://cdn.beatsaver.com/674b1b540ac5851c92c8cde7dd456698f5a733c4.mp3"}],createdAt:"2018-07-25T20:53:52Z",updatedAt:"2018-07-25T20:53:52Z",lastPublishedAt:"2018-07-25T20:53:52Z"},{id:"6d96",name:"League of Legends - Phoenix (ft. Cailin Russo and Chrissy Costanza)",description:"The Worlds 2019 theme for League of Legends.\nVideo: https://youtu.be/aUTcwyZ9LmI\nExpert+ Video: https://www.youtube.com/watch?v=-uh4WOhZmQs\n\nEasy: Notes: 245 NPS: 1.23 NJS: 12\nNormal: Notes: 307 NPS: 1.54 NJS: 14\nHard: Notes: 428 NPS: 2.15 NJS: 16\nExpert: Notes: 504 NPS: 2.53 NJS: 16\nExpert+: Notes: 664 NPS: 3.33 NJS: 17\n\nCheck out my lightshows here: https://www.youtube.com/playlist?list=PLwl6dYq72JOYu1BnKl5WATa4Dh__ZJmuN",uploader:{id:14808,name:"halcyon12",uniqueSet:!0,hash:"5cff0b7698cc5a672c8547ad",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8547ad?d=retro",type:"SIMPLE"},metadata:{bpm:168,duration:199,songName:"Phoenix",songSubName:"ft. Cailin Russo and Chrissy Costanza",songAuthorName:"League of Legends",levelAuthorName:"Halcyon12"},stats:{plays:0,downloads:15278,upvotes:6407,downvotes:122,score:.9471},uploaded:"2019-11-02T00:52:14.279Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1fd9078f4b357143390a8d24664736f78b4224a9",key:"6d96",state:"Published",createdAt:"2019-11-02T00:52:14.279Z",sageScore:6,diffs:[{njs:12,offset:0,notes:245,bombs:0,obstacles:20,nps:1.376,length:498.5,characteristic:"Standard",difficulty:"Easy",events:2347,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.036,paritySummary:{errors:11,warns:1,resets:0}},{njs:14,offset:1.25,notes:307,bombs:0,obstacles:21,nps:1.724,length:498.5,characteristic:"Standard",difficulty:"Normal",events:2347,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.036,paritySummary:{errors:7,warns:0,resets:0}},{njs:16,offset:.75,notes:428,bombs:0,obstacles:25,nps:2.404,length:498.5,characteristic:"Standard",difficulty:"Hard",events:2347,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.036,paritySummary:{errors:2,warns:0,resets:0}},{njs:16,offset:.25,notes:504,bombs:0,obstacles:20,nps:2.828,length:499,characteristic:"Standard",difficulty:"Expert",events:2347,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.214,paritySummary:{errors:1,warns:1,resets:0}},{njs:17,offset:0,notes:664,bombs:0,obstacles:92,nps:3.525,length:527.5,characteristic:"Standard",difficulty:"ExpertPlus",events:2347,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.393,paritySummary:{errors:0,warns:0,resets:0}},{njs:12,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"ExpertPlus",events:2347,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1fd9078f4b357143390a8d24664736f78b4224a9.zip",coverURL:"https://cdn.beatsaver.com/1fd9078f4b357143390a8d24664736f78b4224a9.jpg",previewURL:"https://cdn.beatsaver.com/1fd9078f4b357143390a8d24664736f78b4224a9.mp3"}],createdAt:"2019-11-02T00:52:14.279Z",updatedAt:"2019-11-02T00:52:14.279Z",lastPublishedAt:"2019-11-02T00:52:14.279Z"},{id:"6366",name:"Star Sky - Two Steps From Hell",description:"68\nNormal wall --- 43 walls\nHyper wall --- 6631 walls\n\ndoodle :)",uploader:{id:4285521,name:"ejiejidayo",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fc58",avatar:"https://cdn.beatsaver.com/avatar/224894241279574016.png",type:"DISCORD"},metadata:{bpm:130,duration:330,songName:"Star Sky Two Steps From Hell",songSubName:"",songAuthorName:".",levelAuthorName:"ejiejidayo"},stats:{plays:0,downloads:9471,upvotes:3452,downvotes:43,score:.9459},uploaded:"2019-09-14T19:59:45.575Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"323975ef9eaec337c8208dc864e766289e3d5ef1",key:"6366",state:"Published",createdAt:"2019-09-14T19:59:45.575Z",sageScore:5,diffs:[{njs:16,offset:0,notes:1218,bombs:0,obstacles:43,nps:3.754,length:703,characteristic:"Standard",difficulty:"Hard",events:1044,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:324.462,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:1218,bombs:0,obstacles:6631,nps:3.754,length:703,characteristic:"Standard",difficulty:"Expert",events:1044,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:324.462,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/323975ef9eaec337c8208dc864e766289e3d5ef1.zip",coverURL:"https://cdn.beatsaver.com/323975ef9eaec337c8208dc864e766289e3d5ef1.jpg",previewURL:"https://cdn.beatsaver.com/323975ef9eaec337c8208dc864e766289e3d5ef1.mp3"}],createdAt:"2019-09-14T19:59:45.575Z",updatedAt:"2019-09-14T19:59:45.575Z",lastPublishedAt:"2019-09-14T19:59:45.575Z"},{id:"2005",name:"New Divide - Linkin Park - 100k Contest",description:"This is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes. Go to https://bsaber.com/100k-contest/ to register!\nhttps://www.youtube.com/watch?v=deWMNAw03QI&t=28s\n\nhttps://twitter.com/TheDownyCat\nhttps://www.twitch.tv/downycat\nhttps://streamlabs.com/downycat/tip",uploader:{id:4285982,name:"downycat",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ede5",avatar:"https://cdn.beatsaver.com/avatar/173538829888782336.png",type:"DISCORD"},metadata:{bpm:118,duration:268,songName:"New Divide",songSubName:"Linkin Park",songAuthorName:"DownyCat",levelAuthorName:"downycat"},stats:{plays:0,downloads:16063,upvotes:4873,downvotes:83,score:.9459},uploaded:"2018-11-13T00:58:32Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"be4a33ad1b1caef9f1f42b680ca1a9087db19ffe",key:"2005",state:"Published",createdAt:"2018-11-13T00:58:32Z",sageScore:6,diffs:[{njs:13,offset:0,notes:353,bombs:0,obstacles:78,nps:1.363,length:509.5,characteristic:"Standard",difficulty:"Easy",events:2605,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:259.068,paritySummary:{errors:29,warns:1,resets:0}},{njs:13,offset:0,notes:589,bombs:0,obstacles:18,nps:2.269,length:510.5,characteristic:"Standard",difficulty:"Normal",events:2605,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:259.576,paritySummary:{errors:12,warns:6,resets:0}},{njs:13,offset:0,notes:893,bombs:0,obstacles:13,nps:3.44,length:510.5,characteristic:"Standard",difficulty:"Hard",events:2605,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:259.576,paritySummary:{errors:16,warns:24,resets:0}},{njs:13,offset:0,notes:1167,bombs:0,obstacles:25,nps:4.496,length:510.5,characteristic:"Standard",difficulty:"Expert",events:2605,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:259.576,paritySummary:{errors:38,warns:48,resets:0}}],downloadURL:"https://cdn.beatsaver.com/be4a33ad1b1caef9f1f42b680ca1a9087db19ffe.zip",coverURL:"https://cdn.beatsaver.com/be4a33ad1b1caef9f1f42b680ca1a9087db19ffe.jpg",previewURL:"https://cdn.beatsaver.com/be4a33ad1b1caef9f1f42b680ca1a9087db19ffe.mp3"}],createdAt:"2018-11-13T00:58:32Z",updatedAt:"2018-11-13T00:58:32Z",lastPublishedAt:"2018-11-13T00:58:32Z"},{id:"d7fa",name:"Geoxor - Gloom [Wallmap]",description:"REUPLOAD due to last minute mapping error\n\nSpecial thanks to:\nNyri0 - For providing scripts that were crucial to making this map possible, and for helping me along the way.\nLayanmeta - For giving me so much encouragement throughout the final stages and making a brilliant YouTube video on this map.\nBSMG discord - For the continued support throughout the development process\nAll you people/birds - For playing my map :D\n\nBRIAN HAS BECOME SENTIENT. ALL HAIL BRIAN",uploader:{id:18761,name:"minething",uniqueSet:!0,hash:"5e9b4ead16c9680006287387",avatar:"https://www.gravatar.com/avatar/5e9b4ead16c9680006287387?d=retro",type:"SIMPLE"},metadata:{bpm:93,duration:167,songName:"Gloom",songSubName:"",songAuthorName:"Geoxor",levelAuthorName:"Mine Thing"},stats:{plays:0,downloads:8341,upvotes:2314,downvotes:15,score:.9457},uploaded:"2020-08-16T19:13:40.774Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"823b4e880baac024728ae96a7c20e28026c4585d",key:"d7fa",state:"Published",createdAt:"2020-08-16T19:13:40.774Z",sageScore:3,diffs:[{njs:12,offset:6,notes:0,bombs:0,obstacles:15605,nps:0,length:0,characteristic:"Standard",difficulty:"Easy",events:144,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:12,offset:6,notes:202,bombs:0,obstacles:15605,nps:1.309,length:239.125,characteristic:"Standard",difficulty:"Hard",events:144,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:154.274,paritySummary:{errors:48,warns:6,resets:0}},{njs:12,offset:6,notes:411,bombs:4,obstacles:15605,nps:2.665,length:239,characteristic:"Standard",difficulty:"Expert",events:144,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:154.194,paritySummary:{errors:0,warns:0,resets:1}},{njs:12,offset:3,notes:411,bombs:4,obstacles:12340,nps:2.665,length:239,characteristic:"Standard",difficulty:"ExpertPlus",events:144,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:154.194,paritySummary:{errors:0,warns:0,resets:1}}],downloadURL:"https://cdn.beatsaver.com/823b4e880baac024728ae96a7c20e28026c4585d.zip",coverURL:"https://cdn.beatsaver.com/823b4e880baac024728ae96a7c20e28026c4585d.jpg",previewURL:"https://cdn.beatsaver.com/823b4e880baac024728ae96a7c20e28026c4585d.mp3"}],createdAt:"2020-08-16T19:13:40.774Z",updatedAt:"2020-08-16T19:13:40.774Z",lastPublishedAt:"2020-08-16T19:13:40.774Z"},{id:"116b0",name:"Sakuzyo - Lost Memory[Wall Map]",description:"https://www.youtube.com/watch?v=Ha0199UiDUQ\nMy first noodle extensions map\nMay cause performance issue :)\nRequirements:Noodle Extensions,Chroma",uploader:{id:4289114,name:"waika",uniqueSet:!0,hash:"5cff0b7698cc5a672c85464f",avatar:"https://cdn.beatsaver.com/avatar/530663167244894220.png",type:"DISCORD"},metadata:{bpm:95,duration:255,songName:"Lost Memory",songSubName:"",songAuthorName:"Sakuzyo",levelAuthorName:"waika"},stats:{plays:0,downloads:9091,upvotes:3250,downvotes:39,score:.9455},uploaded:"2020-11-28T11:08:12.961Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1a88eee7cb1962157cc2439741fb06f7f78180d4",key:"116b0",state:"Published",createdAt:"2020-11-28T11:08:12.961Z",sageScore:3,diffs:[{njs:17,offset:.5,notes:0,bombs:0,obstacles:57070,nps:0,length:0,characteristic:"Standard",difficulty:"Normal",events:230,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:17,offset:.5,notes:506,bombs:0,obstacles:57070,nps:2.36,length:339.5,characteristic:"Standard",difficulty:"Expert",events:230,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:214.421,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1a88eee7cb1962157cc2439741fb06f7f78180d4.zip",coverURL:"https://cdn.beatsaver.com/1a88eee7cb1962157cc2439741fb06f7f78180d4.jpg",previewURL:"https://cdn.beatsaver.com/1a88eee7cb1962157cc2439741fb06f7f78180d4.mp3"}],createdAt:"2020-11-28T11:08:12.961Z",updatedAt:"2020-11-28T11:08:12.961Z",lastPublishedAt:"2020-11-28T11:08:12.961Z"},{id:"9a0c",name:"Thnks fr th Mmrs - Fall Out Boy",description:"Thnks fr th Mmrs (or Thanks for the Memories) from Fall Out Boy.\nSo far the map that I have put the most work into (and which probably made me age by 3 years). Hope you enjoy it!\n\nThe map has Chroma lighting but can also be played without the Chroma mod.\nExpert+ contains single saber sections and polyrhythm parts. Just so you are warned ;)\n\nBig thanks to Sorukun for playtesting this map and especially to Timeweaver for pointing out all issues it had during its creation!",uploader:{id:21367,name:"hamsta",uniqueSet:!0,hash:"5de27451fffaa600066f2842",avatar:"https://www.gravatar.com/avatar/5de27451fffaa600066f2842?d=retro",type:"SIMPLE"},metadata:{bpm:155,duration:197,songName:"Thnks fr th Mmrs",songSubName:"",songAuthorName:"Fall Out Boy",levelAuthorName:"Hamsta"},stats:{plays:0,downloads:14444,upvotes:4054,downvotes:62,score:.9453},uploaded:"2020-04-12T09:50:46.516Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0e8ef3006db854c67f04fe72322bccea410f69ee",key:"9a0c",state:"Published",createdAt:"2020-04-12T09:50:46.516Z",sageScore:5,diffs:[{njs:14,offset:0,notes:580,bombs:0,obstacles:51,nps:3.092,length:484,characteristic:"Standard",difficulty:"Hard",events:2597,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:187.355,paritySummary:{errors:0,warns:0,resets:0}},{njs:14,offset:0,notes:637,bombs:0,obstacles:51,nps:3.395,length:484,characteristic:"Standard",difficulty:"Expert",events:2597,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:187.355,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:844,bombs:0,obstacles:39,nps:4.499,length:484,characteristic:"Standard",difficulty:"ExpertPlus",events:2597,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:187.355,paritySummary:{errors:1,warns:2,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0e8ef3006db854c67f04fe72322bccea410f69ee.zip",coverURL:"https://cdn.beatsaver.com/0e8ef3006db854c67f04fe72322bccea410f69ee.jpg",previewURL:"https://cdn.beatsaver.com/0e8ef3006db854c67f04fe72322bccea410f69ee.mp3"}],createdAt:"2020-04-12T09:50:46.516Z",updatedAt:"2020-04-12T09:50:46.516Z",lastPublishedAt:"2020-04-12T09:50:46.516Z"},{id:"4980",name:"Paradise - Coldplay",description:"\"Paradise\" is a song by the British rock band Coldplay. The song was released on 12 September 2011. I kinda like this song for relaxing on long car rides and I don't know how it will feel as a beat saber map but I'ma try mapping it anyways. So here it is :)",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:70,duration:278,songName:"Paradise",songSubName:"Coldplay",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:12627,upvotes:2893,downvotes:31,score:.9451},uploaded:"2019-04-30T05:45:51Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b14639af36673a43fe32bc7563619deff438d438",key:"4980",state:"Published",createdAt:"2019-04-30T05:45:51Z",sageScore:6,diffs:[{njs:13,offset:0,notes:1023,bombs:0,obstacles:35,nps:3.816,length:312.75,characteristic:"Standard",difficulty:"Expert",events:4651,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:268.071,paritySummary:{errors:28,warns:29,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b14639af36673a43fe32bc7563619deff438d438.zip",coverURL:"https://cdn.beatsaver.com/b14639af36673a43fe32bc7563619deff438d438.jpg",previewURL:"https://cdn.beatsaver.com/b14639af36673a43fe32bc7563619deff438d438.mp3"}],createdAt:"2019-04-30T05:45:51Z",updatedAt:"2019-04-30T05:45:51Z",lastPublishedAt:"2019-04-30T05:45:51Z"},{id:"efe",name:"Some Nights - Fun.",description:"Difficulties: Expert+, Expert, Hard, Normal\r\nYouTube Preview: https://youtu.be/X4R7VIZPffk",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:108,duration:255,songName:"Some Nights",songSubName:"Fun.",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:15367,upvotes:7399,downvotes:170,score:.9451},uploaded:"2018-08-10T20:34:09Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e64d6b7c5527d36005ae1801268798dd21ccf605",key:"efe",state:"Published",createdAt:"2018-08-10T20:34:09Z",sageScore:4,diffs:[{njs:10,offset:0,notes:321,bombs:0,obstacles:14,nps:1.382,length:418,characteristic:"Standard",difficulty:"Normal",events:1864,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:232.222,paritySummary:{errors:73,warns:36,resets:0}},{njs:10,offset:0,notes:432,bombs:0,obstacles:14,nps:1.86,length:418,characteristic:"Standard",difficulty:"Hard",events:1864,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:232.222,paritySummary:{errors:82,warns:51,resets:0}},{njs:10,offset:0,notes:680,bombs:0,obstacles:14,nps:2.928,length:418,characteristic:"Standard",difficulty:"Expert",events:1864,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:232.222,paritySummary:{errors:86,warns:82,resets:0}},{njs:10,offset:0,notes:810,bombs:0,obstacles:14,nps:3.488,length:418,characteristic:"Standard",difficulty:"ExpertPlus",events:1864,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:232.222,paritySummary:{errors:108,warns:106,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e64d6b7c5527d36005ae1801268798dd21ccf605.zip",coverURL:"https://cdn.beatsaver.com/e64d6b7c5527d36005ae1801268798dd21ccf605.jpg",previewURL:"https://cdn.beatsaver.com/e64d6b7c5527d36005ae1801268798dd21ccf605.mp3"}],createdAt:"2018-08-10T20:34:09Z",updatedAt:"2018-08-10T20:34:09Z",lastPublishedAt:"2018-08-10T20:34:09Z"},{id:"14d64",name:"Try - MitiS Feat. RORY",description:"Twenty-Sixth Upload\n\nThis map means the whole world to me, so I hope everyone enjoys this map. My father passed away on Jan. 23, 2021, in the middle of making this map. I am dedicating this map for him because of how much this songs means to me now. \nPouring my heart and soul into this map took a lot out of me, making it as perfect to my little abilities I have for mapping.\n\nBig shout outs to Lonely and Jamman for lighting this beautiful song and for agreeing to light it, it means the world to me.\nBig shout outs to thelightdesigner for making such amazing and beautiful walls. Thank you for taking the time to make this, it means the world to me.\nBig shout outs to Mawntee for giving me advice on how to make this map feel and shout outs to thelitlewiseowl for modding it, showing me what I can improve in this map. \nBiggest shout outs to everyone that play tested it multiple times. I am sorry for bugging them for multiple play test. \n\nAnd Biggest shoutout to my favorite chillstep/melodic dubstep artist, MitiS and Rory for making this beautiful song. \nYou have no idea how much this song means to me, I thank you so much. Keep up the good work MitiS.\n\n**NOODLES AND CHROMA REQUIRED**\n\nI hope this map can show you the feeling in this song, as well as what it portrays. I tried my best, I hope it turns out great and everyone enjoys it. \nThank you everyone for taking the time to download and play this map. I appreciate it everyone.\n\nFeedback is always welcome!",uploader:{id:4285346,name:"remie",uniqueSet:!0,hash:"5f6efd989824150006d740ac",avatar:"https://cdn.beatsaver.com/avatar/144275927466115073.png",type:"DISCORD"},metadata:{bpm:132,duration:273,songName:"Try",songSubName:"",songAuthorName:"MitiS Feat. RORY",levelAuthorName:"Remie & Lone"},stats:{plays:0,downloads:7511,upvotes:2884,downvotes:31,score:.945},uploaded:"2021-03-01T13:29:26.471Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6db3d9da217b41607d250aa7a28c5dc26a082188",key:"14d64",state:"Published",createdAt:"2021-03-01T13:29:26.471Z",sageScore:3,diffs:[{njs:17,offset:-.7,notes:1447,bombs:21,obstacles:17451,nps:6.217,length:512.083,characteristic:"Standard",difficulty:"ExpertPlus",events:36825,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:232.765,paritySummary:{errors:0,warns:0,resets:2}}],downloadURL:"https://cdn.beatsaver.com/6db3d9da217b41607d250aa7a28c5dc26a082188.zip",coverURL:"https://cdn.beatsaver.com/6db3d9da217b41607d250aa7a28c5dc26a082188.jpg",previewURL:"https://cdn.beatsaver.com/6db3d9da217b41607d250aa7a28c5dc26a082188.mp3"}],createdAt:"2021-03-01T13:29:26.471Z",updatedAt:"2021-03-01T13:29:26.471Z",lastPublishedAt:"2021-03-01T13:29:26.471Z"},{id:"3b84",name:"Revenge [DJ Got Us Fallin In Love Minecraft Parody] - CaptainSparklez ft. TryHardNinja",description:"Revenge is a Minecraft parody song of DJ Got Us Fallin In Love by CaptainSparklez featuring vocals from TryHardNinja. Slight remap of DJ Got Us Fallin In Love.\r\n\r\nDamn, this song brings me back memories of the golden age of Minecraft.",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:120,duration:222,songName:"Revenge",songSubName:"CaptainSparklez ft. TryHardNinja",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:13421,upvotes:7001,downvotes:157,score:.945},uploaded:"2019-03-04T17:01:53Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7ac4d99cee16e8d0437d7e8feecdb12488cc27d3",key:"3b84",state:"Published",createdAt:"2019-03-04T17:01:53Z",sageScore:5,diffs:[{njs:14,offset:0,notes:858,bombs:0,obstacles:1,nps:3.972,length:432,characteristic:"Standard",difficulty:"Expert",events:1675,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216,paritySummary:{errors:80,warns:85,resets:0}}],downloadURL:"https://cdn.beatsaver.com/7ac4d99cee16e8d0437d7e8feecdb12488cc27d3.zip",coverURL:"https://cdn.beatsaver.com/7ac4d99cee16e8d0437d7e8feecdb12488cc27d3.jpg",previewURL:"https://cdn.beatsaver.com/7ac4d99cee16e8d0437d7e8feecdb12488cc27d3.mp3"}],createdAt:"2019-03-04T17:01:53Z",updatedAt:"2019-03-04T17:01:53Z",lastPublishedAt:"2019-03-04T17:01:53Z"},{id:"b7aa",name:"Powerwolf - Venom of Venus",description:"Back to my more regular style, Powerwolf is a power-metal band that perform around the themes of werewolves and religion, a strange but interesting mixture.\r\n\r\nEx+ has a no-colours mode for those who wish to play without the custom block colours, but unfortunately I can't fit such an option for all difficulties.\r\n\r\nNormal 1.85 NPS\r\nHard 3.15 NPS\r\nExpert 4.43 NPS\r\nExpert+ 5.11 NPS\r\n\r\nThere is no easy difficulty, as that I needed the slot for the no-colour mode.",uploader:{id:4285369,name:"Cyrix",uniqueSet:!0,hash:"5eb6eb9a7abb000006c85add",avatar:"https://cdn.beatsaver.com/avatar/167730807929044992.png",type:"DISCORD"},metadata:{bpm:164,duration:210,songName:"Venom of Venus",songSubName:"",songAuthorName:"Powerwolf",levelAuthorName:"Cyrix"},stats:{plays:0,downloads:8465,upvotes:2864,downvotes:31,score:.9449},uploaded:"2020-06-29T18:24:10.081Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f88b43c770dcd85a4ba18368853fbf062d41a09c",key:"b7aa",state:"Published",createdAt:"2020-06-29T18:24:10.081Z",sageScore:7,diffs:[{njs:12,offset:.5,notes:392,bombs:0,obstacles:63,nps:1.948,length:549.938,characteristic:"Standard",difficulty:"Easy",events:4188,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:201.197,paritySummary:{errors:44,warns:15,resets:0}},{njs:13,offset:1,notes:666,bombs:8,obstacles:36,nps:3.31,length:549.938,characteristic:"Standard",difficulty:"Normal",events:4188,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:201.197,paritySummary:{errors:1,warns:0,resets:1}},{njs:17,offset:0,notes:934,bombs:9,obstacles:7,nps:4.642,length:549.938,characteristic:"Standard",difficulty:"Hard",events:4188,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:201.197,paritySummary:{errors:0,warns:0,resets:2}},{njs:20,offset:-.25,notes:1079,bombs:4,obstacles:7,nps:5.353,length:551,characteristic:"Standard",difficulty:"Expert",events:4192,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:201.585,paritySummary:{errors:1,warns:0,resets:2}},{njs:20,offset:-.25,notes:1079,bombs:4,obstacles:7,nps:5.353,length:551,characteristic:"Standard",difficulty:"ExpertPlus",events:4192,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:201.585,paritySummary:{errors:1,warns:0,resets:2}}],downloadURL:"https://cdn.beatsaver.com/f88b43c770dcd85a4ba18368853fbf062d41a09c.zip",coverURL:"https://cdn.beatsaver.com/f88b43c770dcd85a4ba18368853fbf062d41a09c.jpg",previewURL:"https://cdn.beatsaver.com/f88b43c770dcd85a4ba18368853fbf062d41a09c.mp3"}],createdAt:"2020-06-29T18:24:10.081Z",updatedAt:"2020-06-29T18:24:10.081Z",lastPublishedAt:"2020-06-29T18:24:10.081Z"},{id:"fd",name:"Rasputin - Boney M",description:"Expert\r\n127 bpm",uploader:{id:48512,name:"jobas",uniqueSet:!1,hash:"5cff0b7298cc5a672c84e9a2",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9a2?d=retro",type:"SIMPLE"},metadata:{bpm:127,duration:266,songName:"Rasputin-Boney M",songSubName:"",songAuthorName:"Jobas",levelAuthorName:"jobas"},stats:{plays:0,downloads:22705,upvotes:8696,downvotes:218,score:.9448},uploaded:"2018-05-18T23:27:59Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"bf2f5afaeae0767c9bd6944ce74a23f6b24f4098",key:"fd",state:"Published",createdAt:"2018-05-18T23:27:59Z",sageScore:4,diffs:[{njs:10,offset:0,notes:701,bombs:0,obstacles:124,nps:2.699,length:549.844,characteristic:"Standard",difficulty:"Hard",events:0,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:259.769,paritySummary:{errors:29,warns:158,resets:0}}],downloadURL:"https://cdn.beatsaver.com/bf2f5afaeae0767c9bd6944ce74a23f6b24f4098.zip",coverURL:"https://cdn.beatsaver.com/bf2f5afaeae0767c9bd6944ce74a23f6b24f4098.jpg",previewURL:"https://cdn.beatsaver.com/bf2f5afaeae0767c9bd6944ce74a23f6b24f4098.mp3"}],createdAt:"2018-05-18T23:27:59Z",updatedAt:"2018-05-18T23:27:59Z",lastPublishedAt:"2018-05-18T23:27:59Z"},{id:"74d5",name:"What's New, Scooby-Doo? - Simple Plan",description:"Just practicing my mapping with this song\n\nalso, my childhood nostalgia\nEDIT: forgot to set NJS",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:158.03,duration:67,songName:"What's New, Scooby-Doo?",songSubName:"",songAuthorName:"Simple Plan",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:10991,upvotes:3468,downvotes:48,score:.9447},uploaded:"2019-12-08T18:41:10.652Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e004f84ffebded94e761d667db6aaa44f000a8a8",key:"74d5",state:"Published",createdAt:"2019-12-08T18:41:10.652Z",sageScore:2,diffs:[{njs:15,offset:0,notes:330,bombs:2,obstacles:0,nps:5.226,length:166.313,characteristic:"Standard",difficulty:"Expert",events:382,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:63.145,paritySummary:{errors:9,warns:7,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e004f84ffebded94e761d667db6aaa44f000a8a8.zip",coverURL:"https://cdn.beatsaver.com/e004f84ffebded94e761d667db6aaa44f000a8a8.jpg",previewURL:"https://cdn.beatsaver.com/e004f84ffebded94e761d667db6aaa44f000a8a8.mp3"}],createdAt:"2019-12-08T18:41:10.652Z",updatedAt:"2019-12-08T18:41:10.652Z",lastPublishedAt:"2019-12-08T18:41:10.652Z"},{id:"a438",name:"Wait - M83 (wall map)",description:"I wanted to do something special for this great song, and also see the potential of Noodle Extensions. A few tips for a better experience:\r\n- disable the mirror effect in the game settings\r\n- turn the SFX volume down in the player settings\r\n- hide the HUD in the player settings\r\n\r\nVideo: https://youtu.be/oe6ThhijPy0\r\n\r\nThe map has a lot of walls, so you might not be able to run it on the lower-end hardware. I've included a version with less walls in case it helps.",uploader:{id:4288814,name:"nyri0",uniqueSet:!0,hash:"5e792df416c9680006086a78",avatar:"https://cdn.beatsaver.com/avatar/396715033125584907.png",type:"DISCORD"},metadata:{bpm:148,duration:336,songName:"Wait",songSubName:"",songAuthorName:"M83",levelAuthorName:"nyri0"},stats:{plays:0,downloads:6655,upvotes:2103,downvotes:14,score:.9442},uploaded:"2020-05-08T23:53:02.030Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0d8921ef06a889cbd9db13afcc43f09a1619b173",key:"a438",state:"Published",createdAt:"2020-05-08T23:53:02.030Z",sageScore:6,diffs:[{njs:8,offset:6,notes:735,bombs:0,obstacles:6684,nps:2.225,length:815,characteristic:"Standard",difficulty:"Easy",events:5,chroma:!1,me:!1,ne:!0,cinema:!1,seconds:330.405,paritySummary:{errors:94,warns:27,resets:0}},{njs:8,offset:6,notes:735,bombs:0,obstacles:10499,nps:2.225,length:815,characteristic:"Standard",difficulty:"Hard",events:5,chroma:!1,me:!1,ne:!0,cinema:!1,seconds:330.405,paritySummary:{errors:94,warns:27,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0d8921ef06a889cbd9db13afcc43f09a1619b173.zip",coverURL:"https://cdn.beatsaver.com/0d8921ef06a889cbd9db13afcc43f09a1619b173.jpg",previewURL:"https://cdn.beatsaver.com/0d8921ef06a889cbd9db13afcc43f09a1619b173.mp3"}],createdAt:"2020-05-08T23:53:02.030Z",updatedAt:"2020-05-08T23:53:02.030Z",lastPublishedAt:"2020-05-08T23:53:02.030Z"},{id:"4a35",name:"[Anniversary] Animals (Radio Edit) - Martin Garrix [Joetastic & StyngMe]",description:"Part of the Anniversary Song Pack",uploader:{id:37070,name:"anniversaryteam",uniqueSet:!0,hash:"5cff0b7798cc5a672c8565a3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:176,songName:"Animals (Radio Edit)",songSubName:"Martin Garrix",songAuthorName:"Joetastic & StyngMe",levelAuthorName:"AnniversaryTeam"},stats:{plays:0,downloads:14718,upvotes:7734,downvotes:189,score:.9442},uploaded:"2019-05-03T14:08:02Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1a1737caba0f049a69369e328622e06b2a32b634",key:"4a35",state:"Published",createdAt:"2019-05-03T14:08:02Z",sageScore:8,diffs:[{njs:10,offset:0,notes:272,bombs:0,obstacles:19,nps:1.612,length:360,characteristic:"Standard",difficulty:"Easy",events:2074,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.75,paritySummary:{errors:32,warns:22,resets:0}},{njs:12,offset:0,notes:350,bombs:0,obstacles:22,nps:2.08,length:359,characteristic:"Standard",difficulty:"Normal",events:2074,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.281,paritySummary:{errors:34,warns:27,resets:0}},{njs:14,offset:0,notes:436,bombs:6,obstacles:22,nps:2.584,length:360,characteristic:"Standard",difficulty:"Hard",events:2074,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.75,paritySummary:{errors:29,warns:31,resets:4}},{njs:15,offset:0,notes:675,bombs:4,obstacles:22,nps:4,length:360,characteristic:"Standard",difficulty:"Expert",events:2074,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.75,paritySummary:{errors:26,warns:34,resets:1}},{njs:16,offset:0,notes:738,bombs:0,obstacles:21,nps:4.373,length:360,characteristic:"Standard",difficulty:"ExpertPlus",events:2038,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.75,paritySummary:{errors:46,warns:40,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1a1737caba0f049a69369e328622e06b2a32b634.zip",coverURL:"https://cdn.beatsaver.com/1a1737caba0f049a69369e328622e06b2a32b634.jpg",previewURL:"https://cdn.beatsaver.com/1a1737caba0f049a69369e328622e06b2a32b634.mp3"}],createdAt:"2019-05-03T14:08:02Z",updatedAt:"2019-05-03T14:08:02Z",lastPublishedAt:"2019-05-03T14:08:02Z"},{id:"5038",name:"Uptown Funk - Mark Ronson",description:"5/31: This version now works for the Oculus Quest.\r\n\r\nDifficulties: Expert and Hard\r\nYouTube Link: https://youtu.be/6TYji_Klr9I",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:115,duration:271,songName:"Uptown Funk",songSubName:"Mark Ronson",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:21925,upvotes:9390,downvotes:251,score:.944},uploaded:"2019-05-31T17:58:39Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d110e413fb7fb462b692f1f17b835cf8b7280884",key:"5038",state:"Published",createdAt:"2019-05-31T17:58:39Z",sageScore:5,diffs:[{njs:10,offset:0,notes:639,bombs:0,obstacles:24,nps:2.397,length:511,characteristic:"Standard",difficulty:"Hard",events:786,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:266.609,paritySummary:{errors:115,warns:89,resets:0}},{njs:10,offset:0,notes:776,bombs:0,obstacles:24,nps:2.911,length:511,characteristic:"Standard",difficulty:"Expert",events:786,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:266.609,paritySummary:{errors:98,warns:111,resets:0}}],downloadURL:"https://cdn.beatsaver.com/d110e413fb7fb462b692f1f17b835cf8b7280884.zip",coverURL:"https://cdn.beatsaver.com/d110e413fb7fb462b692f1f17b835cf8b7280884.jpg",previewURL:"https://cdn.beatsaver.com/d110e413fb7fb462b692f1f17b835cf8b7280884.mp3"}],createdAt:"2019-05-31T17:58:39Z",updatedAt:"2019-05-31T17:58:39Z",lastPublishedAt:"2019-05-31T17:58:39Z"},{id:"1c1",name:"Shia LaBeouf (Rob Cantor)",description:"Shia LaBeouf - Rob Cantor\r\nFinished Lighting\r\nDifficulties: Expert, Hard, Normal, Easy\r\nBPM: 96",uploader:{id:53184,name:"kleid",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ecd9",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ecd9?d=retro",type:"SIMPLE"},metadata:{bpm:96,duration:154,songName:"Shia LaBeouf",songSubName:"Rob Cantor",songAuthorName:"Kleid",levelAuthorName:"kleid"},stats:{plays:0,downloads:12103,upvotes:6574,downvotes:151,score:.9439},uploaded:"2018-05-23T00:42:28Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"1279a3fcaff31e767e5dd7d7c016ec08733cf566",key:"1c1",state:"Published",createdAt:"2018-05-23T00:42:28Z",sageScore:5,diffs:[{njs:10,offset:0,notes:266,bombs:0,obstacles:39,nps:1.891,length:225,characteristic:"Standard",difficulty:"Easy",events:379,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:140.625,paritySummary:{errors:36,warns:49,resets:0},stars:1.36},{njs:10,offset:0,notes:323,bombs:0,obstacles:44,nps:2.296,length:225,characteristic:"Standard",difficulty:"Normal",events:379,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:140.625,paritySummary:{errors:59,warns:46,resets:0},stars:1.65},{njs:10,offset:0,notes:344,bombs:24,obstacles:44,nps:2.445,length:225,characteristic:"Standard",difficulty:"Hard",events:379,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:140.625,paritySummary:{errors:61,warns:48,resets:3},stars:1.73},{njs:10,offset:0,notes:378,bombs:28,obstacles:64,nps:2.687,length:225,characteristic:"Standard",difficulty:"Expert",events:379,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:140.625,paritySummary:{errors:69,warns:54,resets:3}}],downloadURL:"https://cdn.beatsaver.com/1279a3fcaff31e767e5dd7d7c016ec08733cf566.zip",coverURL:"https://cdn.beatsaver.com/1279a3fcaff31e767e5dd7d7c016ec08733cf566.jpg",previewURL:"https://cdn.beatsaver.com/1279a3fcaff31e767e5dd7d7c016ec08733cf566.mp3"}],createdAt:"2018-05-23T00:42:28Z",updatedAt:"2018-05-23T00:42:28Z",lastPublishedAt:"2018-05-23T00:42:28Z"},{id:"7a64",name:"Joey Batey - Toss A Coin To Your Witcher",description:"Expert+ Preview https://www.youtube.com/watch?v=AjfABhvswrI\n\nToss a Coin to Beat Saber!\n\nNetflix's The Witcher OST.\nOriginal Music by Sonya Belousova & Giona Ostinelli.\nLyrics by Jenny Klein, Sonya Belousova & Giona Ostinelli.\nPerformed by Joey Batey.\n\nThanks Sorukun for playtesting.",uploader:{id:4286200,name:"holair",uniqueSet:!0,hash:"5cff0b7698cc5a672c853af4",avatar:"https://cdn.beatsaver.com/avatar/176034748571844608.png",type:"DISCORD"},metadata:{bpm:105,duration:180,songName:"Toss A Coin To Your Witcher",songSubName:"Netflix's The Witcher",songAuthorName:"Joey Batey",levelAuthorName:"Holair"},stats:{plays:0,downloads:16196,upvotes:9958,downvotes:275,score:.9438},uploaded:"2019-12-28T20:11:35.767Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"19a733cf9202ef25725966d78f465bf87b26254d",key:"7a64",state:"Published",createdAt:"2019-12-28T20:11:35.767Z",sageScore:7,diffs:[{njs:10,offset:0,notes:175,bombs:0,obstacles:1,nps:1.008,length:303.743,characteristic:"Standard",difficulty:"Easy",events:814,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:173.567,paritySummary:{errors:55,warns:12,resets:0}},{njs:10,offset:0,notes:322,bombs:0,obstacles:2,nps:1.855,length:303.743,characteristic:"Standard",difficulty:"Normal",events:814,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:173.567,paritySummary:{errors:37,warns:21,resets:0}},{njs:12,offset:0,notes:459,bombs:0,obstacles:10,nps:2.645,length:303.743,characteristic:"Standard",difficulty:"Hard",events:814,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:173.567,paritySummary:{errors:38,warns:16,resets:0}},{njs:14,offset:0,notes:578,bombs:0,obstacles:15,nps:3.33,length:303.743,characteristic:"Standard",difficulty:"Expert",events:1310,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:173.567,paritySummary:{errors:37,warns:40,resets:0}},{njs:14,offset:0,notes:580,bombs:0,obstacles:14,nps:3.342,length:303.74,characteristic:"Standard",difficulty:"ExpertPlus",events:1310,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:173.566,paritySummary:{errors:41,warns:34,resets:0}}],downloadURL:"https://cdn.beatsaver.com/19a733cf9202ef25725966d78f465bf87b26254d.zip",coverURL:"https://cdn.beatsaver.com/19a733cf9202ef25725966d78f465bf87b26254d.jpg",previewURL:"https://cdn.beatsaver.com/19a733cf9202ef25725966d78f465bf87b26254d.mp3"}],createdAt:"2019-12-28T20:11:35.767Z",updatedAt:"2019-12-28T20:11:35.767Z",lastPublishedAt:"2019-12-28T20:11:35.767Z"},{id:"49f2",name:"It's My Life - Bon Jovi",description:"I might be a huge weeb but I still enjoy listening to 80s band: Bon Jovi. Here's one of their more modern songs from the 2000s: It's My Life! Mapping on this isn't too difficult, it's an slow rock song so not much I can map to anyways",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:120,duration:226,songName:"It's My Life",songSubName:"Bon Jovi",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:11924,upvotes:3179,downvotes:44,score:.9436},uploaded:"2019-05-02T14:08:00Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"172b9d6d206a3fb679426b2934daad3191b10ec7",key:"49f2",state:"Published",createdAt:"2019-05-02T14:08:00Z",sageScore:5,diffs:[{njs:12,offset:0,notes:684,bombs:0,obstacles:4,nps:3.081,length:444,characteristic:"Standard",difficulty:"Hard",events:1968,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:222,paritySummary:{errors:13,warns:15,resets:0}}],downloadURL:"https://cdn.beatsaver.com/172b9d6d206a3fb679426b2934daad3191b10ec7.zip",coverURL:"https://cdn.beatsaver.com/172b9d6d206a3fb679426b2934daad3191b10ec7.jpg",previewURL:"https://cdn.beatsaver.com/172b9d6d206a3fb679426b2934daad3191b10ec7.mp3"}],createdAt:"2019-05-02T14:08:00Z",updatedAt:"2019-05-02T14:08:00Z",lastPublishedAt:"2019-05-02T14:08:00Z"},{id:"5616",name:"Sanctuary - Joji (All Difficulties, Single Saber, & No Arrows)",description:"A tribute to our boy Joji. Lots of love for him in this, 10 difficulties for players of all skill to enjoy.\n\n168 BPM - 2:56 Runtime\nEasy - 268 Notes\nNormal - 327 Notes\nHard - 409 Notes\nExpert - 465 Notes\nExpert+ - 542 Notes\n\nHard (Single Saber) - 306 Notes\nExpert (Single Saber) - 375 Notes\nExpert+ (Single Saber) - 444 Notes\n\nSincerity Difficulty (Reversed No Arrow) - 465 Notes\nSanctuary Difficulty (Reversed No Arrow) - 542 Notes\n\nGameplay:  https://youtu.be/u2AYPs94t7o\n\n**Little easter egg. Wall counts on maps correspond to milestones for George Miller. 162 videos on FilthyFrank YT channel, 105 videos on TooDamnFilthy YT channel, 95 videos on Dizastamusic YT channel, 38 songs on Pink Guy album, 35 songs on Pink Season album.",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:168,duration:176,songName:"Sanctuary",songSubName:"",songAuthorName:"Joji",levelAuthorName:"Skyler Wallace"},stats:{plays:0,downloads:12792,upvotes:3919,downvotes:67,score:.9434},uploaded:"2019-07-09T02:56:20.454Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"76bc9c795600df8c663dea4927f470d0a7700ab3",key:"5616",state:"Published",createdAt:"2019-07-09T02:56:20.454Z",sageScore:8,diffs:[{njs:10,offset:0,notes:268,bombs:0,obstacles:35,nps:1.737,length:432,characteristic:"Standard",difficulty:"Easy",events:3623,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.286,paritySummary:{errors:94,warns:18,resets:0}},{njs:10,offset:0,notes:327,bombs:0,obstacles:38,nps:2.119,length:432,characteristic:"Standard",difficulty:"Normal",events:3623,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.286,paritySummary:{errors:61,warns:12,resets:0}},{njs:12,offset:0,notes:409,bombs:0,obstacles:92,nps:2.651,length:432,characteristic:"Standard",difficulty:"Hard",events:3623,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.286,paritySummary:{errors:29,warns:10,resets:0}},{njs:14,offset:1,notes:465,bombs:0,obstacles:105,nps:3.014,length:432,characteristic:"Standard",difficulty:"Expert",events:3623,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.286,paritySummary:{errors:37,warns:26,resets:0}},{njs:14,offset:1,notes:542,bombs:0,obstacles:162,nps:3.513,length:432,characteristic:"Standard",difficulty:"ExpertPlus",events:3623,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.286,paritySummary:{errors:24,warns:29,resets:0}},{njs:12,offset:0,notes:306,bombs:0,obstacles:92,nps:1.983,length:432,characteristic:"OneSaber",difficulty:"Hard",events:3623,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.286,paritySummary:{errors:23,warns:28,resets:0}},{njs:14,offset:1,notes:375,bombs:0,obstacles:105,nps:2.431,length:432,characteristic:"OneSaber",difficulty:"Expert",events:3623,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.286,paritySummary:{errors:26,warns:29,resets:0}},{njs:14,offset:1,notes:444,bombs:0,obstacles:162,nps:2.878,length:432,characteristic:"OneSaber",difficulty:"ExpertPlus",events:3623,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.286,paritySummary:{errors:25,warns:57,resets:0}},{njs:-14,offset:1,notes:465,bombs:0,obstacles:105,nps:3.014,length:432,characteristic:"NoArrows",difficulty:"Expert",events:3623,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.286,paritySummary:{errors:0,warns:0,resets:0}},{njs:-14,offset:1,notes:542,bombs:0,obstacles:162,nps:3.513,length:432,characteristic:"NoArrows",difficulty:"ExpertPlus",events:3623,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.286,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/76bc9c795600df8c663dea4927f470d0a7700ab3.zip",coverURL:"https://cdn.beatsaver.com/76bc9c795600df8c663dea4927f470d0a7700ab3.jpg",previewURL:"https://cdn.beatsaver.com/76bc9c795600df8c663dea4927f470d0a7700ab3.mp3"}],createdAt:"2019-07-09T02:56:20.454Z",updatedAt:"2019-07-09T02:56:20.454Z",lastPublishedAt:"2019-07-09T02:56:20.454Z"},{id:"9b35",name:"Ready To [BNA: Brand New Animal Opening]",description:'use CHROMA mod for some cool ring prop effects\n\nTrigger greatness with a fire opening\nI\'m not a furry\nI think\n\n"Ready To" was sung by main girl, Michiru Kagemori (CV: Sumire Morohoshi)\n\nBPM 147 |\nExpert+\nExpert\nHard\nNormal\nEasy\n\ntyhf\n\npreview: https://www.youtube.com/watch?v=x6Q0y8Y8g0U\n\nDM any feedback on Discord\nETAN#8341',uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:147,duration:199,songName:"Ready To",songSubName:"",songAuthorName:"Michiru (CV: Sumire Morohoshi)",levelAuthorName:"ETAN"},stats:{plays:0,downloads:12461,upvotes:4254,downvotes:78,score:.9432},uploaded:"2020-04-15T05:30:10.784Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c5de287d4406906d4ad3ddebc18e18446bb3a578",key:"9b35",state:"Published",createdAt:"2020-04-15T05:30:10.784Z",sageScore:7,diffs:[{njs:11,offset:0,notes:264,bombs:0,obstacles:2,nps:1.356,length:477,characteristic:"Standard",difficulty:"Easy",events:11962,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:194.694,paritySummary:{errors:2,warns:4,resets:0}},{njs:11,offset:0,notes:336,bombs:0,obstacles:2,nps:1.726,length:477,characteristic:"Standard",difficulty:"Normal",events:11962,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:194.694,paritySummary:{errors:0,warns:0,resets:0}},{njs:13,offset:1,notes:500,bombs:32,obstacles:2,nps:2.568,length:477,characteristic:"Standard",difficulty:"Hard",events:11962,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:194.694,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:.3,notes:734,bombs:32,obstacles:2,nps:3.77,length:477,characteristic:"Standard",difficulty:"Expert",events:11962,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:194.694,paritySummary:{errors:0,warns:0,resets:0}},{njs:21,offset:-.3,notes:900,bombs:32,obstacles:2,nps:4.623,length:477,characteristic:"Standard",difficulty:"ExpertPlus",events:11962,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:194.694,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:11962,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c5de287d4406906d4ad3ddebc18e18446bb3a578.zip",coverURL:"https://cdn.beatsaver.com/c5de287d4406906d4ad3ddebc18e18446bb3a578.jpg",previewURL:"https://cdn.beatsaver.com/c5de287d4406906d4ad3ddebc18e18446bb3a578.mp3"}],createdAt:"2020-04-15T05:30:10.784Z",updatedAt:"2020-04-15T05:30:10.784Z",lastPublishedAt:"2020-04-15T05:30:10.784Z"},{id:"56cb",name:"Onegai Muscle [Dumbbell Nan Kilo Moteru? Opening]",description:"SAIDO CHESTO\n\nSung by \nHibiki Sakura (CV: Ai Fairouz)\nNaruzou Machio (CV: Kaito Ishikawa)\n\nBPM 132 | Length 1:32\nMuscle!+ (Expert+)\nExpert\nHard\n\nThanks to Helen Carnate and Kival Evan for playtesting\n\ntyhf\n\ndm me on discord with feedback\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:132,duration:92,songName:"Onegai Muscle",songSubName:"",songAuthorName:"Ai Fairouz, Kaito Ishikawa",levelAuthorName:"ETAN"},stats:{plays:0,downloads:12485,upvotes:5772,downvotes:131,score:.9428},uploaded:"2019-07-13T16:48:46.669Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7aa8bd16a692b8c8769d96cf96b9b259bea2e862",key:"56cb",state:"Published",createdAt:"2019-07-13T16:48:46.669Z",sageScore:5,diffs:[{njs:13,offset:0,notes:223,bombs:32,obstacles:37,nps:2.544,length:192.875,characteristic:"Standard",difficulty:"Hard",events:5023,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.67,paritySummary:{errors:4,warns:5,resets:0}},{njs:16,offset:0,notes:304,bombs:32,obstacles:37,nps:3.468,length:192.875,characteristic:"Standard",difficulty:"Expert",events:5023,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.67,paritySummary:{errors:8,warns:4,resets:0}},{njs:19,offset:0,notes:402,bombs:32,obstacles:38,nps:4.585,length:192.875,characteristic:"Standard",difficulty:"ExpertPlus",events:5023,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.67,paritySummary:{errors:12,warns:6,resets:0}}],downloadURL:"https://cdn.beatsaver.com/7aa8bd16a692b8c8769d96cf96b9b259bea2e862.zip",coverURL:"https://cdn.beatsaver.com/7aa8bd16a692b8c8769d96cf96b9b259bea2e862.jpg",previewURL:"https://cdn.beatsaver.com/7aa8bd16a692b8c8769d96cf96b9b259bea2e862.mp3"}],createdAt:"2019-07-13T16:48:46.669Z",updatedAt:"2019-07-13T16:48:46.669Z",lastPublishedAt:"2019-07-13T16:48:46.669Z"},{id:"3b76",name:"Caravan Palace - Miracle",description:"==================================================\r\nSong: Caravan Palace - Miracle\r\nBPM: 120\r\nNote jump speed: 10 - 16\r\nVersions: Expert+, Expert, Hard, Normal\r\n=============================\r\nLove this new track from Caravan Palace",uploader:{id:4287543,name:"therealzeroz",uniqueSet:!0,hash:"5cff0b7498cc5a672c85037b",avatar:"https://cdn.beatsaver.com/avatar/182672808961114112.png",type:"DISCORD"},metadata:{bpm:100,duration:221,songName:"Caravan Palace - Miracle",songSubName:"",songAuthorName:"TheRealZeroz",levelAuthorName:"TheRealZeroz"},stats:{plays:0,downloads:8954,upvotes:5074,downvotes:107,score:.9428},uploaded:"2019-03-04T12:15:10Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"29e5877ec735378b8ba3751dc8896bf63a43c525",key:"3b76",state:"Published",createdAt:"2019-03-04T12:15:10Z",sageScore:3,diffs:[{njs:10,offset:0,notes:326,bombs:0,obstacles:4,nps:1.793,length:303,characteristic:"Standard",difficulty:"Normal",events:4399,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.8,paritySummary:{errors:38,warns:2,resets:0}},{njs:13,offset:0,notes:562,bombs:0,obstacles:0,nps:3.081,length:304,characteristic:"Standard",difficulty:"Hard",events:4399,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:182.4,paritySummary:{errors:12,warns:13,resets:0}},{njs:14,offset:0,notes:1034,bombs:0,obstacles:8,nps:5.669,length:304,characteristic:"Standard",difficulty:"Expert",events:4399,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:182.4,paritySummary:{errors:20,warns:2,resets:0}},{njs:16,offset:0,notes:1156,bombs:0,obstacles:9,nps:6.348,length:303.5,characteristic:"Standard",difficulty:"ExpertPlus",events:4399,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:182.1,paritySummary:{errors:36,warns:13,resets:0}}],downloadURL:"https://cdn.beatsaver.com/29e5877ec735378b8ba3751dc8896bf63a43c525.zip",coverURL:"https://cdn.beatsaver.com/29e5877ec735378b8ba3751dc8896bf63a43c525.jpg",previewURL:"https://cdn.beatsaver.com/29e5877ec735378b8ba3751dc8896bf63a43c525.mp3"}],createdAt:"2019-03-04T12:15:10Z",updatedAt:"2019-03-04T12:15:10Z",lastPublishedAt:"2019-03-04T12:15:10Z"},{id:"5062",name:"Witchcraft - Pendulum",description:"I have been working on this chart for a while now, finally able to finish it off. :) Enjoy!\r\nhttps://www.youtube.com/watch?v=mlaH4Dqjv1U",uploader:{id:4285982,name:"downycat",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ede5",avatar:"https://cdn.beatsaver.com/avatar/173538829888782336.png",type:"DISCORD"},metadata:{bpm:174,duration:254,songName:"Witchcraft",songSubName:"Pendulum",songAuthorName:"DownyCat",levelAuthorName:"downycat"},stats:{plays:0,downloads:9888,upvotes:4287,downvotes:83,score:.9424},uploaded:"2019-06-01T07:59:40Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"015170851544c832ee4ac858ca6b3425677b1696",key:"5062",state:"Published",createdAt:"2019-06-01T07:59:40Z",sageScore:4,diffs:[{njs:10,offset:0,notes:372,bombs:0,obstacles:33,nps:1.515,length:712,characteristic:"Standard",difficulty:"Normal",events:8298,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:245.517,paritySummary:{errors:13,warns:21,resets:0}},{njs:12,offset:0,notes:750,bombs:0,obstacles:53,nps:3.055,length:712,characteristic:"Standard",difficulty:"Hard",events:8298,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:245.517,paritySummary:{errors:8,warns:7,resets:0}},{njs:14,offset:0,notes:1213,bombs:0,obstacles:36,nps:4.941,length:712,characteristic:"Standard",difficulty:"Expert",events:8298,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:245.517,paritySummary:{errors:10,warns:5,resets:0}},{njs:18,offset:0,notes:1401,bombs:0,obstacles:28,nps:5.706,length:712,characteristic:"Standard",difficulty:"ExpertPlus",events:8298,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:245.517,paritySummary:{errors:7,warns:8,resets:0}}],downloadURL:"https://cdn.beatsaver.com/015170851544c832ee4ac858ca6b3425677b1696.zip",coverURL:"https://cdn.beatsaver.com/015170851544c832ee4ac858ca6b3425677b1696.jpg",previewURL:"https://cdn.beatsaver.com/015170851544c832ee4ac858ca6b3425677b1696.mp3"}],createdAt:"2019-06-01T07:59:40Z",updatedAt:"2019-06-01T07:59:40Z",lastPublishedAt:"2019-06-01T07:59:40Z"},{id:"6891",name:"Panic! At The Disco - I Write Sins Not Tragedies",description:"PepeJamJam \nAll Difficulties",uploader:{id:4285107,name:"kikaeaeon",uniqueSet:!0,hash:"5cff0b7498cc5a672c85109b",avatar:"https://cdn.beatsaver.com/avatar/103715469822816256.png",type:"DISCORD"},metadata:{bpm:170,duration:188,songName:"I Write Sins Not Tragedies",songSubName:"",songAuthorName:"Panic! At the Disco",levelAuthorName:"KikaeAeon"},stats:{plays:0,downloads:17370,upvotes:5712,downvotes:132,score:.9423},uploaded:"2019-10-08T04:14:47.579Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7ec6ee195a2d577d5b924dad8b1a25b881aa2d27",key:"6891",state:"Published",createdAt:"2019-10-08T04:14:47.579Z",sageScore:8,diffs:[{njs:10,offset:0,notes:271,bombs:0,obstacles:21,nps:1.519,length:505.5,characteristic:"Standard",difficulty:"Easy",events:1193,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.412,paritySummary:{errors:15,warns:9,resets:0}},{njs:10,offset:0,notes:312,bombs:0,obstacles:21,nps:1.749,length:505.5,characteristic:"Standard",difficulty:"Normal",events:1193,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.412,paritySummary:{errors:18,warns:10,resets:0}},{njs:10,offset:0,notes:487,bombs:0,obstacles:41,nps:2.73,length:505.5,characteristic:"Standard",difficulty:"Hard",events:1193,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.412,paritySummary:{errors:32,warns:34,resets:0}},{njs:12,offset:0,notes:690,bombs:80,obstacles:29,nps:3.867,length:505.5,characteristic:"Standard",difficulty:"Expert",events:1193,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.412,paritySummary:{errors:11,warns:6,resets:2}},{njs:15,offset:0,notes:969,bombs:0,obstacles:17,nps:5.431,length:505.5,characteristic:"Standard",difficulty:"ExpertPlus",events:1193,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.412,paritySummary:{errors:9,warns:20,resets:0}}],downloadURL:"https://cdn.beatsaver.com/7ec6ee195a2d577d5b924dad8b1a25b881aa2d27.zip",coverURL:"https://cdn.beatsaver.com/7ec6ee195a2d577d5b924dad8b1a25b881aa2d27.jpg",previewURL:"https://cdn.beatsaver.com/7ec6ee195a2d577d5b924dad8b1a25b881aa2d27.mp3"}],createdAt:"2019-10-08T04:14:47.579Z",updatedAt:"2019-10-08T04:14:47.579Z",lastPublishedAt:"2019-10-08T04:14:47.579Z"},{id:"1eb2",name:"Pumped Up Kicks - Foster the People",description:"128 BPM / 3:27 Runtime\r\nNormal / 381 Notes\r\nHard / 492 Notes\r\nExpert / 714 Notes\r\n\r\nGameplay:\r\nhttps://youtu.be/oo1EgLAOB1s\r\n\r\nListen to the song:\r\nhttps://www.youtube.com/watch?v=SDTZ7iX4vTQ",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:128,duration:207,songName:"Pumped Up Kicks",songSubName:"Foster The People",songAuthorName:"Skyler Wallace",levelAuthorName:"skylerwallace"},stats:{plays:0,downloads:17347,upvotes:6240,downvotes:151,score:.9423},uploaded:"2018-11-07T04:34:04Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b0f6224a2717b97a4538790a32eb618acae1f57a",key:"1eb2",state:"Published",createdAt:"2018-11-07T04:34:04Z",sageScore:6,diffs:[{njs:10,offset:0,notes:381,bombs:0,obstacles:41,nps:1.926,length:422,characteristic:"Standard",difficulty:"Normal",events:1994,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.813,paritySummary:{errors:82,warns:64,resets:0}},{njs:10,offset:0,notes:492,bombs:23,obstacles:16,nps:2.481,length:423,characteristic:"Standard",difficulty:"Hard",events:1994,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.281,paritySummary:{errors:58,warns:62,resets:4}},{njs:12,offset:0,notes:714,bombs:8,obstacles:34,nps:3.601,length:423,characteristic:"Standard",difficulty:"Expert",events:1994,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.281,paritySummary:{errors:69,warns:63,resets:1}}],downloadURL:"https://cdn.beatsaver.com/b0f6224a2717b97a4538790a32eb618acae1f57a.zip",coverURL:"https://cdn.beatsaver.com/b0f6224a2717b97a4538790a32eb618acae1f57a.jpg",previewURL:"https://cdn.beatsaver.com/b0f6224a2717b97a4538790a32eb618acae1f57a.mp3"}],createdAt:"2018-11-07T04:34:04Z",updatedAt:"2018-11-07T04:34:04Z",lastPublishedAt:"2018-11-07T04:34:04Z"},{id:"368c",name:"Harajuku Iyahoi - Kyary Pamyu Pamyu",description:"All difficulties relatively close to OST standards.\n\nThanks to n3tman, Sehria, OmniOmega, CyanSnow, Aeroluna, and Expo for their help.\n\nhttps://youtu.be/YqptqS0vIIA\nFollow me on Twitter u won't\nhttps://twitter.com/aggrogahu",uploader:{id:4284613,name:"aggrogahu",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fdad",avatar:"https://cdn.beatsaver.com/avatar/158363872649150464.png",type:"DISCORD"},metadata:{bpm:128,duration:218,songName:"Harajuku Iyahoi",songSubName:"Kyary Pamyu Pamyu",songAuthorName:"aggrogahu",levelAuthorName:"aggrogahu"},stats:{plays:0,downloads:4783,upvotes:2027,downvotes:17,score:.9421},uploaded:"2019-02-15T23:55:37Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8c392c31aeadb55eebeb978c09fa79857380f15c",key:"368c",state:"Published",createdAt:"2019-02-15T23:55:37Z",sageScore:4,diffs:[{njs:9,offset:0,notes:214,bombs:0,obstacles:15,nps:1.057,length:432,characteristic:"Standard",difficulty:"Easy",events:969,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:202.5,paritySummary:{errors:59,warns:16,resets:0}},{njs:9,offset:0,notes:306,bombs:0,obstacles:15,nps:1.511,length:432,characteristic:"Standard",difficulty:"Normal",events:969,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:202.5,paritySummary:{errors:68,warns:44,resets:0}},{njs:11,offset:0,notes:469,bombs:0,obstacles:21,nps:2.316,length:432,characteristic:"Standard",difficulty:"Hard",events:969,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:202.5,paritySummary:{errors:68,warns:98,resets:0}},{njs:12,offset:0,notes:685,bombs:6,obstacles:25,nps:3.383,length:432,characteristic:"Standard",difficulty:"Expert",events:969,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:202.5,paritySummary:{errors:85,warns:76,resets:2}}],downloadURL:"https://cdn.beatsaver.com/8c392c31aeadb55eebeb978c09fa79857380f15c.zip",coverURL:"https://cdn.beatsaver.com/8c392c31aeadb55eebeb978c09fa79857380f15c.jpg",previewURL:"https://cdn.beatsaver.com/8c392c31aeadb55eebeb978c09fa79857380f15c.mp3"}],createdAt:"2019-02-15T23:55:37Z",updatedAt:"2019-02-15T23:55:37Z",lastPublishedAt:"2019-02-15T23:55:37Z"},{id:"141",name:"GANGNAM STYLE",description:"Expert, Hard, and Normal tracks. I tried my best to setup the chorus charts to allow you to mimic the classic dance moves. I think it matches up quite nicely. I hope you have as much fun playing as I did making this! Enjoy!",uploader:{id:41378,name:"greatyazer",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea71",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ea71?d=retro",type:"SIMPLE"},metadata:{bpm:132,duration:219,songName:"Gangnam Style",songSubName:"PSY",songAuthorName:"GreatYazer",levelAuthorName:"greatyazer"},stats:{plays:0,downloads:35740,upvotes:21669,downvotes:788,score:.9421},uploaded:"2018-05-20T09:59:02Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"8e7e553099436af31564adf1977a5ec42a61cfff",key:"141",state:"Published",createdAt:"2018-05-20T09:59:02Z",sageScore:5,diffs:[{njs:10,offset:0,notes:415,bombs:4,obstacles:42,nps:2.02,length:452,characteristic:"Standard",difficulty:"Normal",events:735,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.455,paritySummary:{errors:191,warns:17,resets:0},stars:1.15},{njs:10,offset:0,notes:695,bombs:40,obstacles:94,nps:3.383,length:452,characteristic:"Standard",difficulty:"Hard",events:735,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.455,paritySummary:{errors:275,warns:23,resets:0}},{njs:10,offset:0,notes:932,bombs:50,obstacles:103,nps:4.536,length:452,characteristic:"Standard",difficulty:"Expert",events:735,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.455,paritySummary:{errors:332,warns:34,resets:0}}],downloadURL:"https://cdn.beatsaver.com/8e7e553099436af31564adf1977a5ec42a61cfff.zip",coverURL:"https://cdn.beatsaver.com/8e7e553099436af31564adf1977a5ec42a61cfff.jpg",previewURL:"https://cdn.beatsaver.com/8e7e553099436af31564adf1977a5ec42a61cfff.mp3"}],createdAt:"2018-05-20T09:59:02Z",updatedAt:"2018-05-20T09:59:02Z",lastPublishedAt:"2018-05-20T09:59:02Z"},{id:"319f",name:"Fall Out Boy - My songs know what you did in the dark (Light 'em up)",description:"Had a bit of time off lately so I went and made a other map. This time it's Fall Out Boy!\r\nI realise a map had been made for this track already, but I thought I'd give my take on it too seeing as its such a good song ;)\r\nAll difficulties are included from Easy to Expert so enjoy! :)\r\n\r\nUpdate: \r\nDecided to bite the bullet here and do an update. Big thanks for Heisenbergirl for pointing out the NJS felt off. Playing around with it I've now raised it to 13 (from 12) and learnt a valuable skill when it comes to mapping. Basically the NJS spaces out the notes a bit more so makes it easier to read.\r\nI also adjusted a couple of the opening notes on Hard because I didn't really like the way that they flowed.\r\nFinally just want to apologise to everyone who's worked hard on a score or left a review. It sucks to have to reset it like this but it did need the update.\r\n\r\nVideo: https://www.youtube.com/watch?v=iZMvCvyarYA",uploader:{id:4785,name:"stumi",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f720",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro",type:"SIMPLE"},metadata:{bpm:152,duration:188,songName:"My songs know what you did in the dark",songSubName:"Fall Out Boy",songAuthorName:"Stumi",levelAuthorName:"stumi"},stats:{plays:0,downloads:15797,upvotes:5260,downvotes:119,score:.9419},uploaded:"2019-01-27T13:00:05Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5b53a3bede4fd8ee0950d0c5ba2dbbff73b6d127",key:"319f",state:"Published",createdAt:"2019-01-27T13:00:05Z",sageScore:6,diffs:[{njs:10,offset:0,notes:243,bombs:4,obstacles:93,nps:1.362,length:452,characteristic:"Standard",difficulty:"Easy",events:1723,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.421,paritySummary:{errors:23,warns:13,resets:0}},{njs:10,offset:0,notes:328,bombs:4,obstacles:95,nps:1.838,length:452,characteristic:"Standard",difficulty:"Normal",events:1723,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.421,paritySummary:{errors:28,warns:28,resets:2}},{njs:11,offset:0,notes:514,bombs:4,obstacles:75,nps:2.881,length:452,characteristic:"Standard",difficulty:"Hard",events:1725,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.421,paritySummary:{errors:25,warns:18,resets:1}},{njs:13,offset:0,notes:693,bombs:8,obstacles:58,nps:3.884,length:452,characteristic:"Standard",difficulty:"Expert",events:1726,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.421,paritySummary:{errors:27,warns:21,resets:4}}],downloadURL:"https://cdn.beatsaver.com/5b53a3bede4fd8ee0950d0c5ba2dbbff73b6d127.zip",coverURL:"https://cdn.beatsaver.com/5b53a3bede4fd8ee0950d0c5ba2dbbff73b6d127.jpg",previewURL:"https://cdn.beatsaver.com/5b53a3bede4fd8ee0950d0c5ba2dbbff73b6d127.mp3"}],createdAt:"2019-01-27T13:00:05Z",updatedAt:"2019-01-27T13:00:05Z",lastPublishedAt:"2019-01-27T13:00:05Z"},{id:"ac0a",name:"Hornet (Hollow Knight OST)",description:'This song really loses something without Hornet\'s war cries of "SHAA" and "HEGAALE" every three seconds. It also really gains something, because without that you can actually hear the music for once.',uploader:{id:4285065,name:"skaiamechanic",uniqueSet:!0,hash:"5e455654470a8200067c9bf9",avatar:"https://cdn.beatsaver.com/avatar/274999097361170432.png",type:"DISCORD"},metadata:{bpm:145,duration:168,songName:"Hornet",songSubName:"Hollow Knight",songAuthorName:"Christopher Larkin",levelAuthorName:"SkaiaMechanic"},stats:{plays:0,downloads:6639,upvotes:2339,downvotes:26,score:.9418},uploaded:"2020-05-29T18:41:14.740Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"48f5d0ddc8c6a006b5633c828039912744393877",key:"ac0a",state:"Published",createdAt:"2020-05-29T18:41:14.740Z",sageScore:5,diffs:[{njs:15,offset:0,notes:695,bombs:0,obstacles:12,nps:4.266,length:393.75,characteristic:"Standard",difficulty:"Hard",events:2513,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:162.931,paritySummary:{errors:43,warns:55,resets:0}},{njs:18,offset:0,notes:720,bombs:0,obstacles:33,nps:4.419,length:393.75,characteristic:"Standard",difficulty:"Expert",events:2513,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:162.931,paritySummary:{errors:27,warns:35,resets:0}}],downloadURL:"https://cdn.beatsaver.com/48f5d0ddc8c6a006b5633c828039912744393877.zip",coverURL:"https://cdn.beatsaver.com/48f5d0ddc8c6a006b5633c828039912744393877.jpg",previewURL:"https://cdn.beatsaver.com/48f5d0ddc8c6a006b5633c828039912744393877.mp3"}],createdAt:"2020-05-29T18:41:14.740Z",updatedAt:"2020-05-29T18:41:14.740Z",lastPublishedAt:"2020-05-29T18:41:14.740Z"},{id:"176c",name:"24K Magic - Bruno Mars",description:"We're taking it back old school... It's time to DANCE, baby!\r\nDifficulties: Expert, Hard, Normal\r\nYouTube Preview: https://youtu.be/IA4W-Z7KXSo",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:107,duration:228,songName:"24K Magic",songSubName:"Bruno Mars",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:13810,upvotes:6648,downvotes:174,score:.9412},uploaded:"2018-09-27T01:05:07Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b9e05baa59f3ea5c97c5ae82766783d895249c61",key:"176c",state:"Published",createdAt:"2018-09-27T01:05:07Z",sageScore:6,diffs:[{njs:10,offset:0,notes:215,bombs:0,obstacles:38,nps:1.08,length:355,characteristic:"Standard",difficulty:"Normal",events:1484,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:199.065,paritySummary:{errors:49,warns:40,resets:0}},{njs:10,offset:0,notes:439,bombs:0,obstacles:40,nps:2.205,length:355,characteristic:"Standard",difficulty:"Hard",events:1480,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:199.065,paritySummary:{errors:44,warns:84,resets:0}},{njs:10,offset:0,notes:592,bombs:0,obstacles:52,nps:2.974,length:355,characteristic:"Standard",difficulty:"Expert",events:1480,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:199.065,paritySummary:{errors:70,warns:116,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b9e05baa59f3ea5c97c5ae82766783d895249c61.zip",coverURL:"https://cdn.beatsaver.com/b9e05baa59f3ea5c97c5ae82766783d895249c61.jpg",previewURL:"https://cdn.beatsaver.com/b9e05baa59f3ea5c97c5ae82766783d895249c61.mp3"}],createdAt:"2018-09-27T01:05:07Z",updatedAt:"2018-09-27T01:05:07Z",lastPublishedAt:"2018-09-27T01:05:07Z"},{id:"6ea9",name:"Down Under - Men At Work",description:"Here's another great 80's anthem - Down Under, by Men At Work. I really enjoyed mapping this song. So much so, that I decided to do a full spread from Expert Plus to Easy. This is a really fun map to play whatever your skill level. I hope you enjoy it as much as I do!\n\nhttps://youtu.be/G0gTegU32ng",uploader:{id:78593,name:"techbutterfly",uniqueSet:!0,hash:"5cff0b7798cc5a672c8566f7",avatar:"https://cdn.beatsaver.com/avatar/527111497617506304.png",type:"DISCORD"},metadata:{bpm:107,duration:210,songName:"Down Under",songSubName:"",songAuthorName:"Men At Work",levelAuthorName:"TechButterfly"},stats:{plays:0,downloads:12452,upvotes:3609,downvotes:67,score:.9411},uploaded:"2019-11-07T20:34:53.687Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c9ceaf7a8a7cea8381d08618c66110abbc4844f9",key:"6ea9",state:"Published",createdAt:"2019-11-07T20:34:53.687Z",sageScore:6,diffs:[{njs:12,offset:0,notes:249,bombs:0,obstacles:0,nps:1.22,length:364,characteristic:"Standard",difficulty:"Easy",events:1970,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.112,paritySummary:{errors:59,warns:52,resets:0}},{njs:12,offset:0,notes:416,bombs:0,obstacles:0,nps:2.038,length:364,characteristic:"Standard",difficulty:"Normal",events:1970,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.112,paritySummary:{errors:85,warns:84,resets:0}},{njs:15,offset:0,notes:613,bombs:0,obstacles:0,nps:3.003,length:364,characteristic:"Standard",difficulty:"Hard",events:1970,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.112,paritySummary:{errors:54,warns:97,resets:0}},{njs:16,offset:0,notes:753,bombs:0,obstacles:0,nps:3.689,length:364,characteristic:"Standard",difficulty:"Expert",events:1970,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.112,paritySummary:{errors:47,warns:56,resets:0}},{njs:17,offset:.8,notes:938,bombs:0,obstacles:0,nps:4.596,length:364,characteristic:"Standard",difficulty:"ExpertPlus",events:1970,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.112,paritySummary:{errors:60,warns:36,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c9ceaf7a8a7cea8381d08618c66110abbc4844f9.zip",coverURL:"https://cdn.beatsaver.com/c9ceaf7a8a7cea8381d08618c66110abbc4844f9.jpg",previewURL:"https://cdn.beatsaver.com/c9ceaf7a8a7cea8381d08618c66110abbc4844f9.mp3"}],createdAt:"2019-11-07T20:34:53.687Z",updatedAt:"2019-11-07T20:34:53.687Z",lastPublishedAt:"2019-11-07T20:34:53.687Z"},{id:"195f",name:"Under The Sea (Little Mermaid) - Samuel E. Wright",description:'"What do they got? A lot of sand. We got a hot crustacean band! Each little clam here know how to jam here, under the sea!"\r\nDifficulties: Expert+, Expert, Hard, Normal\r\nYouTube Preview: https://youtu.be/h6eMPlGUZsw',uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:200,duration:194,songName:"Under The Sea",songSubName:"Samuel E. Wright",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:15120,upvotes:6093,downvotes:156,score:.9408},uploaded:"2018-10-08T23:44:34Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f745bac45c618fa2c49a0ee0c383f2a6cb356a78",key:"195f",state:"Published",createdAt:"2018-10-08T23:44:34Z",sageScore:4,diffs:[{njs:10,offset:0,notes:277,bombs:0,obstacles:9,nps:1.464,length:630,characteristic:"Standard",difficulty:"Normal",events:1406,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:189,paritySummary:{errors:31,warns:31,resets:0}},{njs:10,offset:0,notes:317,bombs:0,obstacles:9,nps:1.673,length:631,characteristic:"Standard",difficulty:"Hard",events:1406,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:189.3,paritySummary:{errors:47,warns:28,resets:0}},{njs:10,offset:0,notes:541,bombs:0,obstacles:9,nps:2.855,length:631,characteristic:"Standard",difficulty:"Expert",events:1406,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:189.3,paritySummary:{errors:61,warns:89,resets:0}},{njs:10,offset:0,notes:848,bombs:0,obstacles:9,nps:4.475,length:631,characteristic:"Standard",difficulty:"ExpertPlus",events:1406,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:189.3,paritySummary:{errors:86,warns:112,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f745bac45c618fa2c49a0ee0c383f2a6cb356a78.zip",coverURL:"https://cdn.beatsaver.com/f745bac45c618fa2c49a0ee0c383f2a6cb356a78.jpg",previewURL:"https://cdn.beatsaver.com/f745bac45c618fa2c49a0ee0c383f2a6cb356a78.mp3"}],createdAt:"2018-10-08T23:44:34Z",updatedAt:"2018-10-08T23:44:34Z",lastPublishedAt:"2018-10-08T23:44:34Z"},{id:"849a",name:"Darude Sandstorm",description:"du du du du du\nI originally mapped this back in May 2018, and then again in June 2018. The Beatsaver site migration yeeted the map, so I've restored the two original maps as well as 5 new standard difficulties, 5 one saber difficulties, and one 360 level. Fun Fact: Freeek originally got the idea to create Lightmap because he hated the lighting in the original Sandstorm map...so I created a new version of Lightmap and used that to light the new difficulties.\n\nStandard\nEasy - 307 notes (1.37 NPS)\nNormal - 505 notes (2.25 NPS)\nHard - 756 notes (3.38 NPS)\nExpert - 1120 notes (5.00 NPS)\nExpert+ - 1358 notes (6.06 NPS)\n\nOne Saber\nEasy - 192 notes (0.86 NPS)\nNormal - 302 notes (1.35 NPS)\nHard - 508 notes (2.27 NPS)\nExpert - 734 notes (3.28 NPS)\nExpert+ - 1112 notes (4.96 NPS)\n\nNo Arrows\nOriginal Expert - 1151 notes (5.14 NPS)\nOriginal Expert+ - 1141 notes (5.09 NPS)\n\n360\nExpert+ - 1359 notes (6.07 NPS)\n\nGameplay: Coming Soon\nSong: https://youtu.be/y6120QOlsfU",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:136,duration:224,songName:"Sandstorm",songSubName:"",songAuthorName:"Darude",levelAuthorName:"Skyler Wallace"},stats:{plays:0,downloads:29265,upvotes:10584,downvotes:337,score:.9406},uploaded:"2020-02-06T04:55:40.715Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"580eb7d1614a35d192722f748400c9896ac9527d",key:"849a",state:"Published",createdAt:"2020-02-06T04:55:40.715Z",sageScore:6,diffs:[{njs:10,offset:-1,notes:307,bombs:0,obstacles:15,nps:1.407,length:496,characteristic:"Standard",difficulty:"Easy",events:13998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.824,paritySummary:{errors:154,warns:44,resets:0},stars:.89},{njs:10,offset:-1,notes:505,bombs:0,obstacles:15,nps:2.314,length:496,characteristic:"Standard",difficulty:"Normal",events:13998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.824,paritySummary:{errors:143,warns:46,resets:0},stars:1.42},{njs:12,offset:.5,notes:756,bombs:0,obstacles:27,nps:3.464,length:496,characteristic:"Standard",difficulty:"Hard",events:13998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.824,paritySummary:{errors:26,warns:18,resets:0},stars:2.01},{njs:15,offset:0,notes:1120,bombs:0,obstacles:43,nps:5.133,length:496,characteristic:"Standard",difficulty:"Expert",events:13998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.824,paritySummary:{errors:12,warns:6,resets:0},stars:4.2},{njs:17,offset:-.25,notes:1358,bombs:18,obstacles:23,nps:6.223,length:496,characteristic:"Standard",difficulty:"ExpertPlus",events:13969,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.824,paritySummary:{errors:4,warns:6,resets:0},stars:5.95},{njs:10,offset:-1,notes:192,bombs:0,obstacles:13,nps:.88,length:496,characteristic:"OneSaber",difficulty:"Easy",events:13998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.824,paritySummary:{errors:88,warns:26,resets:0}},{njs:10,offset:-1,notes:302,bombs:0,obstacles:15,nps:1.384,length:496,characteristic:"OneSaber",difficulty:"Normal",events:13998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.824,paritySummary:{errors:65,warns:74,resets:0}},{njs:12,offset:.5,notes:508,bombs:0,obstacles:15,nps:2.328,length:496,characteristic:"OneSaber",difficulty:"Hard",events:13998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.824,paritySummary:{errors:53,warns:64,resets:0}},{njs:15,offset:0,notes:734,bombs:0,obstacles:24,nps:3.364,length:496,characteristic:"OneSaber",difficulty:"Expert",events:13998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.824,paritySummary:{errors:4,warns:5,resets:0}},{njs:17,offset:-.25,notes:1112,bombs:0,obstacles:41,nps:5.096,length:496,characteristic:"OneSaber",difficulty:"ExpertPlus",events:13998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.824,paritySummary:{errors:5,warns:9,resets:0}},{njs:12,offset:.5,notes:1151,bombs:0,obstacles:19,nps:4.089,length:639.75,characteristic:"NoArrows",difficulty:"Expert",events:1080,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:282.243,paritySummary:{errors:87,warns:41,resets:0}},{njs:15,offset:0,notes:1141,bombs:0,obstacles:31,nps:4.054,length:639.75,characteristic:"NoArrows",difficulty:"ExpertPlus",events:2315,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:282.243,paritySummary:{errors:129,warns:34,resets:0}},{njs:17,offset:0,notes:1359,bombs:0,obstacles:27,nps:6.228,length:496,characteristic:"360Degree",difficulty:"ExpertPlus",events:14547,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.824,paritySummary:{errors:4,warns:6,resets:0}}],downloadURL:"https://cdn.beatsaver.com/580eb7d1614a35d192722f748400c9896ac9527d.zip",coverURL:"https://cdn.beatsaver.com/580eb7d1614a35d192722f748400c9896ac9527d.jpg",previewURL:"https://cdn.beatsaver.com/580eb7d1614a35d192722f748400c9896ac9527d.mp3"}],createdAt:"2020-02-06T04:55:40.715Z",updatedAt:"2020-02-06T04:55:40.715Z",lastPublishedAt:"2020-02-06T04:55:40.715Z"},{id:"4858",name:"Papercut - Linkin Park",description:"YouTube:\r\nhttps://www.youtube.com/watch?v=vjVkXlxsO8Q",uploader:{id:27983,name:"heisenbergirl",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ec30",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ec30?d=retro",type:"SIMPLE"},metadata:{bpm:150,duration:187,songName:"Papercut",songSubName:"Linkin Park",songAuthorName:"Heisenberg",levelAuthorName:"heisenbergirl"},stats:{plays:0,downloads:9559,upvotes:4539,downvotes:101,score:.9406},uploaded:"2019-04-25T17:52:09Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"431ffaa53a1e45ffab6c81a895e456f6aad1e038",key:"4858",state:"Published",createdAt:"2019-04-25T17:52:09Z",sageScore:6,diffs:[{njs:12,offset:0,notes:634,bombs:0,obstacles:96,nps:3.534,length:449,characteristic:"Standard",difficulty:"Hard",events:2316,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:179.6,paritySummary:{errors:40,warns:45,resets:0}},{njs:15,offset:0,notes:842,bombs:0,obstacles:90,nps:4.694,length:449,characteristic:"Standard",difficulty:"Expert",events:2316,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:179.6,paritySummary:{errors:16,warns:22,resets:0}},{njs:18,offset:0,notes:993,bombs:0,obstacles:66,nps:5.535,length:449,characteristic:"Standard",difficulty:"ExpertPlus",events:2327,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:179.6,paritySummary:{errors:31,warns:63,resets:0}}],downloadURL:"https://cdn.beatsaver.com/431ffaa53a1e45ffab6c81a895e456f6aad1e038.zip",coverURL:"https://cdn.beatsaver.com/431ffaa53a1e45ffab6c81a895e456f6aad1e038.jpg",previewURL:"https://cdn.beatsaver.com/431ffaa53a1e45ffab6c81a895e456f6aad1e038.mp3"}],createdAt:"2019-04-25T17:52:09Z",updatedAt:"2019-04-25T17:52:09Z",lastPublishedAt:"2019-04-25T17:52:09Z"},{id:"5d8d",name:"New Game - Nitro Fun",description:"Dancey E+, not very challenging.\n\nSee it in action: https://www.youtube.com/watch?v=IddrPmb4poA\n\nThank you to my playtesters:\n\nQTpop (https://www.twitch.tv/qtpop)\nTheRainbowGamerGirl (https://www.twitch.tv/therainbowgamergirl)",uploader:{id:38202,name:"fafurion",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f945",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f945?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:261,songName:"New Game",songSubName:"",songAuthorName:"Nitro Fun",levelAuthorName:"Fafurion"},stats:{plays:0,downloads:4880,upvotes:2873,downvotes:46,score:.9404},uploaded:"2019-08-17T15:26:08.685Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"310694f2ff8d129d4e64192251653caffdc65b62",key:"5d8d",state:"Published",createdAt:"2019-08-17T15:26:08.685Z",sageScore:5,diffs:[{njs:16,offset:0,notes:1229,bombs:0,obstacles:37,nps:4.824,length:543.5,characteristic:"Standard",difficulty:"ExpertPlus",events:7711,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:254.766,paritySummary:{errors:45,warns:81,resets:0}}],downloadURL:"https://cdn.beatsaver.com/310694f2ff8d129d4e64192251653caffdc65b62.zip",coverURL:"https://cdn.beatsaver.com/310694f2ff8d129d4e64192251653caffdc65b62.jpg",previewURL:"https://cdn.beatsaver.com/310694f2ff8d129d4e64192251653caffdc65b62.mp3"}],createdAt:"2019-08-17T15:26:08.685Z",updatedAt:"2019-08-17T15:26:08.685Z",lastPublishedAt:"2019-08-17T15:26:08.685Z"},{id:"2b1a",name:"Fallen Kingdom [Viva la Vida Minecraft Parody] - CaptainSparklez ft. TryHardNinja",description:"As requested by @ScrewBedtime and @Anonymous_Food: Fallen Kingdom, CaptainSparklez's minecraft parody of Viva la Vida. The parody's song arrangement is slightly different than the original so I had to remap some parts. This map goes out to all the 12 year olds that will listen to this instead of the original all because it has Minecraft lol. For the full experience play this with a minecraft saber and platform.",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:138,duration:255,songName:"Fallen Kingdom",songSubName:"CaptainSparklez ft. TryHardNinja",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:8390,upvotes:4332,downvotes:95,score:.9403},uploaded:"2019-01-05T10:20:33Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"06150c7c34af95f53f5ed8fac5659c70649a07f0",key:"2b1a",state:"Published",createdAt:"2019-01-05T10:20:33Z",sageScore:4,diffs:[{njs:14,offset:0,notes:925,bombs:0,obstacles:43,nps:4.037,length:527,characteristic:"Standard",difficulty:"Hard",events:727,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:229.13,paritySummary:{errors:40,warns:37,resets:0}}],downloadURL:"https://cdn.beatsaver.com/06150c7c34af95f53f5ed8fac5659c70649a07f0.zip",coverURL:"https://cdn.beatsaver.com/06150c7c34af95f53f5ed8fac5659c70649a07f0.jpg",previewURL:"https://cdn.beatsaver.com/06150c7c34af95f53f5ed8fac5659c70649a07f0.mp3"}],createdAt:"2019-01-05T10:20:33Z",updatedAt:"2019-01-05T10:20:33Z",lastPublishedAt:"2019-01-05T10:20:33Z"},{id:"4adb",name:"Deja Vu - Dave Rodgers (Initial D)",description:"Was requested to get this Ranked, so some minor changes to fit updates in Ranking criteria!\r\n\r\nNotes Per Second:\r\nEasy / 1.6\r\nNormal / 2\r\nHard / 2.6\r\nExpert / 3.6\r\nExpert+ / 4.2\r\n\r\nExpert+ Playthrough:\r\nhttps://streamable.com/pk918",uploader:{id:11373,name:"redmagi",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e9d2",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9d2?d=retro",type:"SIMPLE"},metadata:{bpm:154,duration:105,songName:"Deja Vu (Short Ver.)",songSubName:"Dave Rodgers",songAuthorName:"Redmagi",levelAuthorName:"redmagi"},stats:{plays:0,downloads:24353,upvotes:10971,downvotes:358,score:.9402},uploaded:"2019-05-05T18:37:01Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"c9c15d3f3109a8f732b41b299ce84556bebf73ac",key:"4adb",state:"Published",createdAt:"2019-05-05T18:37:01Z",sageScore:8,diffs:[{njs:10,offset:1,notes:171,bombs:0,obstacles:11,nps:1.669,length:263,characteristic:"Standard",difficulty:"Easy",events:1439,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:102.468,paritySummary:{errors:9,warns:6,resets:0},stars:.95},{njs:12,offset:1,notes:211,bombs:45,obstacles:8,nps:2.059,length:263,characteristic:"Standard",difficulty:"Normal",events:1439,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:102.468,paritySummary:{errors:27,warns:26,resets:2},stars:1.29},{njs:14,offset:1,notes:281,bombs:56,obstacles:8,nps:2.742,length:263,characteristic:"Standard",difficulty:"Hard",events:1439,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:102.468,paritySummary:{errors:18,warns:28,resets:6},stars:1.92},{njs:15,offset:1,notes:382,bombs:24,obstacles:0,nps:3.728,length:263,characteristic:"Standard",difficulty:"Expert",events:1439,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:102.468,paritySummary:{errors:19,warns:36,resets:4},stars:2.68},{njs:18,offset:0,notes:446,bombs:32,obstacles:0,nps:4.353,length:263,characteristic:"Standard",difficulty:"ExpertPlus",events:1439,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:102.468,paritySummary:{errors:19,warns:56,resets:0},stars:4.46}],downloadURL:"https://cdn.beatsaver.com/c9c15d3f3109a8f732b41b299ce84556bebf73ac.zip",coverURL:"https://cdn.beatsaver.com/c9c15d3f3109a8f732b41b299ce84556bebf73ac.jpg",previewURL:"https://cdn.beatsaver.com/c9c15d3f3109a8f732b41b299ce84556bebf73ac.mp3"}],createdAt:"2019-05-05T18:37:01Z",updatedAt:"2019-05-05T18:37:01Z",lastPublishedAt:"2019-05-05T18:37:01Z"},{id:"4a47",name:"[Anniversary] Supernova - Laszlo [DownyCat]",description:"Part of the Anniversary Song Pack",uploader:{id:37070,name:"anniversaryteam",uniqueSet:!0,hash:"5cff0b7798cc5a672c8565a3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:196,songName:"Supernova",songSubName:"Laszlo",songAuthorName:"DownyCat",levelAuthorName:"AnniversaryTeam"},stats:{plays:0,downloads:7974,upvotes:4371,downvotes:97,score:.9402},uploaded:"2019-05-03T14:10:59Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"17ad188a8dea7cff81f5f7c6720099a1e395b168",key:"4a47",state:"Published",createdAt:"2019-05-03T14:10:59Z",sageScore:8,diffs:[{njs:12,offset:0,notes:260,bombs:0,obstacles:18,nps:1.387,length:400,characteristic:"Standard",difficulty:"Easy",events:4926,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:187.5,paritySummary:{errors:21,warns:17,resets:0}},{njs:12,offset:0,notes:375,bombs:0,obstacles:22,nps:2,length:400,characteristic:"Standard",difficulty:"Normal",events:4926,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:187.5,paritySummary:{errors:18,warns:14,resets:0}},{njs:12,offset:0,notes:491,bombs:0,obstacles:22,nps:2.619,length:400,characteristic:"Standard",difficulty:"Hard",events:4926,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:187.5,paritySummary:{errors:16,warns:19,resets:0}},{njs:16,offset:0,notes:832,bombs:0,obstacles:22,nps:4.437,length:400,characteristic:"Standard",difficulty:"Expert",events:4926,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:187.5,paritySummary:{errors:12,warns:8,resets:0}},{njs:18,offset:0,notes:959,bombs:0,obstacles:22,nps:5.115,length:400,characteristic:"Standard",difficulty:"ExpertPlus",events:4926,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:187.5,paritySummary:{errors:18,warns:15,resets:0}}],downloadURL:"https://cdn.beatsaver.com/17ad188a8dea7cff81f5f7c6720099a1e395b168.zip",coverURL:"https://cdn.beatsaver.com/17ad188a8dea7cff81f5f7c6720099a1e395b168.jpg",previewURL:"https://cdn.beatsaver.com/17ad188a8dea7cff81f5f7c6720099a1e395b168.mp3"}],createdAt:"2019-05-03T14:10:59Z",updatedAt:"2019-05-03T14:10:59Z",lastPublishedAt:"2019-05-03T14:10:59Z"},{id:"36d5",name:"TheFatRat - MAYDAY feat. Laura Brehm",description:"reuploaded for ranked\n",uploader:{id:4284400,name:"oddloop",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fd45",avatar:"https://cdn.beatsaver.com/avatar/173241614192476161.png",type:"DISCORD"},metadata:{bpm:150,duration:247,songName:"MAYDAY",songSubName:"TheFatRat & Laura Brehm",songAuthorName:"Oddloop",levelAuthorName:"oddloop"},stats:{plays:0,downloads:12226,upvotes:4840,downvotes:114,score:.9402},uploaded:"2019-02-16T21:37:31Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"6a9042eb11d4da0938bbdaa0f584131def762f4a",key:"36d5",state:"Published",createdAt:"2019-02-16T21:37:31Z",sageScore:6,diffs:[{njs:16,offset:0,notes:887,bombs:0,obstacles:20,nps:3.807,length:582.5,characteristic:"Standard",difficulty:"Expert",events:1307,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:233,paritySummary:{errors:23,warns:24,resets:0},stars:2.85}],downloadURL:"https://cdn.beatsaver.com/6a9042eb11d4da0938bbdaa0f584131def762f4a.zip",coverURL:"https://cdn.beatsaver.com/6a9042eb11d4da0938bbdaa0f584131def762f4a.jpg",previewURL:"https://cdn.beatsaver.com/6a9042eb11d4da0938bbdaa0f584131def762f4a.mp3"}],createdAt:"2019-02-16T21:37:31Z",updatedAt:"2019-02-16T21:37:31Z",lastPublishedAt:"2019-02-16T21:37:31Z"},{id:"49ae",name:"Lindsey Stirling - Shatter Me",description:"Feedback on Discord: nitronik.exe#7974\nNote: if you dont like flashy lights, turn on static lights! (also epilepsy warning lol)\npreview: https://www.youtube.com/watch?v=0JGEh4lPVpA\n\nEasy (lightshow): 0 notes, 0 nps, 0 bombs, 0 walls, njs 10\nNormal: 692 notes, 2.37 nps, 0 bombs, 25 walls, njs 10\nHard: 912 notes, 3.13 nps, 8 bombs, 29 walls, njs 13\nExpert: 1166 notes, 4 nps, 38 bombs, 29 walls, njs 16\nExpertPlus: 1462 Notes, 5.02 nps, 64 bombs, 33 walls, njs 19",uploader:{id:4284201,name:"nitronikexe",uniqueSet:!0,hash:"5cff0b7798cc5a672c855d84",avatar:"https://cdn.beatsaver.com/avatar/428230049704181760.png",type:"DISCORD"},metadata:{bpm:145,duration:291,songName:"Shatter Me",songSubName:"Lindsey Stirling",songAuthorName:"nitronik.exe",levelAuthorName:"nitronikexe"},stats:{plays:0,downloads:10457,upvotes:5571,downvotes:144,score:.9397},uploaded:"2019-05-01T10:07:45Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0c02558f26e46d94c33728885a10ea8a4e2a9fd5",key:"49ae",state:"Published",createdAt:"2019-05-01T10:07:45Z",sageScore:8,diffs:[{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Standard",difficulty:"Easy",events:7862,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:10,offset:0,notes:692,bombs:0,obstacles:25,nps:2.57,length:650.667,characteristic:"Standard",difficulty:"Normal",events:7862,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:269.241,paritySummary:{errors:0,warns:18,resets:0}},{njs:13,offset:0,notes:912,bombs:8,obstacles:29,nps:3.386,length:651,characteristic:"Standard",difficulty:"Hard",events:7862,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:269.379,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:1166,bombs:38,obstacles:29,nps:4.305,length:654.5,characteristic:"Standard",difficulty:"Expert",events:7862,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:270.828,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:0,notes:1462,bombs:64,obstacles:33,nps:5.427,length:651,characteristic:"Standard",difficulty:"ExpertPlus",events:7862,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:269.379,paritySummary:{errors:8,warns:4,resets:20}}],downloadURL:"https://cdn.beatsaver.com/0c02558f26e46d94c33728885a10ea8a4e2a9fd5.zip",coverURL:"https://cdn.beatsaver.com/0c02558f26e46d94c33728885a10ea8a4e2a9fd5.jpg",previewURL:"https://cdn.beatsaver.com/0c02558f26e46d94c33728885a10ea8a4e2a9fd5.mp3"}],createdAt:"2019-05-01T10:07:45Z",updatedAt:"2019-05-01T10:07:45Z",lastPublishedAt:"2019-05-01T10:07:45Z"},{id:"45e",name:"CAN'T STOP THE FEELING! - Justin Timberlake",description:"Difficulties: Expert Only Lighting by GreatYazer\r\nWatch Me on Twitch: http://www.twitch.tv/bennydabeastlive\r\n\r\nIf you like this, check out my other beat maps:\r\nMidnight City by M83: https://beatsaver.com/details.php?id=542\r\nKids by MGMT: https://beatsaver.com/details.php?id=421\r\nWhat You Know by Two Door Cinema Club: https://beatsaver.com/details.php?id=1107\r\nPolish Girl by Neon Indian: https://beatsaver.com/details.php?id=694",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:113,duration:238,songName:"CAN'T STOP THE FEELING!",songSubName:"Justin Timberlake",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:18524,upvotes:6933,downvotes:197,score:.9397},uploaded:"2018-06-08T21:44:40Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"91ba25c089d50e93154e2c7920c46d4730f22569",key:"45e",state:"Published",createdAt:"2018-06-08T21:44:40Z",sageScore:5,diffs:[{njs:10,offset:0,notes:579,bombs:0,obstacles:38,nps:2.507,length:435,characteristic:"Standard",difficulty:"Expert",events:709,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:230.973,paritySummary:{errors:110,warns:65,resets:0}}],downloadURL:"https://cdn.beatsaver.com/91ba25c089d50e93154e2c7920c46d4730f22569.zip",coverURL:"https://cdn.beatsaver.com/91ba25c089d50e93154e2c7920c46d4730f22569.jpg",previewURL:"https://cdn.beatsaver.com/91ba25c089d50e93154e2c7920c46d4730f22569.mp3"}],createdAt:"2018-06-08T21:44:40Z",updatedAt:"2018-06-08T21:44:40Z",lastPublishedAt:"2018-06-08T21:44:40Z"},{id:"80da",name:"chelmico - Easy Breezy [Keep Your Hands Off Eizouken! Opening]",description:"stan sayaka\n\nAlso please check out chelmico's other songs. I've just recently become addicted to their songs\n\nBPM 186 |\nExpert+\nExpert\nHard\nBreezy (Normal)\nEasy\n\nthanks as always\n\nDM any feedback on Discord\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:186,duration:109,songName:"Easy Breezy",songSubName:"",songAuthorName:"chelmico",levelAuthorName:"ETAN"},stats:{plays:0,downloads:7380,upvotes:2370,downvotes:33,score:.9396},uploaded:"2020-01-24T11:15:41.867Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"070007ff180423aa0abf3f2ba5584b0846788ee8",key:"80da",state:"Published",createdAt:"2020-01-24T11:15:41.867Z",sageScore:6,diffs:[{njs:10,offset:.5,notes:117,bombs:8,obstacles:11,nps:1.242,length:292,characteristic:"Standard",difficulty:"Easy",events:4738,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:94.194,paritySummary:{errors:7,warns:7,resets:2}},{njs:12,offset:0,notes:181,bombs:17,obstacles:11,nps:1.909,length:294,characteristic:"Standard",difficulty:"Normal",events:4738,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:94.839,paritySummary:{errors:1,warns:1,resets:2}},{njs:13,offset:0,notes:272,bombs:17,obstacles:11,nps:2.858,length:295,characteristic:"Standard",difficulty:"Hard",events:4738,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:95.161,paritySummary:{errors:0,warns:0,resets:0}},{njs:14,offset:1,notes:368,bombs:17,obstacles:11,nps:3.765,length:303,characteristic:"Standard",difficulty:"Expert",events:4738,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:97.742,paritySummary:{errors:0,warns:0,resets:2}},{njs:21,offset:0,notes:467,bombs:17,obstacles:11,nps:4.778,length:303,characteristic:"Standard",difficulty:"ExpertPlus",events:4687,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:97.742,paritySummary:{errors:0,warns:0,resets:2}},{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:4687,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/070007ff180423aa0abf3f2ba5584b0846788ee8.zip",coverURL:"https://cdn.beatsaver.com/070007ff180423aa0abf3f2ba5584b0846788ee8.jpg",previewURL:"https://cdn.beatsaver.com/070007ff180423aa0abf3f2ba5584b0846788ee8.mp3"}],createdAt:"2020-01-24T11:15:41.867Z",updatedAt:"2020-01-24T11:15:41.867Z",lastPublishedAt:"2020-01-24T11:15:41.867Z"},{id:"68f4",name:"Ehrling - Palm Trees",description:"Expert / Hard / Normal\r\nMade for HeyFalcon",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:122,duration:167,songName:"Palm Trees",songSubName:"",songAuthorName:"Ehrling",levelAuthorName:"Rustic"},stats:{plays:0,downloads:3862,upvotes:2336,downvotes:32,score:.9396},uploaded:"2019-10-10T18:18:18.093Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6eef9850cfeb43d14c66323cfbae50d8532c9c43",key:"68f4",state:"Published",createdAt:"2019-10-10T18:18:18.093Z",sageScore:6,diffs:[{njs:12,offset:0,notes:257,bombs:0,obstacles:4876,nps:1.574,length:332,characteristic:"Standard",difficulty:"Normal",events:1638,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:163.279,paritySummary:{errors:0,warns:0,resets:0}},{njs:14,offset:0,notes:336,bombs:0,obstacles:4876,nps:2.058,length:332,characteristic:"Standard",difficulty:"Hard",events:1638,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:163.279,paritySummary:{errors:0,warns:0,resets:0}},{njs:17,offset:0,notes:337,bombs:0,obstacles:4876,nps:2.064,length:332,characteristic:"Standard",difficulty:"Expert",events:1694,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:163.279,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6eef9850cfeb43d14c66323cfbae50d8532c9c43.zip",coverURL:"https://cdn.beatsaver.com/6eef9850cfeb43d14c66323cfbae50d8532c9c43.jpg",previewURL:"https://cdn.beatsaver.com/6eef9850cfeb43d14c66323cfbae50d8532c9c43.mp3"}],createdAt:"2019-10-10T18:18:18.093Z",updatedAt:"2019-10-10T18:18:18.093Z",lastPublishedAt:"2019-10-10T18:18:18.093Z"},{id:"1311",name:"Restart",description:"Finally!\r\n\r\nAnother map for you all to enjoy!\r\n\r\nThis cheerful song will get anyones spirits up! \r\nAnd with the song being part dancey part flow your gonna wish you played it!\r\n\r\nExpert+ is HyperSpeed mode for those who want to play fast!\r\n\r\nAll lighting was done by me!\r\nI do say that ive got a talent for lighting hmm? ;P",uploader:{id:4289111,name:"blackblazon",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ef34",avatar:"https://cdn.beatsaver.com/avatar/127162370538733568.png",type:"DISCORD"},metadata:{bpm:155,duration:252,songName:"Restart",songSubName:"Subtact",songAuthorName:"BlackBlazon",levelAuthorName:"blackblazon"},stats:{plays:0,downloads:5574,upvotes:2795,downvotes:46,score:.9396},uploaded:"2018-09-02T01:56:36Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c7a915c5315591f5a0e31f89dbbad4e69992f353",key:"1311",state:"Published",createdAt:"2018-09-02T01:56:36Z",sageScore:5,diffs:[{njs:12,offset:0,notes:1116,bombs:0,obstacles:0,nps:4.512,length:639,characteristic:"Standard",difficulty:"Expert",events:1785,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:247.355,paritySummary:{errors:66,warns:23,resets:0}},{njs:15,offset:0,notes:1116,bombs:0,obstacles:0,nps:4.512,length:639,characteristic:"Standard",difficulty:"ExpertPlus",events:1785,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:247.355,paritySummary:{errors:66,warns:23,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c7a915c5315591f5a0e31f89dbbad4e69992f353.zip",coverURL:"https://cdn.beatsaver.com/c7a915c5315591f5a0e31f89dbbad4e69992f353.jpg",previewURL:"https://cdn.beatsaver.com/c7a915c5315591f5a0e31f89dbbad4e69992f353.mp3"}],createdAt:"2018-09-02T01:56:36Z",updatedAt:"2018-09-02T01:56:36Z",lastPublishedAt:"2018-09-02T01:56:36Z"},{id:"3fd3",name:"Cowboy Bebop - Tank! (Ben Briggs Remix)",description:"New lights, Expert now E+, an actual Expert added.",uploader:{id:4285169,name:"ryger",uniqueSet:!0,hash:"5cff0b7798cc5a672c855a42",avatar:"https://cdn.beatsaver.com/avatar/169266024502263808.png",type:"DISCORD"},metadata:{bpm:128,duration:173,songName:"Tank! (Ben Briggs Remix)",songSubName:"Cowboy Bebop",songAuthorName:"Ryger",levelAuthorName:"Ryger"},stats:{plays:0,downloads:10556,upvotes:4579,downvotes:108,score:.9395},uploaded:"2019-03-22T19:27:47Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8a19fa1812254b7b610e667039af155cee68606a",key:"3fd3",state:"Published",createdAt:"2019-03-22T19:27:47Z",sageScore:6,diffs:[{njs:14,offset:0,notes:703,bombs:0,obstacles:5,nps:4.173,length:359.375,characteristic:"Standard",difficulty:"Expert",events:3940,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.457,paritySummary:{errors:41,warns:24,resets:0}},{njs:14,offset:0,notes:780,bombs:0,obstacles:5,nps:4.63,length:359.375,characteristic:"Standard",difficulty:"ExpertPlus",events:3940,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.457,paritySummary:{errors:68,warns:46,resets:0}}],downloadURL:"https://cdn.beatsaver.com/8a19fa1812254b7b610e667039af155cee68606a.zip",coverURL:"https://cdn.beatsaver.com/8a19fa1812254b7b610e667039af155cee68606a.jpg",previewURL:"https://cdn.beatsaver.com/8a19fa1812254b7b610e667039af155cee68606a.mp3"}],createdAt:"2019-03-22T19:27:47Z",updatedAt:"2019-03-22T19:27:47Z",lastPublishedAt:"2019-03-22T19:27:47Z"},{id:"6484",name:"Poison - Nightcore",description:"Youtube Preview: https://youtu.be/dzbdbXJWKMQ",uploader:{id:23751,name:"monteblanco",uniqueSet:!0,hash:"5cff0b7798cc5a672c855ef5",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855ef5?d=retro",type:"SIMPLE"},metadata:{bpm:169,duration:150,songName:"Poison - Nightcore",songSubName:"",songAuthorName:"Groove Coverage",levelAuthorName:"Monteblanco"},stats:{plays:0,downloads:6746,upvotes:3401,downvotes:67,score:.9394},uploaded:"2019-09-19T13:15:08.715Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e570d226c15ad3f5c4b84cfffe3542e61facc502",key:"6484",state:"Published",createdAt:"2019-09-19T13:15:08.715Z",sageScore:5,diffs:[{njs:15,offset:0,notes:504,bombs:4,obstacles:24,nps:3.518,length:403.5,characteristic:"Standard",difficulty:"Expert",events:616,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:143.254,paritySummary:{errors:0,warns:0,resets:2}}],downloadURL:"https://cdn.beatsaver.com/e570d226c15ad3f5c4b84cfffe3542e61facc502.zip",coverURL:"https://cdn.beatsaver.com/e570d226c15ad3f5c4b84cfffe3542e61facc502.jpg",previewURL:"https://cdn.beatsaver.com/e570d226c15ad3f5c4b84cfffe3542e61facc502.mp3"}],createdAt:"2019-09-19T13:15:08.715Z",updatedAt:"2019-09-19T13:15:08.715Z",lastPublishedAt:"2019-09-19T13:15:08.715Z"},{id:"2c4f",name:"POP/STARS vs MEGALOVANIA - Dj CUTMAN",description:"As requested by @Gravemind1. POP/STARS vs MEGALOVANIA by Dj CUTMAN! I had fun mapping this (especially since it gives me a reason to lightmap the KDA environment!) and I hope you'll have fun playing it too! \r\n\r\nAll credit goes to Dj CUTMAN for the mashup: https://www.youtube.com/watch?v=Wan2REH1x9g",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:185,duration:176,songName:"POP/STARS vs MEGALOVANIA",songSubName:"Dj CUTMAN",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:9567,upvotes:4373,downvotes:101,score:.9394},uploaded:"2019-01-09T15:56:43Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5ede52db98f5cde3a4d54b4f96d7f9b6fe227fe7",key:"2c4f",state:"Published",createdAt:"2019-01-09T15:56:43Z",sageScore:5,diffs:[{njs:15,offset:0,notes:995,bombs:0,obstacles:27,nps:5.821,length:527,characteristic:"Standard",difficulty:"ExpertPlus",events:3164,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:170.919,paritySummary:{errors:43,warns:50,resets:0}}],downloadURL:"https://cdn.beatsaver.com/5ede52db98f5cde3a4d54b4f96d7f9b6fe227fe7.zip",coverURL:"https://cdn.beatsaver.com/5ede52db98f5cde3a4d54b4f96d7f9b6fe227fe7.jpg",previewURL:"https://cdn.beatsaver.com/5ede52db98f5cde3a4d54b4f96d7f9b6fe227fe7.mp3"}],createdAt:"2019-01-09T15:56:43Z",updatedAt:"2019-01-09T15:56:43Z",lastPublishedAt:"2019-01-09T15:56:43Z"},{id:"3694",name:"Centipede",description:"A full remake of the original Centipede map!\r\n\r\nEnjoy at your hearts content!\r\n\r\np.s i lied about the hiatus",uploader:{id:4289111,name:"blackblazon",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ef34",avatar:"https://cdn.beatsaver.com/avatar/127162370538733568.png",type:"DISCORD"},metadata:{bpm:140,duration:249,songName:"Centipede",songSubName:"Knife Party",songAuthorName:"BlackBlazon & EpicEwok",levelAuthorName:"blackblazon"},stats:{plays:0,downloads:8169,upvotes:4979,downvotes:125,score:.9391},uploaded:"2019-02-16T00:35:23Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e59f717e08b56c8693b14f42a94832cacd4bbca4",key:"3694",state:"Published",createdAt:"2019-02-16T00:35:23Z",sageScore:5,diffs:[{njs:14,offset:0,notes:1004,bombs:56,obstacles:25,nps:4.371,length:536,characteristic:"Standard",difficulty:"Expert",events:11574,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:229.714,paritySummary:{errors:22,warns:22,resets:0}},{njs:18,offset:0,notes:1004,bombs:56,obstacles:25,nps:4.371,length:536,characteristic:"Standard",difficulty:"ExpertPlus",events:11574,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:229.714,paritySummary:{errors:22,warns:22,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e59f717e08b56c8693b14f42a94832cacd4bbca4.zip",coverURL:"https://cdn.beatsaver.com/e59f717e08b56c8693b14f42a94832cacd4bbca4.jpg",previewURL:"https://cdn.beatsaver.com/e59f717e08b56c8693b14f42a94832cacd4bbca4.mp3"}],createdAt:"2019-02-16T00:35:23Z",updatedAt:"2019-02-16T00:35:23Z",lastPublishedAt:"2019-02-16T00:35:23Z"},{id:"1716",name:"Empty Threat - CHVRCHES",description:"Difficulties: Expert+, Expert, Hard, Normal\r\nYouTube Preview: https://youtu.be/5fp_4qs7RvA",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:132,duration:246,songName:"Empty Threat",songSubName:"CHVRCHES",songAuthorName:"Benny",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:7003,upvotes:3875,downvotes:85,score:.939},uploaded:"2018-09-25T02:11:16Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f08cad7d3b663caa6f8c23aa04664273f532f74a",key:"1716",state:"Published",createdAt:"2018-09-25T02:11:16Z",sageScore:4,diffs:[{njs:10,offset:0,notes:405,bombs:0,obstacles:16,nps:1.697,length:527,characteristic:"Standard",difficulty:"Normal",events:1241,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:239.545,paritySummary:{errors:55,warns:38,resets:0}},{njs:10,offset:0,notes:621,bombs:0,obstacles:24,nps:2.6,length:527.5,characteristic:"Standard",difficulty:"Hard",events:1241,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:239.773,paritySummary:{errors:70,warns:69,resets:0}},{njs:10,offset:0,notes:930,bombs:0,obstacles:24,nps:3.893,length:527.5,characteristic:"Standard",difficulty:"Expert",events:1241,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:239.773,paritySummary:{errors:97,warns:109,resets:0}},{njs:11,offset:0,notes:1255,bombs:0,obstacles:22,nps:5.251,length:527.75,characteristic:"Standard",difficulty:"ExpertPlus",events:1241,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:239.886,paritySummary:{errors:116,warns:208,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f08cad7d3b663caa6f8c23aa04664273f532f74a.zip",coverURL:"https://cdn.beatsaver.com/f08cad7d3b663caa6f8c23aa04664273f532f74a.jpg",previewURL:"https://cdn.beatsaver.com/f08cad7d3b663caa6f8c23aa04664273f532f74a.mp3"}],createdAt:"2018-09-25T02:11:16Z",updatedAt:"2018-09-25T02:11:16Z",lastPublishedAt:"2018-09-25T02:11:16Z"},{id:"9d7",name:"Back in Black - AC/DC",description:"CAUSE I'M BACK IN BLAAAAAAACK! All difficulties, full lights.\r\n\r\nWas charted form start to finish on my twitch, come watch me stream other chart creations!!!! https://www.twitch.tv/freeek\r\n\r\nExpert FC Video: https://www.youtube.com/watch?v=ZxLxbSfSEPA",uploader:{id:47581,name:"freeek",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8ad",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8ad?d=retro",type:"SIMPLE"},metadata:{bpm:95,duration:241,songName:"Back in Black",songSubName:"AC/DC",songAuthorName:"Freeek",levelAuthorName:"freeek"},stats:{plays:0,downloads:20588,upvotes:8804,downvotes:280,score:.939},uploaded:"2018-07-16T11:58:36Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"8af82a87167070a08ec63dba0459c829c2954067",key:"9d7",state:"Published",createdAt:"2018-07-16T11:58:36Z",sageScore:5,diffs:[{njs:10,offset:0,notes:450,bombs:0,obstacles:31,nps:1.947,length:366,characteristic:"Standard",difficulty:"Easy",events:1258,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.158,paritySummary:{errors:19,warns:2,resets:0},stars:.51},{njs:10,offset:0,notes:563,bombs:0,obstacles:47,nps:2.436,length:366,characteristic:"Standard",difficulty:"Normal",events:1258,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.158,paritySummary:{errors:87,warns:21,resets:0},stars:1.12},{njs:10,offset:0,notes:683,bombs:0,obstacles:47,nps:2.955,length:366,characteristic:"Standard",difficulty:"Hard",events:1258,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.158,paritySummary:{errors:81,warns:89,resets:0},stars:1.73},{njs:10,offset:0,notes:824,bombs:0,obstacles:47,nps:3.565,length:366,characteristic:"Standard",difficulty:"Expert",events:1258,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.158,paritySummary:{errors:79,warns:95,resets:0}}],downloadURL:"https://cdn.beatsaver.com/8af82a87167070a08ec63dba0459c829c2954067.zip",coverURL:"https://cdn.beatsaver.com/8af82a87167070a08ec63dba0459c829c2954067.jpg",previewURL:"https://cdn.beatsaver.com/8af82a87167070a08ec63dba0459c829c2954067.mp3"}],createdAt:"2018-07-16T11:58:36Z",updatedAt:"2018-07-16T11:58:36Z",lastPublishedAt:"2018-07-16T11:58:36Z"},{id:"198f3",name:"Spider Dance - Toby Fox (Undertale modchart)",description:"There are countless Undertale maps on Beat Saber, but what if you could actually experience a real boss fight? It's now possible thanks to Noodle Extensions, and I'm proud to present to you the first Undertale modchart: Spider Dance, where you will confront Muffet.\r\n\r\nTips for a better experience:\r\n- Don't use static lights; there shouldn't be any lights\r\n- Hide the HUD in player settings\r\n- Enable \"bloom post-processing\"\r\n- Enable \"screen distortion effects\"\r\n\r\nInstallation instructions:\r\n- You will need Noodle Extensions and Chroma and their dependencies. All are now available on ModAssistant.\r\n- If you read this in a future where the update broke the mods and they haven't been approved on ModAssistant yet, install the basic mods from ModAssistant and get the latest releases of Noodle Extensions, Heck, and Chroma from Aeroluna's GitHub: https://github.com/Aeroluna\r\n\r\nVideo: https://youtu.be/fy8KmUor6fI\r\n\r\nI started this a while ago before Ghost Choir and then abandoned the project. But I finally decided to finish the work, so I hope you'll enjoy it :)\r\nThanks to Reaxt and Cyansnow, who testplayed and made detailed suggestions that helped me improve the quality of this map. I really appreciate it.\r\n\r\nMy social media links (please follow/subscribe): https://linktr.ee/nyri0",uploader:{id:4288814,name:"nyri0",uniqueSet:!0,hash:"5e792df416c9680006086a78",avatar:"https://cdn.beatsaver.com/avatar/396715033125584907.png",type:"DISCORD"},metadata:{bpm:115,duration:114,songName:"Spider Dance",songSubName:"",songAuthorName:"Toby Fox",levelAuthorName:"nyri0"},stats:{plays:0,downloads:15821,upvotes:1257,downvotes:4,score:.9389},uploaded:"2021-06-25T17:47:40.296Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"09246637fa63ac55aa518718fd1eb4b876960480",key:"198f3",state:"Published",createdAt:"2021-06-25T17:47:40.296Z",sageScore:2,diffs:[{njs:16,offset:0,notes:434,bombs:88,obstacles:1153,nps:4.377,length:190.063,characteristic:"Standard",difficulty:"ExpertPlus",events:5,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:99.163,paritySummary:{errors:13,warns:13,resets:0}}],downloadURL:"https://cdn.beatsaver.com/09246637fa63ac55aa518718fd1eb4b876960480.zip",coverURL:"https://cdn.beatsaver.com/09246637fa63ac55aa518718fd1eb4b876960480.jpg",previewURL:"https://cdn.beatsaver.com/09246637fa63ac55aa518718fd1eb4b876960480.mp3"}],createdAt:"2021-06-25T17:47:40.296Z",updatedAt:"2021-06-25T17:47:40.296Z",lastPublishedAt:"2021-06-25T17:47:40.296Z"},{id:"860",name:"Wake Me Up When September Ends - Green Day",description:"Expert - Hard - Normal Charts\nCustom Lighting\nhttps://www.youtube.com/watch?v=QPiD-n4W6s0\n\nhttps://twitter.com/TheDownyCat\nhttps://www.twitch.tv/downycat\nhttps://streamlabs.com/downycat/tip",uploader:{id:4285982,name:"downycat",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ede5",avatar:"https://cdn.beatsaver.com/avatar/173538829888782336.png",type:"DISCORD"},metadata:{bpm:105,duration:271,songName:"Wake Me Up When September Ends",songSubName:"Green Day",songAuthorName:"DownyCat",levelAuthorName:"downycat"},stats:{plays:0,downloads:11787,upvotes:3264,downvotes:64,score:.9389},uploaded:"2018-07-07T14:38:17Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"d0457c1dee4a78f5496c3b282f8b834ec45f75a8",key:"860",state:"Published",createdAt:"2018-07-07T14:38:17Z",sageScore:5,diffs:[{njs:10,offset:0,notes:461,bombs:34,obstacles:97,nps:1.801,length:448,characteristic:"Standard",difficulty:"Normal",events:1579,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:256,paritySummary:{errors:59,warns:13,resets:2},stars:.95},{njs:10,offset:0,notes:862,bombs:0,obstacles:85,nps:3.367,length:448,characteristic:"Standard",difficulty:"Hard",events:1579,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:256,paritySummary:{errors:52,warns:1,resets:0}},{njs:10,offset:0,notes:1179,bombs:0,obstacles:86,nps:4.605,length:448,characteristic:"Standard",difficulty:"Expert",events:1579,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:256,paritySummary:{errors:19,warns:20,resets:0}}],downloadURL:"https://cdn.beatsaver.com/d0457c1dee4a78f5496c3b282f8b834ec45f75a8.zip",coverURL:"https://cdn.beatsaver.com/d0457c1dee4a78f5496c3b282f8b834ec45f75a8.jpg",previewURL:"https://cdn.beatsaver.com/d0457c1dee4a78f5496c3b282f8b834ec45f75a8.mp3"}],createdAt:"2018-07-07T14:38:17Z",updatedAt:"2018-07-07T14:38:17Z",lastPublishedAt:"2018-07-07T14:38:17Z"},{id:"3fc",name:"The White Stripes - Seven Nation Army",description:"UPDATED! @BlueASIS#4095 on Discord let me know what you think",uploader:{id:52648,name:"blueasis",uniqueSet:!1,hash:"5cff0b7298cc5a672c84eb5d",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84eb5d?d=retro",type:"SIMPLE"},metadata:{bpm:124,duration:232,songName:"Seven Nation Army",songSubName:"The White Stripes",songAuthorName:"BlueASIS",levelAuthorName:"blueasis"},stats:{plays:0,downloads:20649,upvotes:14458,downvotes:530,score:.9389},uploaded:"2018-06-06T18:51:03Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0b0ad0f34b2d0687a9794bcf5019100fda06971e",key:"3fc",state:"Published",createdAt:"2018-06-06T18:51:03Z",sageScore:4,diffs:[{njs:10,offset:0,notes:399,bombs:0,obstacles:0,nps:1.817,length:453.875,characteristic:"Standard",difficulty:"Normal",events:812,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.617,paritySummary:{errors:90,warns:6,resets:0}},{njs:10,offset:0,notes:496,bombs:0,obstacles:0,nps:2.258,length:453.875,characteristic:"Standard",difficulty:"Hard",events:812,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.617,paritySummary:{errors:113,warns:12,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0b0ad0f34b2d0687a9794bcf5019100fda06971e.zip",coverURL:"https://cdn.beatsaver.com/0b0ad0f34b2d0687a9794bcf5019100fda06971e.jpg",previewURL:"https://cdn.beatsaver.com/0b0ad0f34b2d0687a9794bcf5019100fda06971e.mp3"}],createdAt:"2018-06-06T18:51:03Z",updatedAt:"2018-06-06T18:51:03Z",lastPublishedAt:"2018-06-06T18:51:03Z"},{id:"5925",name:'Hardware Store - "Weird Al" Yankovic',description:'Hardware Store is a song by "Weird Al" Yankovic. "Hardware Store", which, as the title suggests, is about a new neighborhood hardware store and the things that can be purchased therein. The song was originally supposed to be a style parody of another (unspecified) artist, but it eventually evolved into its own, original composition.\n\nThere\'s a rapid-fire list of 61 products that he sings at the bridge of the song so prepare for that :P',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:126.14,duration:226,songName:"Hardware Store",songSubName:"",songAuthorName:'"Weird Al" Yankovic',levelAuthorName:"Joetastic"},stats:{plays:0,downloads:3028,upvotes:1490,downvotes:10,score:.9388},uploaded:"2019-07-27T16:27:18.223Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"2c677458db9ca04a7d0b64f47b443661d0e487d8",key:"5925",state:"Published",createdAt:"2019-07-27T16:27:18.223Z",sageScore:6,diffs:[{njs:15,offset:0,notes:1223,bombs:0,obstacles:24,nps:5.529,length:465.063,characteristic:"Standard",difficulty:"ExpertPlus",events:1571,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.213,paritySummary:{errors:45,warns:36,resets:0}}],downloadURL:"https://cdn.beatsaver.com/2c677458db9ca04a7d0b64f47b443661d0e487d8.zip",coverURL:"https://cdn.beatsaver.com/2c677458db9ca04a7d0b64f47b443661d0e487d8.jpg",previewURL:"https://cdn.beatsaver.com/2c677458db9ca04a7d0b64f47b443661d0e487d8.mp3"}],createdAt:"2019-07-27T16:27:18.223Z",updatedAt:"2019-07-27T16:27:18.223Z",lastPublishedAt:"2019-07-27T16:27:18.223Z"},{id:"3e4",name:"I'll Make A Man Out Of You - Mulan",description:"Expert+/Expert/Hard/Normal all with Lighting Events\r\n114 BMP\r\nSee reddit for video of Expert+ (https://www.reddit.com/r/beatsaber/comments/8owz4t/ill_make_a_man_out_of_you_mulan_expert_video/?ref=share&ref_source=link)",uploader:{id:52670,name:"glacialdrift",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f176",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f176?d=retro",type:"SIMPLE"},metadata:{bpm:114,duration:202,songName:"I'll Make A Man Out Of You",songSubName:"Mulan",songAuthorName:"Glacial Drift",levelAuthorName:"glacialdrift"},stats:{plays:0,downloads:7958,upvotes:4393,downvotes:106,score:.9386},uploaded:"2018-06-06T01:30:06Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d8088b0ab3d9e5b3e62a2daf7cdc8204e0c67256",key:"3e4",state:"Published",createdAt:"2018-06-06T01:30:06Z",sageScore:3,diffs:[{njs:10,offset:0,notes:285,bombs:0,obstacles:2,nps:1.47,length:368.9,characteristic:"Standard",difficulty:"Normal",events:898,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.158,paritySummary:{errors:109,warns:26,resets:0}},{njs:10,offset:0,notes:449,bombs:0,obstacles:2,nps:2.317,length:368.9,characteristic:"Standard",difficulty:"Hard",events:898,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.158,paritySummary:{errors:99,warns:49,resets:0}},{njs:10,offset:0,notes:607,bombs:0,obstacles:2,nps:3.132,length:368.9,characteristic:"Standard",difficulty:"Expert",events:1025,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.158,paritySummary:{errors:91,warns:74,resets:0}},{njs:10,offset:0,notes:712,bombs:0,obstacles:2,nps:3.674,length:368.9,characteristic:"Standard",difficulty:"ExpertPlus",events:1025,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.158,paritySummary:{errors:87,warns:86,resets:0}}],downloadURL:"https://cdn.beatsaver.com/d8088b0ab3d9e5b3e62a2daf7cdc8204e0c67256.zip",coverURL:"https://cdn.beatsaver.com/d8088b0ab3d9e5b3e62a2daf7cdc8204e0c67256.jpg",previewURL:"https://cdn.beatsaver.com/d8088b0ab3d9e5b3e62a2daf7cdc8204e0c67256.mp3"}],createdAt:"2018-06-06T01:30:06Z",updatedAt:"2018-06-06T01:30:06Z",lastPublishedAt:"2018-06-06T01:30:06Z"},{id:"11cf8",name:"Up & Down",description:"I had fun. Liked the song.\nThis map uses Noodle Extensions by the way.\nAlso, please disable any custom note models you might have, and don’t use the BTS environment.\n\nMap video: https://youtu.be/vueyLFN6Azg\n\n-= NOT MY AUDIO =-\n\nOriginal: https://youtu.be/oJa7Kr7_9dw\n\nNotes: 522\nNPS: 3.18\nNJS: 17\nBPM: 138\nBombs: 0\nWalls: 8\nLights: 2,790\nErrors: 5\n\nThanks to:\n@JohnnyDee\n@DefDoof\nfor testing!\n\nThis map does not work for the Quest/Quest 2",uploader:{id:4284638,name:"thegoodboi",uniqueSet:!0,hash:"5cff0b7698cc5a672c85433c",avatar:"https://cdn.beatsaver.com/avatar/515025828736794654.png",type:"DISCORD"},metadata:{bpm:138,duration:164,songName:"Up & Down",songSubName:"",songAuthorName:"Marnik",levelAuthorName:"The Good Boi"},stats:{plays:0,downloads:12995,upvotes:5828,downvotes:162,score:.9385},uploaded:"2020-12-20T21:25:04.106Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"2aa85aad10e124eb674d18d49251bc94ee1a4283",key:"11cf8",state:"Published",createdAt:"2020-12-20T21:25:04.106Z",sageScore:7,diffs:[{njs:17,offset:0,notes:535,bombs:0,obstacles:8,nps:3.418,length:360,characteristic:"Standard",difficulty:"ExpertPlus",events:2790,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:156.522,paritySummary:{errors:27,warns:14,resets:0}},{njs:17,offset:0,notes:535,bombs:0,obstacles:8,nps:3.418,length:360,characteristic:"Lawless",difficulty:"ExpertPlus",events:2790,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:156.522,paritySummary:{errors:26,warns:13,resets:0}}],downloadURL:"https://cdn.beatsaver.com/2aa85aad10e124eb674d18d49251bc94ee1a4283.zip",coverURL:"https://cdn.beatsaver.com/2aa85aad10e124eb674d18d49251bc94ee1a4283.jpg",previewURL:"https://cdn.beatsaver.com/2aa85aad10e124eb674d18d49251bc94ee1a4283.mp3"}],createdAt:"2020-12-20T21:25:04.106Z",updatedAt:"2020-12-20T21:25:04.106Z",lastPublishedAt:"2020-12-20T21:25:04.106Z"},{id:"47f3",name:"TWICE - FANCY",description:"Aggrogahu: Lights, Hard, and Normal.\r\n Here are his awesome maps that you should download: https://beatsaver.com/browse/byuser/5760\r\n\r\nKikae: Expert/Expert+",uploader:{id:4285107,name:"kikaeaeon",uniqueSet:!0,hash:"5cff0b7498cc5a672c85109b",avatar:"https://cdn.beatsaver.com/avatar/103715469822816256.png",type:"DISCORD"},metadata:{bpm:132,duration:218,songName:"FANCY",songSubName:"TWICE",songAuthorName:"KikaeAeon & Aggrogahu",levelAuthorName:"kikaeaeon"},stats:{plays:0,downloads:11038,upvotes:2829,downvotes:52,score:.9381},uploaded:"2019-04-23T09:46:04Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c63d899018f131d3aed03816c5074350aaa700a7",key:"47f3",state:"Published",createdAt:"2019-04-23T09:46:04Z",sageScore:4,diffs:[{njs:9,offset:0,notes:380,bombs:12,obstacles:12,nps:1.802,length:464,characteristic:"Standard",difficulty:"Normal",events:1003,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:210.909,paritySummary:{errors:41,warns:61,resets:18}},{njs:10,offset:0,notes:587,bombs:6,obstacles:14,nps:2.777,length:465,characteristic:"Standard",difficulty:"Hard",events:972,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:211.364,paritySummary:{errors:54,warns:54,resets:3}},{njs:12,offset:0,notes:817,bombs:0,obstacles:5,nps:3.865,length:465,characteristic:"Standard",difficulty:"Expert",events:1001,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:211.364,paritySummary:{errors:11,warns:1,resets:0}},{njs:15,offset:0,notes:1048,bombs:0,obstacles:5,nps:4.958,length:465,characteristic:"Standard",difficulty:"ExpertPlus",events:1003,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:211.364,paritySummary:{errors:12,warns:14,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c63d899018f131d3aed03816c5074350aaa700a7.zip",coverURL:"https://cdn.beatsaver.com/c63d899018f131d3aed03816c5074350aaa700a7.jpg",previewURL:"https://cdn.beatsaver.com/c63d899018f131d3aed03816c5074350aaa700a7.mp3"}],createdAt:"2019-04-23T09:46:04Z",updatedAt:"2019-04-23T09:46:04Z",lastPublishedAt:"2019-04-23T09:46:04Z"},{id:"1421c",name:"Look At The Sky - Porter Robinson",description:"MAKE SURE TO HAVE BLOOM POST PROCESS ON AND SCREEN DISTORTION EFFECTS ON!!!!\n\n\nThis was super fun to work on! And its finally out! Please enjoy!\nPlease make sure to have noodle extensions and chroma,\nSpecial thanks to MakeUMove, and Dack!\n\nIf you cant play it, heres the video! https://youtu.be/VWSubdP0WcQ",uploader:{id:4235136,name:"reaxt",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8ab",avatar:"https://cdn.beatsaver.com/avatar/163052863038291970.png",type:"DISCORD"},metadata:{bpm:115,duration:164,songName:"look at the sky",songSubName:"",songAuthorName:"porter robinson",levelAuthorName:"Reaxt & CyanSnow"},stats:{plays:0,downloads:5472,upvotes:1623,downvotes:15,score:.938},uploaded:"2021-02-16T19:10:35.911Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"825dbd980eadceaba54c8e9d8e68f93a1b4cb029",key:"1421c",state:"Published",createdAt:"2021-02-16T19:10:35.911Z",sageScore:2,diffs:[{njs:14,offset:0,notes:505,bombs:0,obstacles:5343,nps:3.552,length:272.5,characteristic:"Lawless",difficulty:"ExpertPlus",events:1247,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:142.174,paritySummary:{errors:2,warns:1,resets:0}}],downloadURL:"https://cdn.beatsaver.com/825dbd980eadceaba54c8e9d8e68f93a1b4cb029.zip",coverURL:"https://cdn.beatsaver.com/825dbd980eadceaba54c8e9d8e68f93a1b4cb029.jpg",previewURL:"https://cdn.beatsaver.com/825dbd980eadceaba54c8e9d8e68f93a1b4cb029.mp3"}],createdAt:"2021-02-16T19:10:35.911Z",updatedAt:"2021-02-16T19:10:35.911Z",lastPublishedAt:"2021-02-16T19:10:35.911Z"},{id:"2da4",name:"Ghosts n Stuff (feat. Rob Swire) - deadmau5",description:"128 BPM / 3:17 Runtime\r\nEasy / 208 Notes\r\nNormal / 345 Notes\r\nHard / 458 Notes\r\nExpert / 595 Notes\r\n\r\nThis one comes with custom colors similar to the KDA Popstars OST track.\r\n\r\nGameplay:\r\nhttps://youtu.be/vxqyTGuO910",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:128,duration:197,songName:"Ghosts n Stuff (feat. Rob Swire)",songSubName:"deadmau5",songAuthorName:"Skyler Wallace",levelAuthorName:"skylerwallace"},stats:{plays:0,downloads:13432,upvotes:6655,downvotes:199,score:.938},uploaded:"2019-01-14T13:48:11Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"712ee0801ae2e65e4cd7ea5377bcf272981b57c6",key:"2da4",state:"Published",createdAt:"2019-01-14T13:48:11Z",sageScore:6,diffs:[{njs:10,offset:1,notes:208,bombs:0,obstacles:16,nps:1.072,length:414,characteristic:"Standard",difficulty:"Easy",events:1827,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.063,paritySummary:{errors:46,warns:21,resets:0}},{njs:10,offset:1,notes:345,bombs:0,obstacles:19,nps:1.773,length:415,characteristic:"Standard",difficulty:"Normal",events:1827,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.531,paritySummary:{errors:37,warns:12,resets:0}},{njs:12,offset:1,notes:458,bombs:0,obstacles:15,nps:2.352,length:415.5,characteristic:"Standard",difficulty:"Hard",events:1827,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.766,paritySummary:{errors:32,warns:19,resets:0}},{njs:14,offset:0,notes:595,bombs:22,obstacles:29,nps:3.055,length:415.5,characteristic:"Standard",difficulty:"Expert",events:1827,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.766,paritySummary:{errors:41,warns:34,resets:1}}],downloadURL:"https://cdn.beatsaver.com/712ee0801ae2e65e4cd7ea5377bcf272981b57c6.zip",coverURL:"https://cdn.beatsaver.com/712ee0801ae2e65e4cd7ea5377bcf272981b57c6.jpg",previewURL:"https://cdn.beatsaver.com/712ee0801ae2e65e4cd7ea5377bcf272981b57c6.mp3"}],createdAt:"2019-01-14T13:48:11Z",updatedAt:"2019-01-14T13:48:11Z",lastPublishedAt:"2019-01-14T13:48:11Z"},{id:"49fc",name:"You Give Love A Bad Name - Bon Jovi",description:"Another classic from Bon Jovi :D This one has more beats than it’s my life so it's slightly harder too. Thus the expert difficulty, but it's still on the easy side of expert. Also Gotta love 80s songs lol, no computer mastering means BPM was inconsistent and there are over 20 bpm changes lol",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:123,duration:220,songName:"You Give Love A Bad Name",songSubName:"Bon Jovi",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:8360,upvotes:2027,downvotes:27,score:.9379},uploaded:"2019-05-02T18:03:13Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9465922b3962dca2b4c6d3b312fe61bec255c1e4",key:"49fc",state:"Published",createdAt:"2019-05-02T18:03:13Z",sageScore:6,diffs:[{njs:13,offset:0,notes:731,bombs:2,obstacles:3,nps:3.551,length:422,characteristic:"Standard",difficulty:"Expert",events:2246,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.854,paritySummary:{errors:28,warns:38,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9465922b3962dca2b4c6d3b312fe61bec255c1e4.zip",coverURL:"https://cdn.beatsaver.com/9465922b3962dca2b4c6d3b312fe61bec255c1e4.jpg",previewURL:"https://cdn.beatsaver.com/9465922b3962dca2b4c6d3b312fe61bec255c1e4.mp3"}],createdAt:"2019-05-02T18:03:13Z",updatedAt:"2019-05-02T18:03:13Z",lastPublishedAt:"2019-05-02T18:03:13Z"},{id:"b514",name:"[[Wall Show + Chroma]] GAS GAS GAS | Manuel",description:"This wall map is a bit more intense than my others, you will need a very hefty pc to run and record this. Have Fun!\n\nHere's a playthrough: https://www.youtube.com/watch?v=hlS6r-Usnro\nHere's a playthrough by Nico (HQ Version): https://youtu.be/F_3qRxDdQc0\n\nREQUIREMENTS: \n -Noodle Extensions\n -Chroma/ChromaLite\n(fixed formatting + removed stupid metadata ;)",uploader:{id:73008,name:"thelightdesigner",uniqueSet:!0,hash:"5cff0b7798cc5a672c85627a",avatar:"https://cdn.beatsaver.com/avatar/480555157952659489.png",type:"DISCORD"},metadata:{bpm:154,duration:108,songName:"GAS GAS GAS",songSubName:"(Short Ver.)",songAuthorName:"Manuel",levelAuthorName:"KyleT"},stats:{plays:0,downloads:9291,upvotes:2453,downvotes:41,score:.9377},uploaded:"2020-06-22T20:02:06.271Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"95e11f39b2898a38e3b5e61d2156ef5f5835f40f",key:"b514",state:"Published",createdAt:"2020-06-22T20:02:06.271Z",sageScore:3,diffs:[{njs:16.5,offset:0,notes:390,bombs:13,obstacles:13898,nps:3.832,length:261.25,characteristic:"Standard",difficulty:"Expert",events:1462,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:101.786,paritySummary:{errors:0,warns:0,resets:2}}],downloadURL:"https://cdn.beatsaver.com/95e11f39b2898a38e3b5e61d2156ef5f5835f40f.zip",coverURL:"https://cdn.beatsaver.com/95e11f39b2898a38e3b5e61d2156ef5f5835f40f.jpg",previewURL:"https://cdn.beatsaver.com/95e11f39b2898a38e3b5e61d2156ef5f5835f40f.mp3"}],createdAt:"2020-06-22T20:02:06.271Z",updatedAt:"2020-06-22T20:02:06.271Z",lastPublishedAt:"2020-06-22T20:02:06.271Z"},{id:"774e",name:"Sad Machine - Porter Robinson",description:"77",uploader:{id:4285521,name:"ejiejidayo",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fc58",avatar:"https://cdn.beatsaver.com/avatar/224894241279574016.png",type:"DISCORD"},metadata:{bpm:89,duration:257,songName:"Sad Machine",songSubName:"",songAuthorName:"Porter Robinson",levelAuthorName:"ejiejidayo"},stats:{plays:0,downloads:7096,upvotes:2724,downvotes:50,score:.9377},uploaded:"2019-12-18T21:56:31.549Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7f6ab5de98ac1970e734ea6e26a539fa11cc4f66",key:"774e",state:"Published",createdAt:"2019-12-18T21:56:31.549Z",sageScore:4,diffs:[{njs:10,offset:-.4,notes:647,bombs:0,obstacles:237,nps:2.583,length:369.5,characteristic:"Standard",difficulty:"Hard",events:1973,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:249.101,paritySummary:{errors:1,warns:2,resets:0}},{njs:12,offset:-.6,notes:1025,bombs:0,obstacles:237,nps:4.092,length:369.5,characteristic:"Standard",difficulty:"Expert",events:1973,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:249.101,paritySummary:{errors:22,warns:20,resets:0}}],downloadURL:"https://cdn.beatsaver.com/7f6ab5de98ac1970e734ea6e26a539fa11cc4f66.zip",coverURL:"https://cdn.beatsaver.com/7f6ab5de98ac1970e734ea6e26a539fa11cc4f66.jpg",previewURL:"https://cdn.beatsaver.com/7f6ab5de98ac1970e734ea6e26a539fa11cc4f66.mp3"}],createdAt:"2019-12-18T21:56:31.549Z",updatedAt:"2019-12-18T21:56:31.549Z",lastPublishedAt:"2019-12-18T21:56:31.549Z"},{id:"1fe5",name:"I Just Can't Wait To Be King - Lion King OST - 100k Contest",description:'Unleash your inner beast with the song "I Just Can\'t Wait to be King" from the official Lion King Soundtrack! This map has difficulties from Easy to Expert, for everyone to enjoy! \r\nThis is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes. Go to https://bsaber.com/100k-contest/ to register!\r\n\r\nPreview: https://youtu.be/YDAkqZR9Hs0',uploader:{id:47059,name:"rocket",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f1c0",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f1c0?d=retro",type:"SIMPLE"},metadata:{bpm:99,duration:168,songName:"I Just Can't Wait To Be King",songSubName:"Rowan Atkinson, Jason Weaver, Laura Williams",songAuthorName:"Rocket",levelAuthorName:"rocket"},stats:{plays:0,downloads:11682,upvotes:3499,downvotes:77,score:.9377},uploaded:"2018-11-12T16:50:07Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1a3237630cd17aaa2af3f728621dcfdcce38edf1",key:"1fe5",state:"Published",createdAt:"2018-11-12T16:50:07Z",sageScore:5,diffs:[{njs:11,offset:0,notes:144,bombs:0,obstacles:16,nps:.91,length:261,characteristic:"Standard",difficulty:"Easy",events:466,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:158.182,paritySummary:{errors:44,warns:9,resets:0}},{njs:11,offset:0,notes:309,bombs:0,obstacles:16,nps:1.953,length:261,characteristic:"Standard",difficulty:"Normal",events:466,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:158.182,paritySummary:{errors:33,warns:18,resets:0}},{njs:11,offset:0,notes:452,bombs:0,obstacles:20,nps:2.857,length:261,characteristic:"Standard",difficulty:"Hard",events:466,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:158.182,paritySummary:{errors:46,warns:56,resets:0}},{njs:11,offset:0,notes:512,bombs:0,obstacles:20,nps:3.237,length:261,characteristic:"Standard",difficulty:"Expert",events:466,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:158.182,paritySummary:{errors:52,warns:70,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1a3237630cd17aaa2af3f728621dcfdcce38edf1.zip",coverURL:"https://cdn.beatsaver.com/1a3237630cd17aaa2af3f728621dcfdcce38edf1.jpg",previewURL:"https://cdn.beatsaver.com/1a3237630cd17aaa2af3f728621dcfdcce38edf1.mp3"}],createdAt:"2018-11-12T16:50:07Z",updatedAt:"2018-11-12T16:50:07Z",lastPublishedAt:"2018-11-12T16:50:07Z"},{id:"ae0e",name:"Alan Walker - Spectre",description:'"Spectre", Alan Walker\'s second most popular NoCopyrightSounds track.\r\nThis is a remap of my very first map. Since a lot of people still like this track and want a proper map of it in Beat Saber, I decided to remap this track following the latest mapping standards. \r\n\r\nEasy : NPS 1.23 | NJS 10\r\nNormal : NPS 2.00 | NJS 10\r\nHard : NPS 3.28 | NJS 13\r\nExpert : NPS 4.44 | NJS 16\r\nExpert+ : NPS 5.41 | NJS 19\r\n\r\nShowcase:\r\nhttps://www.youtube.com/watch?v=Xq7_-0HPThA\r\n\r\nShout out to the following play-testers who play-tested my map:\r\n*lapras\r\n*officialMECH\r\n*Escapee\r\n\r\nFeel free to make your own map for this track.\r\n\r\nOriginal map: https://beatsaver.com/beatmap/155a\r\n\r\nIf you enjoy my work and wish to donate, the option is here :)\r\nPaypal: https://www.paypal.me/WeldonWen',uploader:{id:4286890,name:"weldonwen",uniqueSet:!0,hash:"5cff0b7498cc5a672c850433",avatar:"https://cdn.beatsaver.com/avatar/571472512924254229.png",type:"DISCORD"},metadata:{bpm:128,duration:231,songName:"Spectre ",songSubName:"",songAuthorName:"Alan Walker",levelAuthorName:"WeldonWen"},stats:{plays:0,downloads:11498,upvotes:2715,downvotes:50,score:.9376},uploaded:"2020-06-03T23:05:28.787Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"3c6f02ecbef50e2019d5938871a8f3fcdb7b07a2",key:"ae0e",state:"Published",createdAt:"2020-06-03T23:05:28.787Z",sageScore:7,diffs:[{njs:10,offset:1.04,notes:285,bombs:44,obstacles:40,nps:1.315,length:462.5,characteristic:"Standard",difficulty:"Easy",events:3884,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.797,paritySummary:{errors:81,warns:36,resets:0}},{njs:10,offset:.99,notes:464,bombs:51,obstacles:58,nps:2.136,length:463.5,characteristic:"Standard",difficulty:"Normal",events:3884,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.266,paritySummary:{errors:70,warns:10,resets:0}},{njs:13,offset:.259,notes:760,bombs:56,obstacles:42,nps:3.498,length:463.5,characteristic:"Standard",difficulty:"Hard",events:3883,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.266,paritySummary:{errors:2,warns:6,resets:0}},{njs:16,offset:-.2,notes:1029,bombs:45,obstacles:55,nps:4.736,length:463.5,characteristic:"Standard",difficulty:"Expert",events:3885,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.266,paritySummary:{errors:2,warns:0,resets:2}},{njs:19,offset:-.5,notes:1255,bombs:21,obstacles:46,nps:5.776,length:463.5,characteristic:"Standard",difficulty:"ExpertPlus",events:3963,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.266,paritySummary:{errors:1,warns:0,resets:1}}],downloadURL:"https://cdn.beatsaver.com/3c6f02ecbef50e2019d5938871a8f3fcdb7b07a2.zip",coverURL:"https://cdn.beatsaver.com/3c6f02ecbef50e2019d5938871a8f3fcdb7b07a2.jpg",previewURL:"https://cdn.beatsaver.com/3c6f02ecbef50e2019d5938871a8f3fcdb7b07a2.mp3"}],createdAt:"2020-06-03T23:05:28.787Z",updatedAt:"2020-06-03T23:05:28.787Z",lastPublishedAt:"2020-06-03T23:05:28.787Z"},{id:"7c05",name:"[Bloq Busters Vol. 2] The Sirens - Seven Lions & Jason Ross",description:"Part of Bloq Busters Vol 2 - Melodic Dubstep\r\n\r\nThis eerie but beautiful and powerful journey composed by Seven Lions and Jason Ross will take you on a trip!\r\n\r\nFeatures Chroma Lights and all difficulties from Normal to Expert++.",uploader:{id:4284569,name:"checkthepan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f3d5",avatar:"https://cdn.beatsaver.com/avatar/184355369189900290.png",type:"DISCORD"},metadata:{bpm:145,duration:237,songName:"The Sirens",songSubName:"",songAuthorName:"Seven Lions & Jason Ross",levelAuthorName:"Checkthepan"},stats:{plays:0,downloads:7774,upvotes:1475,downvotes:12,score:.9374},uploaded:"2020-01-03T22:46:03.484Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0dadd6ab18e3ca0011459f16366e41ecffa5029e",key:"7c05",state:"Published",createdAt:"2020-01-03T22:46:03.484Z",sageScore:6,diffs:[{njs:10,offset:0,notes:383,bombs:0,obstacles:256,nps:1.78,length:520,characteristic:"Standard",difficulty:"Easy",events:11028,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.172,paritySummary:{errors:73,warns:6,resets:0}},{njs:13,offset:0,notes:624,bombs:32,obstacles:253,nps:2.9,length:520,characteristic:"Standard",difficulty:"Normal",events:11028,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.172,paritySummary:{errors:1,warns:0,resets:0}},{njs:15,offset:0,notes:927,bombs:263,obstacles:259,nps:4.308,length:520,characteristic:"Standard",difficulty:"Hard",events:11028,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.172,paritySummary:{errors:3,warns:0,resets:7}},{njs:17,offset:0,notes:1072,bombs:47,obstacles:256,nps:4.982,length:520,characteristic:"Standard",difficulty:"Expert",events:11028,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.172,paritySummary:{errors:2,warns:0,resets:2}},{njs:19,offset:-.25,notes:1256,bombs:134,obstacles:257,nps:5.837,length:520,characteristic:"Standard",difficulty:"ExpertPlus",events:11097,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.172,paritySummary:{errors:2,warns:2,resets:4}},{njs:19,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:11097,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0dadd6ab18e3ca0011459f16366e41ecffa5029e.zip",coverURL:"https://cdn.beatsaver.com/0dadd6ab18e3ca0011459f16366e41ecffa5029e.jpg",previewURL:"https://cdn.beatsaver.com/0dadd6ab18e3ca0011459f16366e41ecffa5029e.mp3"}],createdAt:"2020-01-03T22:46:03.484Z",updatedAt:"2020-01-03T22:46:03.484Z",lastPublishedAt:"2020-01-03T22:46:03.484Z"},{id:"7b68",name:"First of the Year (Equinox) - Skrillex",description:"First of the Year (Equinox) - Skrillex\n\nThis is my first map of 2020, and a huge throwback to when I first started listening to Skrillex. As well as it being a collaboration between myself, Checkthepan, Haclyon12, and CyanSnow.\n\nThanks to Checkthepan for making the 360 & 90-degree levels, Halcyon12 for the awesome chroma lights and CyanSnow for getting the files release ready. \n\nalso was originally trying to be the first map uploaded for 2020 but beatsaver had a stroke and now it's like the 5th or something\n",uploader:{id:4284904,name:"xscaramouche",uniqueSet:!0,hash:"5cff0b7798cc5a672c8558ed",avatar:"https://cdn.beatsaver.com/avatar/227538798387527680.png",type:"DISCORD"},metadata:{bpm:145,duration:257,songName:"First of the Year",songSubName:"(Equinox)",songAuthorName:"Skrillex",levelAuthorName:"xScaramouche & Checkthepan & Halcyon12"},stats:{plays:0,downloads:18265,upvotes:4286,downvotes:108,score:.9374},uploaded:"2020-01-01T04:28:55.040Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"2feafef61cad57ea2d6608eb54c39f139abb48c1",key:"7b68",state:"Published",createdAt:"2020-01-01T04:28:55.040Z",sageScore:7,diffs:[{njs:12,offset:1,notes:387,bombs:0,obstacles:183,nps:1.538,length:608,characteristic:"Standard",difficulty:"Easy",events:27335,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:251.586,paritySummary:{errors:183,warns:0,resets:0}},{njs:12,offset:1,notes:476,bombs:0,obstacles:182,nps:1.892,length:607.998,characteristic:"Standard",difficulty:"Normal",events:27335,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:251.585,paritySummary:{errors:124,warns:0,resets:0}},{njs:14,offset:.5,notes:658,bombs:9,obstacles:192,nps:2.615,length:608,characteristic:"Standard",difficulty:"Hard",events:27335,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:251.586,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:1017,bombs:9,obstacles:180,nps:4.042,length:608,characteristic:"Standard",difficulty:"Expert",events:27335,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:251.586,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:-.35,notes:1359,bombs:39,obstacles:186,nps:5.402,length:608,characteristic:"Standard",difficulty:"ExpertPlus",events:27335,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:251.586,paritySummary:{errors:1,warns:0,resets:0}},{njs:17,offset:0,notes:1554,bombs:232,obstacles:45,nps:6.177,length:608,characteristic:"90Degree",difficulty:"ExpertPlus",events:27854,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:251.586,paritySummary:{errors:21,warns:0,resets:15}},{njs:17,offset:0,notes:1555,bombs:232,obstacles:44,nps:6.181,length:608,characteristic:"360Degree",difficulty:"ExpertPlus",events:27904,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:251.586,paritySummary:{errors:20,warns:0,resets:15}},{njs:69,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:27335,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/2feafef61cad57ea2d6608eb54c39f139abb48c1.zip",coverURL:"https://cdn.beatsaver.com/2feafef61cad57ea2d6608eb54c39f139abb48c1.jpg",previewURL:"https://cdn.beatsaver.com/2feafef61cad57ea2d6608eb54c39f139abb48c1.mp3"}],createdAt:"2020-01-01T04:28:55.040Z",updatedAt:"2020-01-01T04:28:55.040Z",lastPublishedAt:"2020-01-01T04:28:55.040Z"},{id:"480",name:"Earth, Wind & Fire - September",description:"Expert | Hard | Normal\r\n\r\nBPM - 126\r\nDuration - 2:21\r\n\r\nPreview: https://youtu.be/FOob1xit17Y",uploader:{id:45732,name:"calijor",uniqueSet:!1,hash:"5cff0b7298cc5a672c84ebb1",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ebb1?d=retro",type:"SIMPLE"},metadata:{bpm:126,duration:142,songName:"September",songSubName:"",songAuthorName:"Earth, Wind & Fire",levelAuthorName:"calijor"},stats:{plays:0,downloads:18722,upvotes:10791,downvotes:385,score:.9374},uploaded:"2018-06-09T18:27:58Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"aa2f7bf0df25cd57dddac159fa7c159f732e0553",key:"480",state:"Published",createdAt:"2018-06-09T18:27:58Z",sageScore:4,diffs:[{njs:10,offset:0,notes:291,bombs:0,obstacles:8,nps:2.171,length:281.469,characteristic:"Standard",difficulty:"Normal",events:832,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:134.033,paritySummary:{errors:61,warns:39,resets:0}},{njs:10,offset:0,notes:367,bombs:0,obstacles:8,nps:2.738,length:281.469,characteristic:"Standard",difficulty:"Hard",events:832,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:134.033,paritySummary:{errors:67,warns:65,resets:0}},{njs:10,offset:0,notes:409,bombs:0,obstacles:8,nps:3.051,length:281.469,characteristic:"Standard",difficulty:"Expert",events:832,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:134.033,paritySummary:{errors:75,warns:73,resets:0}}],downloadURL:"https://cdn.beatsaver.com/aa2f7bf0df25cd57dddac159fa7c159f732e0553.zip",coverURL:"https://cdn.beatsaver.com/aa2f7bf0df25cd57dddac159fa7c159f732e0553.jpg",previewURL:"https://cdn.beatsaver.com/aa2f7bf0df25cd57dddac159fa7c159f732e0553.mp3"}],createdAt:"2018-06-09T18:27:58Z",updatedAt:"2018-06-09T18:27:58Z",lastPublishedAt:"2018-06-09T18:27:58Z"},{id:"1181f",name:"Royal & the Serpent - Overwhelmed",description:"Feeling that finals crunch? Worried about the pandemic? General anxiety with the news, and just feeling overwhelmed? Don't forget to take a step back and take a breath. Maybe by dancing along to this song that perfectly captures all of those feelings! Complete with overwhelming Chroma 2.0 lights! And now the extra details:\n\nBPM: 87\nNPS: Ez - 1.71; N - 2.09; H - 2.75; Ex - 3.19; Ex+ - 4.11\nNotes: Ez - 277; N - 338; H - 444; Ex - 516; Ex+ - 664\nBombs: Ez - 0; N - 0; H - 4; Ex - 4; Ex+ - 4\nWalls: Ez - 136; N - 134; H - 144; Ex - 109; Ex+ - 109\n\nSpecial thanks to qwasyx, Smay, and Cyrix for playtesting!",uploader:{id:4285188,name:"fruhead",uniqueSet:!0,hash:"5cff0b7598cc5a672c852683",avatar:"https://cdn.beatsaver.com/avatar/174000100413145090.png",type:"DISCORD"},metadata:{bpm:87,duration:161,songName:"Overwhelmed",songSubName:"",songAuthorName:"Royal & the Serpent",levelAuthorName:"fruhead"},stats:{plays:0,downloads:8427,upvotes:1704,downvotes:19,score:.9371},uploaded:"2020-11-29T23:09:47.309Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b748894960a346f1568b9f4876643f1358cfa897",key:"1181f",state:"Published",createdAt:"2020-11-29T23:09:47.309Z",sageScore:6,diffs:[{njs:10,offset:0,notes:277,bombs:0,obstacles:136,nps:1.793,length:224,characteristic:"Standard",difficulty:"Easy",events:7200,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:154.483,paritySummary:{errors:43,warns:9,resets:0}},{njs:12,offset:-.3,notes:338,bombs:0,obstacles:134,nps:2.188,length:224,characteristic:"Standard",difficulty:"Normal",events:7200,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:154.483,paritySummary:{errors:22,warns:11,resets:0}},{njs:14,offset:.4,notes:444,bombs:4,obstacles:144,nps:2.874,length:224,characteristic:"Standard",difficulty:"Hard",events:7200,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:154.483,paritySummary:{errors:14,warns:4,resets:4}},{njs:16,offset:.25,notes:516,bombs:4,obstacles:109,nps:3.34,length:224,characteristic:"Standard",difficulty:"Expert",events:7200,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:154.483,paritySummary:{errors:0,warns:0,resets:2}},{njs:18,offset:.1,notes:664,bombs:4,obstacles:109,nps:4.298,length:224,characteristic:"Standard",difficulty:"ExpertPlus",events:7200,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:154.483,paritySummary:{errors:0,warns:0,resets:2}},{njs:16,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Expert",events:7200,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b748894960a346f1568b9f4876643f1358cfa897.zip",coverURL:"https://cdn.beatsaver.com/b748894960a346f1568b9f4876643f1358cfa897.jpg",previewURL:"https://cdn.beatsaver.com/b748894960a346f1568b9f4876643f1358cfa897.mp3"}],createdAt:"2020-11-29T23:09:47.309Z",updatedAt:"2020-11-29T23:09:47.309Z",lastPublishedAt:"2020-11-29T23:09:47.309Z"},{id:"3b31",name:"Wolfgang Lohr ft. Maskarade - Hit the Road Jack (Electro Swing)",description:"I realise this is the third time that this song has been made over the last month, so sorry for that. But If your not a fan of my version then please check out the other maps linked below.\r\nThis song happened because someone requested I do an electroswing map. This was not the one they asked for, but his request inspired me to do one of the same genre anyway. I'm happy with the way that expert turned out, but the other difficulties are perhaps a bit rushed on this one. I've left easy out again as the play rates are so low. But If this is a problem for anyone, please give me a message and I'll see about adding one in. Other than that, happy dancing!\r\n\r\nVideo Preview: https://www.youtube.com/watch?v=sg_hCGmoPNg\r\nTime spent mapping: 7:58\r\n\r\nAlternative versions:\r\nFrom SilverScythePC: https://beatsaver.com/browse/detail/12538-13416\r\nFrom Salvay: https://beatsaver.com/browse/detail/12752-13664",uploader:{id:4785,name:"stumi",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f720",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro",type:"SIMPLE"},metadata:{bpm:124,duration:159,songName:"Hit the Road Jack (Electro Swing)",songSubName:"Wolfgang Lohr and Maskerade",songAuthorName:"Stumi",levelAuthorName:"stumi"},stats:{plays:0,downloads:7058,upvotes:3315,downvotes:73,score:.937},uploaded:"2019-03-03T13:06:00Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"46afff5698b59795c5e88f0b610b8321fb9b1791",key:"3b31",state:"Published",createdAt:"2019-03-03T13:06:00Z",sageScore:6,diffs:[{njs:10,offset:0,notes:261,bombs:4,obstacles:38,nps:1.702,length:317,characteristic:"Standard",difficulty:"Normal",events:1419,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:153.387,paritySummary:{errors:21,warns:18,resets:2}},{njs:12,offset:0,notes:473,bombs:7,obstacles:33,nps:3.084,length:317,characteristic:"Standard",difficulty:"Hard",events:1419,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:153.387,paritySummary:{errors:45,warns:22,resets:1}},{njs:16,offset:0,notes:656,bombs:7,obstacles:32,nps:4.267,length:317.75,characteristic:"Standard",difficulty:"Expert",events:1419,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:153.75,paritySummary:{errors:42,warns:22,resets:1}}],downloadURL:"https://cdn.beatsaver.com/46afff5698b59795c5e88f0b610b8321fb9b1791.zip",coverURL:"https://cdn.beatsaver.com/46afff5698b59795c5e88f0b610b8321fb9b1791.jpg",previewURL:"https://cdn.beatsaver.com/46afff5698b59795c5e88f0b610b8321fb9b1791.mp3"}],createdAt:"2019-03-03T13:06:00Z",updatedAt:"2019-03-03T13:06:00Z",lastPublishedAt:"2019-03-03T13:06:00Z"},{id:"13e9",name:"dark cat - BUBBLE TEA",description:"--------------------------------\r\ndark cat - BUBBLE TEA (feat. juu & cinders)\r\nTime: 4:01\r\nExpert: 1087 Notes\r\nHard: 969 Notes\r\n--------------------------------\r\nHi guys, I'm a bit busy with school right now\r\nso my upload rate is going to slow down for a while..\r\n ^-^",uploader:{id:4288141,name:"roeek",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f787",avatar:"https://cdn.beatsaver.com/avatar/321652344196694016.png",type:"DISCORD"},metadata:{bpm:160,duration:241,songName:"BUBBLE TEA",songSubName:"dark cat",songAuthorName:"Mapped by roeek",levelAuthorName:"roeek"},stats:{plays:0,downloads:12107,upvotes:8979,downvotes:310,score:.9368},uploaded:"2018-09-06T18:59:42Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"f83edec86d3faf683711ecb0a9df6bd65d2d0ce0",key:"13e9",state:"Published",createdAt:"2018-09-06T18:59:42Z",sageScore:6,diffs:[{njs:12,offset:0,notes:969,bombs:0,obstacles:12,nps:4.303,length:600.5,characteristic:"Standard",difficulty:"Hard",events:1043,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225.188,paritySummary:{errors:26,warns:32,resets:0}},{njs:13,offset:0,notes:1087,bombs:0,obstacles:12,nps:4.827,length:600.5,characteristic:"Standard",difficulty:"Expert",events:1047,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225.188,paritySummary:{errors:35,warns:36,resets:0},stars:3.65}],downloadURL:"https://cdn.beatsaver.com/f83edec86d3faf683711ecb0a9df6bd65d2d0ce0.zip",coverURL:"https://cdn.beatsaver.com/f83edec86d3faf683711ecb0a9df6bd65d2d0ce0.jpg",previewURL:"https://cdn.beatsaver.com/f83edec86d3faf683711ecb0a9df6bd65d2d0ce0.mp3"}],createdAt:"2018-09-06T18:59:42Z",updatedAt:"2018-09-06T18:59:42Z",lastPublishedAt:"2018-09-06T18:59:42Z"},{id:"46be",name:"Kill This Love - BLACKPINK",description:"Thanks to n3tman, snaccy, Helen Carnate, PandaCat, and SimplyMarvelous for their help.\n\nAfter a thousand years, BLACKPINK has finally come out with new songs. Hopefully this map will absolve me from what I did with my last BLACKPINK map (though I still snuck in some choreography to this map when it fit).\n\nExpert+ preview: https://youtu.be/7_epIbqHD3U (footage is of pre-release version)\n\nPreview video uses custom blackpink light sabers, which you can find in the kpop beat saber discord here\nhttps://discord.gg/c9uHGYP\nFollow me on Twitter u won't\nhttps://twitter.com/aggrogahu",uploader:{id:4284613,name:"aggrogahu",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fdad",avatar:"https://cdn.beatsaver.com/avatar/158363872649150464.png",type:"DISCORD"},metadata:{bpm:132,duration:188,songName:"Kill This Love",songSubName:"BLACKPINK",songAuthorName:"aggrogahu",levelAuthorName:"aggrogahu"},stats:{plays:0,downloads:15888,upvotes:4507,downvotes:120,score:.9367},uploaded:"2019-04-18T03:00:19Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8255fef3ce60e6a9ca404491b6d6fdfec158581e",key:"46be",state:"Published",createdAt:"2019-04-18T03:00:19Z",sageScore:3,diffs:[{njs:9,offset:0,notes:278,bombs:13,obstacles:15,nps:1.529,length:400,characteristic:"Standard",difficulty:"Normal",events:1344,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.818,paritySummary:{errors:57,warns:36,resets:6}},{njs:10,offset:0,notes:448,bombs:11,obstacles:18,nps:2.464,length:400,characteristic:"Standard",difficulty:"Hard",events:1344,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.818,paritySummary:{errors:47,warns:28,resets:6}},{njs:12,offset:0,notes:665,bombs:26,obstacles:19,nps:3.658,length:400,characteristic:"Standard",difficulty:"Expert",events:1344,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.818,paritySummary:{errors:39,warns:37,resets:3}},{njs:14,offset:0,notes:779,bombs:36,obstacles:19,nps:4.285,length:400,characteristic:"Standard",difficulty:"ExpertPlus",events:1344,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.818,paritySummary:{errors:55,warns:56,resets:7}}],downloadURL:"https://cdn.beatsaver.com/8255fef3ce60e6a9ca404491b6d6fdfec158581e.zip",coverURL:"https://cdn.beatsaver.com/8255fef3ce60e6a9ca404491b6d6fdfec158581e.jpg",previewURL:"https://cdn.beatsaver.com/8255fef3ce60e6a9ca404491b6d6fdfec158581e.mp3"}],createdAt:"2019-04-18T03:00:19Z",updatedAt:"2019-04-18T03:00:19Z",lastPublishedAt:"2019-04-18T03:00:19Z"},{id:"ce0",name:"South Park - Kyle's Mom's a Bitch",description:"Preview:\r\nhttps://www.youtube.com/watch?v=OjHoHbbZYDE\r\n\r\nKyle's mom's a bitch, she's a big fat bitch\r\nShe's the biggest bitch in the whole wide world",uploader:{id:4286278,name:"ruckus",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f1d8",avatar:"https://cdn.beatsaver.com/avatar/239082462083284992.png",type:"DISCORD"},metadata:{bpm:156,duration:95,songName:"Kyle's Mom's a Bitch",songSubName:"South Park",songAuthorName:"Ruckus",levelAuthorName:"ruckus"},stats:{plays:0,downloads:6595,upvotes:3276,downvotes:73,score:.9367},uploaded:"2018-07-30T23:36:18Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7fda5a2459b48226cc7dbaedf9c31f5fd7aff488",key:"ce0",state:"Published",createdAt:"2018-07-30T23:36:18Z",sageScore:4,diffs:[{njs:12,offset:0,notes:474,bombs:0,obstacles:0,nps:5.911,length:208.5,characteristic:"Standard",difficulty:"ExpertPlus",events:655,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:80.192,paritySummary:{errors:42,warns:23,resets:0}}],downloadURL:"https://cdn.beatsaver.com/7fda5a2459b48226cc7dbaedf9c31f5fd7aff488.zip",coverURL:"https://cdn.beatsaver.com/7fda5a2459b48226cc7dbaedf9c31f5fd7aff488.jpg",previewURL:"https://cdn.beatsaver.com/7fda5a2459b48226cc7dbaedf9c31f5fd7aff488.mp3"}],createdAt:"2018-07-30T23:36:18Z",updatedAt:"2018-07-30T23:36:18Z",lastPublishedAt:"2018-07-30T23:36:18Z"},{id:"a909",name:"[TheFatRat Pack] Time Lapse - TheFatRat",description:'Here it is! The unofficial "TheFatRat" Music Pack in Beat Saber - with all beatmaps being singlehandedly made by me!\n\nAll songs included in TheFatRat Music Pack:\nMonody (ft. Laura Brehm) \nUnity \nWindfall \nXenogenesis \nTime Lapse \n\nGet the full song pack here: https://bsaber.com/thefatrat-music-pack/\n(Or you should just be able to find all the other ones on my beatsaver profile as well. Heres a link to my profile: https://beatsaver.com/uploader/5d47d586c5301900060b2f6c)\n\nSongcore mod is recommended (for custom colours)\nPlays best on Origins Environment\n\nTime Lapse Stats:\nExpert+ - 782 Notes | 4.29 NPS\nExpert - 615 Notes | 3.37 NPS\n(One Saber) Expert - 496 Notes | 2.72 NPS\nHard - 493 Notes | 2.70 NPS\nNormal - 305 Notes | 1.67 NPS\nEasy - 180 Notes | 0.99 NPS\n\nRoughly 7-8 Hours of work\nGameplay: https://youtu.be/aYwKN3LnEZA\n\nObviously - A huge thanks to TheFatRat himself, for not only producing the songs in the first place (and allowing free access to use them for big and small content creators), but also being a huge inspiration to lots of artists out there and for making music that everyone can jam out to! We love you, TheFatRat!',uploader:{id:4284197,name:"timeweaver",uniqueSet:!0,hash:"5d47d586c5301900060b2f6c",avatar:"https://cdn.beatsaver.com/avatar/607399708121366529.png",type:"DISCORD"},metadata:{bpm:127,duration:182,songName:"Time Lapse",songSubName:"",songAuthorName:"TheFatRat",levelAuthorName:"Timeweaver"},stats:{plays:0,downloads:8459,upvotes:2334,downvotes:40,score:.9366},uploaded:"2020-05-22T13:28:32.918Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a03cb0a107993be5cded1e91dc31e8a7b048f02a",key:"a909",state:"Published",createdAt:"2020-05-22T13:28:32.918Z",sageScore:6,diffs:[{njs:9,offset:0,notes:180,bombs:0,obstacles:33,nps:1.035,length:368,characteristic:"Standard",difficulty:"Easy",events:3139,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:173.858,paritySummary:{errors:40,warns:1,resets:0}},{njs:11,offset:1,notes:305,bombs:0,obstacles:41,nps:1.735,length:372,characteristic:"Standard",difficulty:"Normal",events:3139,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.748,paritySummary:{errors:24,warns:24,resets:0}},{njs:12,offset:1,notes:493,bombs:0,obstacles:36,nps:2.783,length:375,characteristic:"Standard",difficulty:"Hard",events:3139,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:177.165,paritySummary:{errors:3,warns:0,resets:0}},{njs:15,offset:.1,notes:614,bombs:1,obstacles:67,nps:3.429,length:379,characteristic:"Standard",difficulty:"Expert",events:3139,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:179.055,paritySummary:{errors:2,warns:0,resets:0}},{njs:19,offset:-.4,notes:782,bombs:0,obstacles:84,nps:4.402,length:376,characteristic:"Standard",difficulty:"ExpertPlus",events:3139,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:177.638,paritySummary:{errors:1,warns:0,resets:0}},{njs:16,offset:0,notes:496,bombs:0,obstacles:119,nps:2.792,length:376,characteristic:"OneSaber",difficulty:"Expert",events:3139,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:177.638,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a03cb0a107993be5cded1e91dc31e8a7b048f02a.zip",coverURL:"https://cdn.beatsaver.com/a03cb0a107993be5cded1e91dc31e8a7b048f02a.jpg",previewURL:"https://cdn.beatsaver.com/a03cb0a107993be5cded1e91dc31e8a7b048f02a.mp3"}],createdAt:"2020-05-22T13:28:32.918Z",updatedAt:"2020-05-22T13:28:32.918Z",lastPublishedAt:"2020-05-22T13:28:32.918Z"},{id:"8d49",name:"Dreamcatcher - Scream",description:"Expert+ by noxn and simplymarvellous\nExpert and Lighting by aggrogahu\n\nMap preview by aggrogahu: https://www.youtube.com/watch?v=Yv908yUt9O0\n\nExtra thanks to simplymarvellous for fixing all of my sync issues and creating some pog patterns while he was at it! And special thanks to Bloodcloak for some great changes and ideas!\n\nThis was my first collab map. I've really enjoyed playing it and working with people to make a great finished product!\n\nJoin us in the KPOP Beat Saber discord here: https://discord.gg/c9uHGYP\n\nAnd finally, my survey link <3: https://forms.gle/8nJVPiriTWPx9irT6",uploader:{id:4289789,name:"noxn",uniqueSet:!0,hash:"5daab87cc216d40006bef803",avatar:"https://cdn.beatsaver.com/avatar/132315398287785985.png",type:"DISCORD"},metadata:{bpm:138,duration:206,songName:"Scream",songSubName:"",songAuthorName:"Dreamcatcher",levelAuthorName:"noxn; simplymarvellous; aggrogahu"},stats:{plays:0,downloads:9907,upvotes:1737,downvotes:21,score:.9366},uploaded:"2020-03-04T23:07:51.556Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"94e31eda51f8afd9e59c9895972b80775556cf6a",key:"8d49",state:"Published",createdAt:"2020-03-04T23:07:51.556Z",sageScore:5,diffs:[{njs:16,offset:.2,notes:717,bombs:48,obstacles:36,nps:3.616,length:456,characteristic:"Standard",difficulty:"Expert",events:2568,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.261,paritySummary:{errors:19,warns:24,resets:9}},{njs:18,offset:-.5,notes:1068,bombs:52,obstacles:47,nps:5.387,length:456,characteristic:"Standard",difficulty:"ExpertPlus",events:2568,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.261,paritySummary:{errors:11,warns:15,resets:2}}],downloadURL:"https://cdn.beatsaver.com/94e31eda51f8afd9e59c9895972b80775556cf6a.zip",coverURL:"https://cdn.beatsaver.com/94e31eda51f8afd9e59c9895972b80775556cf6a.jpg",previewURL:"https://cdn.beatsaver.com/94e31eda51f8afd9e59c9895972b80775556cf6a.mp3"}],createdAt:"2020-03-04T23:07:51.556Z",updatedAt:"2020-03-04T23:07:51.556Z",lastPublishedAt:"2020-03-04T23:07:51.556Z"},{id:"129bf",name:"LeaF - Mope Mope(Noodle Extensions, Chroma)",description:"Preview:\nhttps://www.youtube.com/watch?v=p9U5Y2iFoRQ&t=11s\nWarnings:\n--Fast Flashing Images\n--Disturbing Contents\n--This Level is NOT for Children--\nRequirements:\nNoodle Extensions, Chroma\nLeft-Handed and Custom Notes will cause some bugs\nSome of the bombs are fake:)\nThank you Moe ChiaKi for testing the map OwO",uploader:{id:4289114,name:"waika",uniqueSet:!0,hash:"5cff0b7698cc5a672c85464f",avatar:"https://cdn.beatsaver.com/avatar/530663167244894220.png",type:"DISCORD"},metadata:{bpm:200,duration:111,songName:"Mope Mope",songSubName:"",songAuthorName:"LeaF",levelAuthorName:"waika"},stats:{plays:0,downloads:9472,upvotes:3722,downvotes:90,score:.9366},uploaded:"2021-01-12T07:11:32.915Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6c9d463c1cf556246cf60bfaef75fc4f8ea3053f",key:"129bf",state:"Published",createdAt:"2021-01-12T07:11:32.915Z",sageScore:5,diffs:[{njs:16,offset:2,notes:968,bombs:4092,obstacles:303,nps:9.089,length:355,characteristic:"Standard",difficulty:"ExpertPlus",events:5812,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:106.5,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6c9d463c1cf556246cf60bfaef75fc4f8ea3053f.zip",coverURL:"https://cdn.beatsaver.com/6c9d463c1cf556246cf60bfaef75fc4f8ea3053f.jpg",previewURL:"https://cdn.beatsaver.com/6c9d463c1cf556246cf60bfaef75fc4f8ea3053f.mp3"}],createdAt:"2021-01-12T07:11:32.915Z",updatedAt:"2021-01-12T07:11:32.915Z",lastPublishedAt:"2021-01-12T07:11:32.915Z"},{id:"12d9",name:"Snail's House - Pixel Galaxy",description:"Hard/Expert | BPM: 150 | Length: 3:46 | Notes: 493/787\r\n\r\nIt's a really nice song. Not much else to say\r\nA lot of manual lighting too :D\r\n\r\n10th Map.\r\n\r\nPreview:\r\nhttps://www.youtube.com/watch?v=5xvJlMob-ok\r\nSong:\r\nhttps://www.youtube.com/watch?v=3nlSDxvt6JU",uploader:{id:4285825,name:"fefeland",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f3bb",avatar:"https://cdn.beatsaver.com/avatar/119360573191225344.png",type:"DISCORD"},metadata:{bpm:150,duration:227,songName:"Pixel Galaxy",songSubName:"Snail's House",songAuthorName:"FEFELAND",levelAuthorName:"fefeland"},stats:{plays:0,downloads:6468,upvotes:2912,downvotes:60,score:.9366},uploaded:"2018-08-31T22:56:17Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"848b35a0028465bc4d76fd3cafb5acc4b2c70d5a",key:"12d9",state:"Published",createdAt:"2018-08-31T22:56:17Z",sageScore:6,diffs:[{njs:9,offset:0,notes:493,bombs:0,obstacles:0,nps:2.268,length:543.5,characteristic:"Standard",difficulty:"Hard",events:1741,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.4,paritySummary:{errors:47,warns:20,resets:0},stars:1.49},{njs:12,offset:0,notes:787,bombs:0,obstacles:0,nps:3.62,length:543.5,characteristic:"Standard",difficulty:"Expert",events:1741,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.4,paritySummary:{errors:41,warns:28,resets:0}}],downloadURL:"https://cdn.beatsaver.com/848b35a0028465bc4d76fd3cafb5acc4b2c70d5a.zip",coverURL:"https://cdn.beatsaver.com/848b35a0028465bc4d76fd3cafb5acc4b2c70d5a.jpg",previewURL:"https://cdn.beatsaver.com/848b35a0028465bc4d76fd3cafb5acc4b2c70d5a.mp3"}],createdAt:"2018-08-31T22:56:17Z",updatedAt:"2018-08-31T22:56:17Z",lastPublishedAt:"2018-08-31T22:56:17Z"},{id:"124",name:"Rasputin (Funk Overload)",description:"Hard\r\nBpm 147\r\nspeed up version of rasputin Original",uploader:{id:48512,name:"jobas",uniqueSet:!1,hash:"5cff0b7298cc5a672c84e9a2",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9a2?d=retro",type:"SIMPLE"},metadata:{bpm:149,duration:239,songName:"Rasputin (Funk Overload)",songSubName:"",songAuthorName:"Jobas",levelAuthorName:"jobas"},stats:{plays:0,downloads:20546,upvotes:20981,downvotes:890,score:.9366},uploaded:"2018-05-19T16:36:34Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9a1d001995cc0a2014352aa7148cbcbf2e489d89",key:"124",state:"Published",createdAt:"2018-05-19T16:36:34Z",sageScore:5,diffs:[{njs:10,offset:0,notes:768,bombs:0,obstacles:154,nps:3.329,length:586.013,characteristic:"Standard",difficulty:"Hard",events:1109,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:235.978,paritySummary:{errors:58,warns:141,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9a1d001995cc0a2014352aa7148cbcbf2e489d89.zip",coverURL:"https://cdn.beatsaver.com/9a1d001995cc0a2014352aa7148cbcbf2e489d89.jpg",previewURL:"https://cdn.beatsaver.com/9a1d001995cc0a2014352aa7148cbcbf2e489d89.mp3"}],createdAt:"2018-05-19T16:36:34Z",updatedAt:"2018-05-19T16:36:34Z",lastPublishedAt:"2018-05-19T16:36:34Z"},{id:"12ad1",name:"Minnesota - Colors (ft. Jackie Rain) | Chroma RGB",description:"Chroma 2.0 HIGHLY RECOMMENDED!\n\nHad this map sitting in my project folder for some months and finally got to finish it! \nIt features a Chroma RGB lightshow AND Rainbow notes, for the full COLOR experience :)\n\nPreview: https://www.youtube.com/watch?v=8Omzd7IdJt0",uploader:{id:4284201,name:"nitronikexe",uniqueSet:!0,hash:"5cff0b7798cc5a672c855d84",avatar:"https://cdn.beatsaver.com/avatar/428230049704181760.png",type:"DISCORD"},metadata:{bpm:140,duration:202,songName:"Colors",songSubName:"(ft. Jackie Rain)",songAuthorName:"Minnesota",levelAuthorName:"nitronik.exe"},stats:{plays:0,downloads:3903,upvotes:1230,downvotes:7,score:.9364},uploaded:"2021-01-13T15:55:44.846Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"03fcb98091e50600d9d777251d765c53384c2735",key:"12ad1",state:"Published",createdAt:"2021-01-13T15:55:44.846Z",sageScore:4,diffs:[{njs:13,offset:.5,notes:395,bombs:0,obstacles:221,nps:2.057,length:448,characteristic:"Standard",difficulty:"Hard",events:16569,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:601,bombs:0,obstacles:113,nps:3.13,length:448,characteristic:"Standard",difficulty:"Expert",events:16569,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:-.5,notes:911,bombs:0,obstacles:120,nps:4.745,length:448,characteristic:"Standard",difficulty:"ExpertPlus",events:16569,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/03fcb98091e50600d9d777251d765c53384c2735.zip",coverURL:"https://cdn.beatsaver.com/03fcb98091e50600d9d777251d765c53384c2735.jpg",previewURL:"https://cdn.beatsaver.com/03fcb98091e50600d9d777251d765c53384c2735.mp3"}],createdAt:"2021-01-13T15:55:44.846Z",updatedAt:"2021-01-13T15:55:44.846Z",lastPublishedAt:"2021-01-13T15:55:44.846Z"},{id:"6094",name:"Legend - The Score",description:"https://www.youtube.com/watch?v=M5oxJRVwwCY",uploader:{id:4285982,name:"downycat",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ede5",avatar:"https://cdn.beatsaver.com/avatar/173538829888782336.png",type:"DISCORD"},metadata:{bpm:82,duration:190,songName:"Legend",songSubName:"",songAuthorName:"The Score",levelAuthorName:"DownyCat"},stats:{plays:0,downloads:5059,upvotes:1752,downvotes:22,score:.9363},uploaded:"2019-09-01T13:23:40.596Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f1c24c4b08a1126017ba8a96da4828d2d949f46b",key:"6094",state:"Published",createdAt:"2019-09-01T13:23:40.596Z",sageScore:6,diffs:[{njs:12,offset:0,notes:357,bombs:0,obstacles:37,nps:2.006,length:243.25,characteristic:"Standard",difficulty:"Normal",events:3490,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:177.988,paritySummary:{errors:5,warns:0,resets:0}},{njs:12,offset:0,notes:537,bombs:0,obstacles:47,nps:3.017,length:243.25,characteristic:"Standard",difficulty:"Hard",events:3490,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:177.988,paritySummary:{errors:3,warns:0,resets:0}},{njs:16,offset:0,notes:728,bombs:0,obstacles:42,nps:4.09,length:243.25,characteristic:"Standard",difficulty:"Expert",events:3490,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:177.988,paritySummary:{errors:5,warns:3,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f1c24c4b08a1126017ba8a96da4828d2d949f46b.zip",coverURL:"https://cdn.beatsaver.com/f1c24c4b08a1126017ba8a96da4828d2d949f46b.jpg",previewURL:"https://cdn.beatsaver.com/f1c24c4b08a1126017ba8a96da4828d2d949f46b.mp3"}],createdAt:"2019-09-01T13:23:40.596Z",updatedAt:"2019-09-01T13:23:40.596Z",lastPublishedAt:"2019-09-01T13:23:40.596Z"},{id:"d4a5",name:"[FUTURE FUNK PACK] Shiawase No Monosashi (VANTAGE // Short Ver.)",description:'FUTURE FUNK MAP PACK\n2 songs uploaded everyday through August 10th - 14th!\n\n"Shiawase No Monosashi" is performed by Mariya Takeuchi. This version of the song is a short edit I made from VANTAGE //\'s edit. The original length of the song is 5 minutes long\n\nPlease look forward to the upcoming maps!\n\nDM any feedback on Discord\nETAN#8341',uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:128,duration:171,songName:"Shiawase No Monosashi",songSubName:"(VANTAGE // Short Ver.)",songAuthorName:"Mariya Takeuchi",levelAuthorName:"ETAN"},stats:{plays:0,downloads:6944,upvotes:1542,downvotes:16,score:.9362},uploaded:"2020-08-12T18:17:44.285Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d7cb32f23041dec272de3da0ac141dd8f91478ca",key:"d4a5",state:"Published",createdAt:"2020-08-12T18:17:44.285Z",sageScore:7,diffs:[{njs:10,offset:1,notes:168,bombs:16,obstacles:1,nps:1.029,length:348.25,characteristic:"Standard",difficulty:"Easy",events:7775,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.242,paritySummary:{errors:0,warns:0,resets:0}},{njs:11,offset:1,notes:255,bombs:16,obstacles:1,nps:1.562,length:348.25,characteristic:"Standard",difficulty:"Normal",events:7775,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.242,paritySummary:{errors:1,warns:1,resets:0}},{njs:12,offset:1,notes:358,bombs:16,obstacles:1,nps:2.193,length:348.25,characteristic:"Standard",difficulty:"Hard",events:7775,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.242,paritySummary:{errors:0,warns:0,resets:0}},{njs:15,offset:0,notes:557,bombs:16,obstacles:1,nps:3.335,length:356.25,characteristic:"Standard",difficulty:"Expert",events:7775,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:166.992,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:-.5,notes:778,bombs:16,obstacles:1,nps:4.659,length:356.25,characteristic:"Standard",difficulty:"ExpertPlus",events:7775,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:166.992,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/d7cb32f23041dec272de3da0ac141dd8f91478ca.zip",coverURL:"https://cdn.beatsaver.com/d7cb32f23041dec272de3da0ac141dd8f91478ca.jpg",previewURL:"https://cdn.beatsaver.com/d7cb32f23041dec272de3da0ac141dd8f91478ca.mp3"}],createdAt:"2020-08-12T18:17:44.285Z",updatedAt:"2020-08-12T18:17:44.285Z",lastPublishedAt:"2020-08-12T18:17:44.285Z"},{id:"75a8",name:"Silhouette [Naruto Shippuden 16th Opening] - KANA-BOON",description:"This map was converted from one of my old maps.\n\nFeel free to DM me on discord @Joetastic#2501",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:183,duration:127,songName:"Silhouette (TV Size)",songSubName:"",songAuthorName:"KANA-BOON",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:10318,upvotes:2707,downvotes:54,score:.9362},uploaded:"2019-12-11T07:31:02.566Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ba8d44529d21da1128bc70034ee608b6e8a19a63",key:"75a8",state:"Published",createdAt:"2019-12-11T07:31:02.566Z",sageScore:4,diffs:[{njs:12,offset:0,notes:412,bombs:0,obstacles:0,nps:3.383,length:371.5,characteristic:"Standard",difficulty:"Hard",events:2826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:121.803,paritySummary:{errors:20,warns:20,resets:0}},{njs:14,offset:0,notes:520,bombs:0,obstacles:0,nps:4.269,length:371.5,characteristic:"Standard",difficulty:"Expert",events:2826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:121.803,paritySummary:{errors:42,warns:24,resets:0}},{njs:16,offset:0,notes:710,bombs:0,obstacles:0,nps:5.829,length:371.5,characteristic:"Standard",difficulty:"ExpertPlus",events:3013,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:121.803,paritySummary:{errors:51,warns:65,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ba8d44529d21da1128bc70034ee608b6e8a19a63.zip",coverURL:"https://cdn.beatsaver.com/ba8d44529d21da1128bc70034ee608b6e8a19a63.jpg",previewURL:"https://cdn.beatsaver.com/ba8d44529d21da1128bc70034ee608b6e8a19a63.mp3"}],createdAt:"2019-12-11T07:31:02.566Z",updatedAt:"2019-12-11T07:31:02.566Z",lastPublishedAt:"2019-12-11T07:31:02.566Z"},{id:"5e44",name:"Wolf In Sheep's Clothing - Set It Off",description:"“Wolf In Sheep’s Clothing” is a song by American pop punk band Set It Off. The song appears on their album Duality.",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:165,duration:189,songName:"Wolf In Sheep's Clothing",songSubName:"",songAuthorName:"Set It Off",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:3557,upvotes:1766,downvotes:23,score:.936},uploaded:"2019-08-21T14:32:59.705Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"71498322889259738dfbd9fdae23fc94bc382793",key:"5e44",state:"Published",createdAt:"2019-08-21T14:32:59.705Z",sageScore:6,diffs:[{njs:15,offset:0,notes:710,bombs:12,obstacles:2,nps:3.844,length:508,characteristic:"Standard",difficulty:"Expert",events:2219,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:184.727,paritySummary:{errors:45,warns:50,resets:0}}],downloadURL:"https://cdn.beatsaver.com/71498322889259738dfbd9fdae23fc94bc382793.zip",coverURL:"https://cdn.beatsaver.com/71498322889259738dfbd9fdae23fc94bc382793.jpg",previewURL:"https://cdn.beatsaver.com/71498322889259738dfbd9fdae23fc94bc382793.mp3"}],createdAt:"2019-08-21T14:32:59.705Z",updatedAt:"2019-08-21T14:32:59.705Z",lastPublishedAt:"2019-08-21T14:32:59.705Z"},{id:"2db0",name:"RESISTER [Sword Art Online: Alicization 2nd Opening] - ASCA",description:"As requested by @Shoko84 & @Sotarks: RESISTER, the second opening to Sword Art Online: Alicization by ASCA!\r\n\r\n(Originally came in only expert plus but poor Sotarks couldn't do it so thank him for making me include an expert and hard xP)",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:183,duration:226,songName:"RESISTER",songSubName:"ASCA",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:6798,upvotes:3257,downvotes:75,score:.9359},uploaded:"2019-01-14T18:07:01Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"eb52dc76edd0eeee542ca6d339127f88dce9a5f4",key:"2db0",state:"Published",createdAt:"2019-01-14T18:07:01Z",sageScore:6,diffs:[{njs:11,offset:0,notes:852,bombs:0,obstacles:45,nps:3.85,length:675,characteristic:"Standard",difficulty:"Hard",events:4117,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.311,paritySummary:{errors:39,warns:22,resets:0}},{njs:13,offset:0,notes:970,bombs:0,obstacles:45,nps:4.383,length:675,characteristic:"Standard",difficulty:"Expert",events:4117,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.311,paritySummary:{errors:47,warns:56,resets:0}},{njs:15,offset:0,notes:1162,bombs:0,obstacles:51,nps:5.251,length:675,characteristic:"Standard",difficulty:"ExpertPlus",events:4117,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.311,paritySummary:{errors:36,warns:43,resets:0}}],downloadURL:"https://cdn.beatsaver.com/eb52dc76edd0eeee542ca6d339127f88dce9a5f4.zip",coverURL:"https://cdn.beatsaver.com/eb52dc76edd0eeee542ca6d339127f88dce9a5f4.jpg",previewURL:"https://cdn.beatsaver.com/eb52dc76edd0eeee542ca6d339127f88dce9a5f4.mp3"}],createdAt:"2019-01-14T18:07:01Z",updatedAt:"2019-01-14T18:07:01Z",lastPublishedAt:"2019-01-14T18:07:01Z"},{id:"2475",name:"Bring It On - Giga-P",description:"Probably Giga-P's most famous song, Bring It On / 劣等上等 (Rettou Joutou / Inferiority Superiority), made for the 10th anniversary of the Vocaloids Rin and Len. This song has quickly entered the Hall of Fame and rightly so as it is one of everyone's (or at least, mine) favorite Vocaloid songs. because of that I knew I had to make a good map out of it. I had a lot of fun making this one and I hope it shows!\r\n\r\nAudio edits: extended intro and slight enhancements to the mix has been made since I had access to the vocals and karaoke tracks, to make the audio fit better in Beat Saber.\r\n\r\nPreview video:\r\nhttps://youtu.be/16oSzYCTD3A\r\n\r\nBPM: 160\r\nDuration: 3:56\r\nEasy, Normal, Hard and Expert difficulties.\r\n\r\nEasy: 335, 7 obstacles, 4 mines\r\nNormal: 469 notes, 10 obstacles, 8 mines\r\nHard: 665 notes, 14 obstacles, 24 mines\r\nExpert: 845 notes, 15 obstacles, 28 mines\r\n\r\nMap includes three different audio versions:\r\n* Full vocal version; the standard version of the song.\r\n* Karaoke version; you can sing along with backing vocals!\r\n* Instrumental version; If you don't want any backing or main vocals this is the version to use.\r\nTo change between these search for \"GigaP_Bring_It_On.ogg\" in your CustomSongs folder and open the folder where that file resides. Change the name of GigaP_Bring_It_On.ogg to GigaP_Bring_It_On_Standard.ogg and rename any of the other two versions to GigaP_Bring_It_On.ogg. Start the game and enjoy!\r\n\r\nThanks to AaltopahWi, RedMagi and ManDynasty for playtesting!\r\n\r\nEnjoy!",uploader:{id:4285318,name:"kolezan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fcbb",avatar:"https://cdn.beatsaver.com/avatar/220513618763055106.png",type:"DISCORD"},metadata:{bpm:160,duration:236,songName:"Bring It On",songSubName:"Giga-P",songAuthorName:"Kolezan",levelAuthorName:"Kolezan"},stats:{plays:0,downloads:9117,upvotes:3878,downvotes:99,score:.9359},uploaded:"2018-12-07T21:36:14Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"4cb323a4340177d7b7ca74f67f6b920ed320ee5e",key:"2475",state:"Published",createdAt:"2018-12-07T21:36:14Z",sageScore:5,diffs:[{njs:10,offset:0,notes:335,bombs:4,obstacles:7,nps:1.462,length:611,characteristic:"Standard",difficulty:"Easy",events:2906,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:229.125,paritySummary:{errors:63,warns:28,resets:0},stars:1.02},{njs:11,offset:0,notes:469,bombs:8,obstacles:10,nps:2.047,length:611,characteristic:"Standard",difficulty:"Normal",events:2906,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:229.125,paritySummary:{errors:69,warns:52,resets:4},stars:1.36},{njs:12,offset:0,notes:665,bombs:24,obstacles:14,nps:2.902,length:611,characteristic:"Standard",difficulty:"Hard",events:2906,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:229.125,paritySummary:{errors:74,warns:79,resets:7},stars:1.95},{njs:13,offset:0,notes:845,bombs:28,obstacles:15,nps:3.688,length:611,characteristic:"Standard",difficulty:"Expert",events:3259,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:229.125,paritySummary:{errors:91,warns:115,resets:12},stars:2.64}],downloadURL:"https://cdn.beatsaver.com/4cb323a4340177d7b7ca74f67f6b920ed320ee5e.zip",coverURL:"https://cdn.beatsaver.com/4cb323a4340177d7b7ca74f67f6b920ed320ee5e.jpg",previewURL:"https://cdn.beatsaver.com/4cb323a4340177d7b7ca74f67f6b920ed320ee5e.mp3"}],createdAt:"2018-12-07T21:36:14Z",updatedAt:"2018-12-07T21:36:14Z",lastPublishedAt:"2018-12-07T21:36:14Z"},{id:"19d5",name:"BABY GOT BACK - Sir Mix A Lot (Mapped by GreatYazer)",description:"Oh, my, God Becky, look at her butt",uploader:{id:41378,name:"greatyazer",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea71",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ea71?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:265,songName:"Baby Got Back",songSubName:"Sir Mix A Lot",songAuthorName:"GreatYazer",levelAuthorName:"greatyazer"},stats:{plays:0,downloads:9264,upvotes:3382,downvotes:80,score:.9359},uploaded:"2018-10-12T12:34:15Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9d5dbcb878623f3396395cec0e6e8e07d48d2256",key:"19d5",state:"Published",createdAt:"2018-10-12T12:34:15Z",sageScore:5,diffs:[{njs:10,offset:0,notes:254,bombs:0,obstacles:0,nps:1.044,length:519,characteristic:"Standard",difficulty:"Easy",events:2124,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:243.281,paritySummary:{errors:61,warns:19,resets:0}},{njs:10,offset:0,notes:394,bombs:0,obstacles:1,nps:1.62,length:519,characteristic:"Standard",difficulty:"Normal",events:2124,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:243.281,paritySummary:{errors:100,warns:34,resets:0}},{njs:10,offset:0,notes:603,bombs:0,obstacles:9,nps:2.479,length:519,characteristic:"Standard",difficulty:"Hard",events:2124,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:243.281,paritySummary:{errors:79,warns:48,resets:0}},{njs:10,offset:0,notes:889,bombs:0,obstacles:14,nps:3.654,length:519,characteristic:"Standard",difficulty:"Expert",events:2124,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:243.281,paritySummary:{errors:107,warns:66,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9d5dbcb878623f3396395cec0e6e8e07d48d2256.zip",coverURL:"https://cdn.beatsaver.com/9d5dbcb878623f3396395cec0e6e8e07d48d2256.jpg",previewURL:"https://cdn.beatsaver.com/9d5dbcb878623f3396395cec0e6e8e07d48d2256.mp3"}],createdAt:"2018-10-12T12:34:15Z",updatedAt:"2018-10-12T12:34:15Z",lastPublishedAt:"2018-10-12T12:34:15Z"},{id:"d00c",name:"[Extra Sensory] Hayako - Analys",description:'WE ARE BACK\n\nMassive thanks to these people for making all of this possible!!\nAeroluna- For making Noodle Extensions and updating Chroma\nCyan- For spending almost a full day starting at effects with and for me and also helping with making sure the mapping wasnt horrible\nArti- CusomJsonData and helping make this whole project happen initially at all!!\nFMS_Cat- Map heavily inspired and made from his original, https://youtu.be/eqZE60HanCM . The we are back text was also modeled after that in his chart\n\nAnd anyone else who helped me out while I was being dumb with this whole thing\n\nThis map was released as a part of the "Extra Sensory" event.\n\nVideo: https://youtu.be/sYkW_AWUEL8',uploader:{id:4235136,name:"reaxt",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8ab",avatar:"https://cdn.beatsaver.com/avatar/163052863038291970.png",type:"DISCORD"},metadata:{bpm:170,duration:129,songName:"ANALYS",songSubName:"",songAuthorName:"HAYAKO",levelAuthorName:"Reaxt"},stats:{plays:0,downloads:6832,upvotes:4995,downvotes:145,score:.9358},uploaded:"2020-08-06T16:52:58.027Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f6dbd83b699872e2e42c2fc90337ef0ac2ab8f30",key:"d00c",state:"Published",createdAt:"2020-08-06T16:52:58.027Z",sageScore:3,diffs:[{njs:19,offset:0,notes:2390,bombs:100,obstacles:502,nps:19.238,length:352,characteristic:"Standard",difficulty:"ExpertPlus",events:2478,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:124.235,paritySummary:{errors:149,warns:3,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f6dbd83b699872e2e42c2fc90337ef0ac2ab8f30.zip",coverURL:"https://cdn.beatsaver.com/f6dbd83b699872e2e42c2fc90337ef0ac2ab8f30.jpg",previewURL:"https://cdn.beatsaver.com/f6dbd83b699872e2e42c2fc90337ef0ac2ab8f30.mp3"}],createdAt:"2020-08-06T16:52:58.027Z",updatedAt:"2020-08-06T16:52:58.027Z",lastPublishedAt:"2020-08-06T16:52:58.027Z"},{id:"85b",name:"Take Me Home, Country Road - Fallout 76 Version",description:"Easy to beat, but a blast to play through. Enjoy!",uploader:{id:50560,name:"npcinnkeeper",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f8e7",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f8e7?d=retro",type:"SIMPLE"},metadata:{bpm:160,duration:178,songName:"Take Me Home, Country Roads",songSubName:"Fallout 76",songAuthorName:"NPC Innkeeper",levelAuthorName:"npcinnkeeper"},stats:{plays:0,downloads:12534,upvotes:5946,downvotes:185,score:.9358},uploaded:"2018-07-07T14:08:33Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9ed3b706b2306c00c2ad70a287c784277dbb5d74",key:"85b",state:"Published",createdAt:"2018-07-07T14:08:33Z",sageScore:4,diffs:[{njs:10,offset:0,notes:536,bombs:14,obstacles:13,nps:3.131,length:456.5,characteristic:"Standard",difficulty:"Hard",events:954,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:171.188,paritySummary:{errors:141,warns:29,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9ed3b706b2306c00c2ad70a287c784277dbb5d74.zip",coverURL:"https://cdn.beatsaver.com/9ed3b706b2306c00c2ad70a287c784277dbb5d74.jpg",previewURL:"https://cdn.beatsaver.com/9ed3b706b2306c00c2ad70a287c784277dbb5d74.mp3"}],createdAt:"2018-07-07T14:08:33Z",updatedAt:"2018-07-07T14:08:33Z",lastPublishedAt:"2018-07-07T14:08:33Z"},{id:"4d62",name:"Skrillex - Bangarang",description:"Feedback on Discord: nitronik.exe#7974\n\nNOTE: There are two expert+ difficulties and so there is no easy mode!\nanyways, hope you enjoy!\npreview: https://www.youtube.com/watch?v=p0Z6U8x9fb4",uploader:{id:4284201,name:"nitronikexe",uniqueSet:!0,hash:"5cff0b7798cc5a672c855d84",avatar:"https://cdn.beatsaver.com/avatar/428230049704181760.png",type:"DISCORD"},metadata:{bpm:110,duration:219,songName:"Bangarang",songSubName:"Skrillex",songAuthorName:"nitronik.exe",levelAuthorName:"nitronikexe"},stats:{plays:0,downloads:12246,upvotes:5033,downvotes:147,score:.9357},uploaded:"2019-05-17T11:28:44Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"137e76fcfb08e99695f481f7133cef173fd7fa8e",key:"4d62",state:"Published",createdAt:"2019-05-17T11:28:44Z",sageScore:8,diffs:[{njs:10,offset:0,notes:631,bombs:0,obstacles:6,nps:3.152,length:367,characteristic:"Standard",difficulty:"Easy",events:7633,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.182,paritySummary:{errors:129,warns:0,resets:0}},{njs:10,offset:0,notes:708,bombs:0,obstacles:14,nps:3.527,length:368,characteristic:"Standard",difficulty:"Normal",events:7633,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.727,paritySummary:{errors:26,warns:25,resets:0}},{njs:13,offset:0,notes:881,bombs:0,obstacles:14,nps:4.389,length:368,characteristic:"Standard",difficulty:"Hard",events:7633,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.727,paritySummary:{errors:3,warns:3,resets:0}},{njs:16,offset:0,notes:1032,bombs:108,obstacles:29,nps:5.141,length:368,characteristic:"Standard",difficulty:"Expert",events:7633,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.727,paritySummary:{errors:2,warns:0,resets:4}},{njs:17,offset:0,notes:1088,bombs:0,obstacles:26,nps:5.42,length:368,characteristic:"Standard",difficulty:"ExpertPlus",events:7633,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.727,paritySummary:{errors:54,warns:42,resets:0}}],downloadURL:"https://cdn.beatsaver.com/137e76fcfb08e99695f481f7133cef173fd7fa8e.zip",coverURL:"https://cdn.beatsaver.com/137e76fcfb08e99695f481f7133cef173fd7fa8e.jpg",previewURL:"https://cdn.beatsaver.com/137e76fcfb08e99695f481f7133cef173fd7fa8e.mp3"}],createdAt:"2019-05-17T11:28:44Z",updatedAt:"2019-05-17T11:28:44Z",lastPublishedAt:"2019-05-17T11:28:44Z"},{id:"97ac",name:"Mick Gordon - Unholy Crusade",description:"Rip and tear\r\n\r\n\r\nExtra super huge thank you to the following people for making this possible\r\nAeroluna- For making Noodle Extensions and updating Chroma\r\nSpooky Ghost- For making Beatwalls\r\nArti- For making the core mod that allowed Noodle Extensions and Chroma to support the new values\r\n\r\nAnd thank you for putting up with my shit during this :)\r\n\r\nVideo: https://www.youtube.com/watch?v=zhIIh3nccNQ",uploader:{id:4235138,name:"CyanSnow",uniqueSet:!0,hash:"5cff0b7698cc5a672c8543ac",avatar:"https://cdn.beatsaver.com/avatar/154341137694326784.png",type:"DISCORD"},metadata:{bpm:150,duration:167,songName:"Unholy Crusade",songSubName:"",songAuthorName:"Mick Gordon",levelAuthorName:"CyanSnow"},stats:{plays:0,downloads:6492,upvotes:2903,downvotes:63,score:.9356},uploaded:"2020-04-05T15:44:13.116Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"abc41236f324093fbf711abce8c18c2a47debe20",key:"97ac",state:"Published",createdAt:"2020-04-05T15:44:13.116Z",sageScore:4,diffs:[{njs:19,offset:-.3,notes:650,bombs:0,obstacles:21376,nps:4.331,length:375.23,characteristic:"Lawless",difficulty:"ExpertPlus",events:3853,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:150.092,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/abc41236f324093fbf711abce8c18c2a47debe20.zip",coverURL:"https://cdn.beatsaver.com/abc41236f324093fbf711abce8c18c2a47debe20.jpg",previewURL:"https://cdn.beatsaver.com/abc41236f324093fbf711abce8c18c2a47debe20.mp3"}],createdAt:"2020-04-05T15:44:13.116Z",updatedAt:"2020-04-05T15:44:13.116Z",lastPublishedAt:"2020-04-05T15:44:13.116Z"},{id:"462",name:"The Nights - Avicii",description:"The Nights By Avicii.\r\nThis is my first beatmap, feedback would be greatly appreciated :)",uploader:{id:47059,name:"rocket",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f1c0",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f1c0?d=retro",type:"SIMPLE"},metadata:{bpm:126,duration:173,songName:"The Nights",songSubName:"",songAuthorName:"Avicii",levelAuthorName:"rocket"},stats:{plays:0,downloads:22239,upvotes:11170,downvotes:426,score:.9356},uploaded:"2018-06-08T23:20:50Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"2c002d2874e029db43f3c7cf9bb271ae0d769b74",key:"462",state:"Published",createdAt:"2018-06-08T23:20:50Z",sageScore:5,diffs:[{njs:10,offset:0,notes:200,bombs:4,obstacles:14,nps:1.207,length:348,characteristic:"Standard",difficulty:"Normal",events:704,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:165.714,paritySummary:{errors:45,warns:19,resets:0},stars:.92},{njs:10,offset:0,notes:402,bombs:6,obstacles:14,nps:2.426,length:348,characteristic:"Standard",difficulty:"Hard",events:704,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:165.714,paritySummary:{errors:88,warns:44,resets:0}},{njs:10,offset:0,notes:702,bombs:10,obstacles:14,nps:4.236,length:348,characteristic:"Standard",difficulty:"Expert",events:705,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:165.714,paritySummary:{errors:119,warns:72,resets:0}}],downloadURL:"https://cdn.beatsaver.com/2c002d2874e029db43f3c7cf9bb271ae0d769b74.zip",coverURL:"https://cdn.beatsaver.com/2c002d2874e029db43f3c7cf9bb271ae0d769b74.jpg",previewURL:"https://cdn.beatsaver.com/2c002d2874e029db43f3c7cf9bb271ae0d769b74.mp3"}],createdAt:"2018-06-08T23:20:50Z",updatedAt:"2018-06-08T23:20:50Z",lastPublishedAt:"2018-06-08T23:20:50Z"},{id:"9c54",name:"Yunomi - 惑星ラビット (feat. TORIENA)/Wakusei Rabbit[Wall Map]",description:'seventh map! [Noodle Extensions & Chroma] map!\nYunomi - Wakusei Rabbit (feat. TORIENA) Planet Rabbit\n \n!! This map requires!!\nNoodle Extensions , Chroma\n\nNoodle Extensions と Chromaが古いバージョンの時代に作ったので、最新バージョンだと壁のY軸(高さ)が破綻します。。\n昔と違い、RequirementsにMapping Extensionsが記載されていると干渉してしまうようなので、\n\n壁を正常に表示するには、以下の修正をお願い致します。\n1. info.datをテキストエディタ等で開く。\n2.「,"Mapping Extensions"」を検索し削除(3か所) コンマも含めますご注意ください。\n\n--(English)\nUnlike in the past, it seems to interfere with the Mapping Extensions listed in Requirements.\nIn order to display the wall properly, please make the following modifications.\n1. Open info.dat with a text editor.\n2. Search for [ , "Mapping Extensions"] and delete it (in three places), including commas.\n--\n\nMy Twitter : https://twitter.com/kamy_0811\n\n[Song info]\nSong name : Wakusei Rabbit\nAlbum : Oedo Controller\nMusic & Lyrics : Yunomi \nVocal : TORIENA\nArtwork : Kiato \nSoundCloud : https://soundcloud.com/tkrism/wakuseirabbit\nPlay movie : https://youtu.be/6WXJqlHQ4To',uploader:{id:4285148,name:"kamy",uniqueSet:!0,hash:"5e42a3f4d523400006369ea0",avatar:"https://cdn.beatsaver.com/avatar/415431418663927810.png",type:"DISCORD"},metadata:{bpm:174,duration:204,songName:"Wakusei_Rabbit",songSubName:"feat. TORIENA",songAuthorName:"Yunomi",levelAuthorName:"kamy"},stats:{plays:0,downloads:6028,upvotes:1794,downvotes:25,score:.9355},uploaded:"2020-04-18T14:46:30.487Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"3b680d87cbba69bda48081e97dc925464116f41f",key:"9c54",state:"Published",createdAt:"2020-04-18T14:46:30.487Z",sageScore:7,diffs:[{njs:14,offset:0,notes:0,bombs:0,obstacles:27053,nps:0,length:0,characteristic:"Standard",difficulty:"Easy",events:2845,chroma:!0,me:!0,ne:!0,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:14,offset:0,notes:762,bombs:0,obstacles:27053,nps:3.867,length:571.5,characteristic:"Standard",difficulty:"Hard",events:2848,chroma:!0,me:!0,ne:!0,cinema:!1,seconds:197.069,paritySummary:{errors:0,warns:2,resets:0}},{njs:17,offset:0,notes:1246,bombs:0,obstacles:27053,nps:6.323,length:571.5,characteristic:"Standard",difficulty:"ExpertPlus",events:2845,chroma:!0,me:!0,ne:!0,cinema:!1,seconds:197.069,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/3b680d87cbba69bda48081e97dc925464116f41f.zip",coverURL:"https://cdn.beatsaver.com/3b680d87cbba69bda48081e97dc925464116f41f.jpg",previewURL:"https://cdn.beatsaver.com/3b680d87cbba69bda48081e97dc925464116f41f.mp3"}],createdAt:"2020-04-18T14:46:30.487Z",updatedAt:"2020-04-18T14:46:30.487Z",lastPublishedAt:"2020-04-18T14:46:30.487Z"},{id:"1f42",name:"Field of Hopes and Dreams (Deltarune) - Toby Fox",description:"Song by Toby Fox\r\nVideo: https://youtu.be/2V7IFAKTIp4\r\n\r\n Expert, Hard, Normal\r\nBPM:120\r\nObstacles: 0\r\n\r\n-Expert-\r\nNotes: 513\r\nNotes per second: 3.12\r\nJump Speed: 13\r\n\r\n-Hard-\r\nNotes: 325\r\nNotes per second: 1.97\r\nJump Speed: 11\r\n\r\n-Expert-\r\nNotes: 212\r\nNotes per second: 1.29\r\nJump Speed: 10\r\n\r\nShoutout to testers:\r\nRedmagi\r\nManDynasty\r\nAaltopahWi\r\nAggrogahu",uploader:{id:39365,name:"todokete",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ee70",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee70?d=retro",type:"SIMPLE"},metadata:{bpm:125,duration:164,songName:"Field of Hopes and Dreams",songSubName:"Toby Fox",songAuthorName:"Todokete",levelAuthorName:"todokete"},stats:{plays:0,downloads:6294,upvotes:3219,downvotes:76,score:.9353},uploaded:"2018-11-09T19:54:30Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c62d53bd22e3aa7d6a2ef04472ee7a22ceed74f6",key:"1f42",state:"Published",createdAt:"2018-11-09T19:54:30Z",sageScore:5,diffs:[{njs:10,offset:0,notes:212,bombs:0,obstacles:0,nps:1.33,length:332,characteristic:"Standard",difficulty:"Normal",events:888,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:159.36,paritySummary:{errors:44,warns:21,resets:0}},{njs:11,offset:0,notes:325,bombs:0,obstacles:0,nps:2.039,length:332,characteristic:"Standard",difficulty:"Hard",events:888,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:159.36,paritySummary:{errors:57,warns:15,resets:0}},{njs:13,offset:0,notes:513,bombs:0,obstacles:0,nps:3.219,length:332,characteristic:"Standard",difficulty:"Expert",events:888,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:159.36,paritySummary:{errors:68,warns:69,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c62d53bd22e3aa7d6a2ef04472ee7a22ceed74f6.zip",coverURL:"https://cdn.beatsaver.com/c62d53bd22e3aa7d6a2ef04472ee7a22ceed74f6.jpg",previewURL:"https://cdn.beatsaver.com/c62d53bd22e3aa7d6a2ef04472ee7a22ceed74f6.mp3"}],createdAt:"2018-11-09T19:54:30Z",updatedAt:"2018-11-09T19:54:30Z",lastPublishedAt:"2018-11-09T19:54:30Z"},{id:"1970",name:"Still Into You - Paramore",description:"Expert Playthrough : https://youtu.be/CUBqLk35vbE",uploader:{id:13320,name:"novashaft",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ee55",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee55?d=retro",type:"SIMPLE"},metadata:{bpm:136,duration:216,songName:"Still Into You",songSubName:"Paramore",songAuthorName:"NovaShaft",levelAuthorName:"novashaft"},stats:{plays:0,downloads:8223,upvotes:2078,downvotes:35,score:.9352},uploaded:"2018-10-09T15:34:41Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"fdd3fd8a25a79c114184cef10633fe6a57c7eb4c",key:"1970",state:"Published",createdAt:"2018-10-09T15:34:41Z",sageScore:4,diffs:[{njs:10,offset:0,notes:713,bombs:0,obstacles:21,nps:3.536,length:457,characteristic:"Standard",difficulty:"Hard",events:738,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:201.618,paritySummary:{errors:25,warns:25,resets:0}},{njs:11,offset:0,notes:848,bombs:0,obstacles:21,nps:4.206,length:457,characteristic:"Standard",difficulty:"Expert",events:738,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:201.618,paritySummary:{errors:50,warns:72,resets:0}}],downloadURL:"https://cdn.beatsaver.com/fdd3fd8a25a79c114184cef10633fe6a57c7eb4c.zip",coverURL:"https://cdn.beatsaver.com/fdd3fd8a25a79c114184cef10633fe6a57c7eb4c.jpg",previewURL:"https://cdn.beatsaver.com/fdd3fd8a25a79c114184cef10633fe6a57c7eb4c.mp3"}],createdAt:"2018-10-09T15:34:41Z",updatedAt:"2018-10-09T15:34:41Z",lastPublishedAt:"2018-10-09T15:34:41Z"},{id:"8790",name:"Satellite - Rise Against",description:'"Satellite" is a song by American rock band Rise Against, featured on their sixth studio album Endgame (2011). \n\nWritten by lead vocalist Tim McIlrath, "Satellite" expresses the idea that the band stood by their social and political beliefs, and that they would not conform to mainstream media.',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:136,duration:237,songName:"Satellite",songSubName:"",songAuthorName:"Rise Against",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:4055,upvotes:1641,downvotes:21,score:.9351},uploaded:"2020-02-16T09:32:52.155Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"2a3c743f85bd235cd9d658fe728f9db79f3b9dc5",key:"8790",state:"Published",createdAt:"2020-02-16T09:32:52.155Z",sageScore:7,diffs:[{njs:15,offset:0,notes:982,bombs:26,obstacles:10,nps:4.306,length:516.975,characteristic:"Standard",difficulty:"ExpertPlus",events:7595,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:228.077,paritySummary:{errors:9,warns:6,resets:1}}],downloadURL:"https://cdn.beatsaver.com/2a3c743f85bd235cd9d658fe728f9db79f3b9dc5.zip",coverURL:"https://cdn.beatsaver.com/2a3c743f85bd235cd9d658fe728f9db79f3b9dc5.jpg",previewURL:"https://cdn.beatsaver.com/2a3c743f85bd235cd9d658fe728f9db79f3b9dc5.mp3"}],createdAt:"2020-02-16T09:32:52.155Z",updatedAt:"2020-02-16T09:32:52.155Z",lastPublishedAt:"2020-02-16T09:32:52.155Z"},{id:"689b",name:"DuckTales Opening ",description:"Opening by Felicia Barton\nJust a simple but fun map of this song from childhood!\n:D \nFC: https://www.youtube.com/watch?v=QCOHyHKy6SI&feature=youtu.be",uploader:{id:35241,name:"4strofan",uniqueSet:!0,hash:"5cff0b7598cc5a672c851d18",avatar:"https://www.gravatar.com/avatar/5cff0b7598cc5a672c851d18?d=retro",type:"SIMPLE"},metadata:{bpm:91.51,duration:121,songName:"DuckTales",songSubName:"Opening Song",songAuthorName:"Felicia Barton",levelAuthorName:"Strofan"},stats:{plays:0,downloads:4253,upvotes:2276,downvotes:42,score:.9351},uploaded:"2019-10-08T13:14:56.729Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"2e687b4e357c8fb14d1cba11b3d4029070ed51f7",key:"689b",state:"Published",createdAt:"2019-10-08T13:14:56.729Z",sageScore:5,diffs:[{njs:14,offset:0,notes:460,bombs:0,obstacles:0,nps:4.091,length:171.5,characteristic:"Standard",difficulty:"Expert",events:1106,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:112.447,paritySummary:{errors:15,warns:6,resets:0}}],downloadURL:"https://cdn.beatsaver.com/2e687b4e357c8fb14d1cba11b3d4029070ed51f7.zip",coverURL:"https://cdn.beatsaver.com/2e687b4e357c8fb14d1cba11b3d4029070ed51f7.jpg",previewURL:"https://cdn.beatsaver.com/2e687b4e357c8fb14d1cba11b3d4029070ed51f7.mp3"}],createdAt:"2019-10-08T13:14:56.729Z",updatedAt:"2019-10-08T13:14:56.729Z",lastPublishedAt:"2019-10-08T13:14:56.729Z"},{id:"67ba",name:"Air - Mr.FijiWiji Remix | AMV by SliceOfLife",description:'Videolink:\nhttps://youtu.be/V-KFAdSjeKo\n\n====================================================\n\nIf you are making a video to the level I would be happy if my video is linked in the description, but is not a must.\n\n====================================================\n\nIn order to play the level properly, the following plugins are required !!!\n== MappingExtension is required! ==\n== ChromaLite is recommended ==\n== SongCore is recommended ==\n\nAll plugins can be downloaded by ModAssistant\nhttps://github.com/Assistant/ModAssistant\n\nChromaLite and SongCore are only for the aesthetics! This includes light events and colors. If you don\'t want to use the preset colors, set the "Allow Color Override" option under "SongCore" to off.\n\n====================================================\n\nDifficulty: Expert\nNotes: 146\nWalls: 4135\nBombs: 900\n\n====================================================\n\nThis level CAN cause performance issues to your PC, especially on lower end VR PCs. ',uploader:{id:37230,name:"gevarred",uniqueSet:!0,hash:"5d971075e6a6760006266826",avatar:"https://www.gravatar.com/avatar/5d971075e6a6760006266826?d=retro",type:"SIMPLE"},metadata:{bpm:126,duration:172,songName:"Air",songSubName:"Shortened by SliceOfLife",songAuthorName:"Mr. FijiWiji Remix",levelAuthorName:"Gevarred"},stats:{plays:0,downloads:4245,upvotes:4022,downvotes:109,score:.935},uploaded:"2019-10-04T10:05:15.873Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"65c0c3e82499281f2c9b1d09d7eb3e60bcacd57d",key:"67ba",state:"Published",createdAt:"2019-10-04T10:05:15.873Z",sageScore:5,diffs:[{njs:8,offset:0,notes:146,bombs:900,obstacles:4135,nps:1.065,length:287.781,characteristic:"Standard",difficulty:"ExpertPlus",events:1015,chroma:!0,me:!0,ne:!1,cinema:!1,seconds:137.039,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/65c0c3e82499281f2c9b1d09d7eb3e60bcacd57d.zip",coverURL:"https://cdn.beatsaver.com/65c0c3e82499281f2c9b1d09d7eb3e60bcacd57d.jpg",previewURL:"https://cdn.beatsaver.com/65c0c3e82499281f2c9b1d09d7eb3e60bcacd57d.mp3"}],createdAt:"2019-10-04T10:05:15.873Z",updatedAt:"2019-10-04T10:05:15.873Z",lastPublishedAt:"2019-10-04T10:05:15.873Z"},{id:"38eb",name:"The Rockafeller Skank - Fatboy Slim - BT90",description:'This map is part of a 90s songpack. Search "BT90" to find all the songs in the songpack.\r\nMap is created by Heisenberg_IRL. Check out https://www.twitch.tv/heisenberg_irl',uploader:{id:27983,name:"heisenbergirl",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ec30",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ec30?d=retro",type:"SIMPLE"},metadata:{bpm:153,duration:236,songName:"The Rockafeller Skank",songSubName:"Fatboy Slim [BT90]",songAuthorName:"Heisenberg",levelAuthorName:"heisenbergirl"},stats:{plays:0,downloads:5545,upvotes:2421,downvotes:48,score:.9348},uploaded:"2019-02-23T13:17:40Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5ad1cb4a7317ddc5d54d497c8d35eda5dd9d44b9",key:"38eb",state:"Published",createdAt:"2019-02-23T13:17:40Z",sageScore:6,diffs:[{njs:12,offset:0,notes:775,bombs:884,obstacles:43,nps:3.384,length:584,characteristic:"Standard",difficulty:"Expert",events:5820,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:229.02,paritySummary:{errors:43,warns:44,resets:15}},{njs:18,offset:0,notes:1014,bombs:907,obstacles:41,nps:4.371,length:591.5,characteristic:"Standard",difficulty:"ExpertPlus",events:5820,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.961,paritySummary:{errors:48,warns:98,resets:18}}],downloadURL:"https://cdn.beatsaver.com/5ad1cb4a7317ddc5d54d497c8d35eda5dd9d44b9.zip",coverURL:"https://cdn.beatsaver.com/5ad1cb4a7317ddc5d54d497c8d35eda5dd9d44b9.jpg",previewURL:"https://cdn.beatsaver.com/5ad1cb4a7317ddc5d54d497c8d35eda5dd9d44b9.mp3"}],createdAt:"2019-02-23T13:17:40Z",updatedAt:"2019-02-23T13:17:40Z",lastPublishedAt:"2019-02-23T13:17:40Z"},{id:"445f",name:"Kazuma Kiryu - Baka Mitai [Yakuza OST]",description:"Dame da ne \r\nDame yo\r\nDame na no yo ( ͒˃̩̩⌂˂̩̩ ͒)\r\n\r\nPlay Yakuza, especially the karaoke mini-games\r\nFun fact: it is impossible to listen to this song without crying (100% guaranteed) \r\n\r\n74 BPM\r\nExpert\r\n\r\n:)\r\n\r\ncontact me on discord\r\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:74,duration:119,songName:"Baka Mitai",songSubName:"Kazuma Kiryu",songAuthorName:"ETAN",levelAuthorName:"ETAN"},stats:{plays:0,downloads:5251,upvotes:1681,downvotes:23,score:.9347},uploaded:"2019-04-08T17:08:08Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c39c719a17a081d0bd0806052bd39ba4ee39b6b0",key:"445f",state:"Published",createdAt:"2019-04-08T17:08:08Z",sageScore:4,diffs:[{njs:13.5,offset:0,notes:272,bombs:0,obstacles:21,nps:2.546,length:263.5,characteristic:"Standard",difficulty:"Expert",events:553,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:213.649,paritySummary:{errors:9,warns:11,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c39c719a17a081d0bd0806052bd39ba4ee39b6b0.zip",coverURL:"https://cdn.beatsaver.com/c39c719a17a081d0bd0806052bd39ba4ee39b6b0.jpg",previewURL:"https://cdn.beatsaver.com/c39c719a17a081d0bd0806052bd39ba4ee39b6b0.mp3"}],createdAt:"2019-04-08T17:08:08Z",updatedAt:"2019-04-08T17:08:08Z",lastPublishedAt:"2019-04-08T17:08:08Z"},{id:"bdc7",name:"That's Life - Frank Sinatra",description:"Here is an honest-to-goodness human-mapped version of Frank Sinatra's 1966 hit, That's Life. This song is way too good to just have a crappy beat sage map.\n\nNormal and Hard Standard levels, and Expert Standard, 90, and 360 levels. Note that the expert levels are all essentially the same, just with varying degrees of wobbles.\n\nThanks to Maybeemae for the playtests!\n\nhttps://youtu.be/QXjj2-fgK8U",uploader:{id:78593,name:"techbutterfly",uniqueSet:!0,hash:"5cff0b7798cc5a672c8566f7",avatar:"https://cdn.beatsaver.com/avatar/527111497617506304.png",type:"DISCORD"},metadata:{bpm:77,duration:186,songName:"That's Life",songSubName:"",songAuthorName:"Frank Sinatra",levelAuthorName:"TechButterfly"},stats:{plays:0,downloads:4965,upvotes:1172,downvotes:8,score:.9346},uploaded:"2020-07-11T22:35:42.033Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7cca8c1afecd782cfd74f158c312201b780043d8",key:"bdc7",state:"Published",createdAt:"2020-07-11T22:35:42.033Z",sageScore:4,diffs:[{njs:10,offset:-.3,notes:321,bombs:0,obstacles:6,nps:1.768,length:233,characteristic:"Standard",difficulty:"Normal",events:1086,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.558,paritySummary:{errors:30,warns:41,resets:0}},{njs:12,offset:.3,notes:418,bombs:0,obstacles:8,nps:2.302,length:233,characteristic:"Standard",difficulty:"Hard",events:1086,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.558,paritySummary:{errors:24,warns:38,resets:0}},{njs:13,offset:.1,notes:492,bombs:0,obstacles:8,nps:2.71,length:233,characteristic:"Standard",difficulty:"Expert",events:1086,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.558,paritySummary:{errors:24,warns:26,resets:0}},{njs:13,offset:.3,notes:489,bombs:0,obstacles:8,nps:2.693,length:233,characteristic:"90Degree",difficulty:"Expert",events:1192,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.558,paritySummary:{errors:25,warns:27,resets:0}},{njs:13,offset:.3,notes:489,bombs:0,obstacles:8,nps:2.693,length:233,characteristic:"360Degree",difficulty:"Expert",events:1166,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.558,paritySummary:{errors:25,warns:26,resets:0}}],downloadURL:"https://cdn.beatsaver.com/7cca8c1afecd782cfd74f158c312201b780043d8.zip",coverURL:"https://cdn.beatsaver.com/7cca8c1afecd782cfd74f158c312201b780043d8.jpg",previewURL:"https://cdn.beatsaver.com/7cca8c1afecd782cfd74f158c312201b780043d8.mp3"}],createdAt:"2020-07-11T22:35:42.033Z",updatedAt:"2020-07-11T22:35:42.033Z",lastPublishedAt:"2020-07-11T22:35:42.033Z"},{id:"194c",name:"Better When I'm Dancin' - Meghan Trainor",description:'"We can do this together... I bet you feel better when you\'re dancing, yeah, yeah..."\r\nDifficulties: Expert, Hard, Normal',uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:128,duration:178,songName:"Better When I'm Dancin'",songSubName:"Meghan Trainor",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:5411,upvotes:1790,downvotes:27,score:.9345},uploaded:"2018-10-08T12:10:29Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9bd5e0efe697a38fe0da28f252a8bfb870da630a",key:"194c",state:"Published",createdAt:"2018-10-08T12:10:29Z",sageScore:5,diffs:[{njs:10,offset:0,notes:271,bombs:0,obstacles:16,nps:1.571,length:368,characteristic:"Standard",difficulty:"Normal",events:940,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:172.5,paritySummary:{errors:31,warns:26,resets:0}},{njs:10,offset:0,notes:474,bombs:0,obstacles:16,nps:2.748,length:368,characteristic:"Standard",difficulty:"Hard",events:940,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:172.5,paritySummary:{errors:87,warns:57,resets:0}},{njs:10,offset:0,notes:643,bombs:0,obstacles:16,nps:3.733,length:367.5,characteristic:"Standard",difficulty:"Expert",events:940,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:172.266,paritySummary:{errors:82,warns:71,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9bd5e0efe697a38fe0da28f252a8bfb870da630a.zip",coverURL:"https://cdn.beatsaver.com/9bd5e0efe697a38fe0da28f252a8bfb870da630a.jpg",previewURL:"https://cdn.beatsaver.com/9bd5e0efe697a38fe0da28f252a8bfb870da630a.mp3"}],createdAt:"2018-10-08T12:10:29Z",updatedAt:"2018-10-08T12:10:29Z",lastPublishedAt:"2018-10-08T12:10:29Z"},{id:"a908",name:"[TheFatRat Pack] Unity - TheFatRat",description:'Here it is! The unofficial "TheFatRat" Music Pack in Beat Saber - with all beatmaps being singlehandedly made by me!\n\nAll songs included in TheFatRat Music Pack:\nMonody (ft. Laura Brehm) \nUnity \nWindfall \nXenogenesis \nTime Lapse \n\nGet the full song pack here: https://bsaber.com/thefatrat-music-pack/\n(Or you should just be able to find all the other ones on my beatsaver profile as well. Heres a link to my profile: https://beatsaver.com/uploader/5d47d586c5301900060b2f6c)\n\nSongcore mod is recommended (for custom colours)\nPlays best on Origins Environment\n\nUnity Stats:\nExpert+ - 1013 Notes | 4.74 NPS\nExpert - 869 Notes | 4.07 NPS\nHard - 608 Notes | 2.85 NPS\nNormal - 373 Notes | 1.75 NPS\nEasy - 264 Notes | 1.24 NPS\n\nRoughly 8-9 Hours of work\nGameplay: https://youtu.be/8lIoHcrm3wQ\n\nObviously - A huge thanks to TheFatRat himself, for not only producing the songs in the first place (and allowing free access to use them for big and small content creators), but also being a huge inspiration to lots of artists out there and for making music that everyone can jam out to! We love you, TheFatRat!',uploader:{id:4284197,name:"timeweaver",uniqueSet:!0,hash:"5d47d586c5301900060b2f6c",avatar:"https://cdn.beatsaver.com/avatar/607399708121366529.png",type:"DISCORD"},metadata:{bpm:105,duration:213,songName:"Unity",songSubName:"",songAuthorName:"TheFatRat",levelAuthorName:"Timeweaver"},stats:{plays:0,downloads:11605,upvotes:3186,downvotes:78,score:.9344},uploaded:"2020-05-22T13:28:31.075Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"296946437e2194823129d88e7c457202e4c7f281",key:"a908",state:"Published",createdAt:"2020-05-22T13:28:31.075Z",sageScore:5,diffs:[{njs:10,offset:1,notes:264,bombs:0,obstacles:17,nps:1.262,length:366,characteristic:"Standard",difficulty:"Easy",events:3460,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.143,paritySummary:{errors:48,warns:26,resets:0}},{njs:10,offset:1,notes:373,bombs:0,obstacles:16,nps:1.783,length:366,characteristic:"Standard",difficulty:"Normal",events:3460,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.143,paritySummary:{errors:55,warns:24,resets:0}},{njs:12.5,offset:0,notes:608,bombs:0,obstacles:19,nps:2.907,length:366,characteristic:"Standard",difficulty:"Hard",events:3460,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.143,paritySummary:{errors:22,warns:8,resets:0}},{njs:15,offset:-.25,notes:869,bombs:0,obstacles:17,nps:4.155,length:366,characteristic:"Standard",difficulty:"Expert",events:3460,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.143,paritySummary:{errors:3,warns:0,resets:0}},{njs:16,offset:.5,notes:1013,bombs:0,obstacles:24,nps:4.844,length:366,characteristic:"Standard",difficulty:"ExpertPlus",events:3460,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.143,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/296946437e2194823129d88e7c457202e4c7f281.zip",coverURL:"https://cdn.beatsaver.com/296946437e2194823129d88e7c457202e4c7f281.jpg",previewURL:"https://cdn.beatsaver.com/296946437e2194823129d88e7c457202e4c7f281.mp3"}],createdAt:"2020-05-22T13:28:31.075Z",updatedAt:"2020-05-22T13:28:31.075Z",lastPublishedAt:"2020-05-22T13:28:31.075Z"},{id:"a465",name:"The Chain - Fleetwood Mac",description:"Today (May 9) is my mapperversary! I released my first map - Comfort Eagle - a year ago today. Since then, I've released another 50 maps - almost one a week for a year! And of course, one of those is Little Shop, which is really 13 songs in one monster map. Help me celebrate my mapperversary by playing this map of Fleetwood Mac's 1977 classic, The Chain. Normal and Expert Standard, and Expert Plus 360 levels.\n\nThanks Beat Saber community for a really fun year of mapping and having fun with y’all! Thanks to the Beat Saber Modding Group for helping me get started in the beginning - especially CyanSnow and HelenCarnate - you guys were a great help to me at the beginning, despite being new mappers yourselves! Thanks to the Ramen Noodle crew for letting this old guy hang out and pretend he’s one of the cool mappers. Thanks to Darkuni and Maybeemae for being awesome friends! Extra special thanks to my mapping buddy, MajorPickle – you da man! Here’s to many more years to come!\n\nMy initial post for this map mentioned that any videos would be insta-blocked on youtube, because mine was. Since then, several people have posted videos of it without problem, so apparently it's okay.\n\nhttps://bittube.tv/post/0d3e4790-7a77-498b-9223-3d70c3ac9234",uploader:{id:78593,name:"techbutterfly",uniqueSet:!0,hash:"5cff0b7798cc5a672c8566f7",avatar:"https://cdn.beatsaver.com/avatar/527111497617506304.png",type:"DISCORD"},metadata:{bpm:152,duration:252,songName:"The Chain",songSubName:"",songAuthorName:"Fleetwood Mac",levelAuthorName:"TechButterfly"},stats:{plays:0,downloads:7216,upvotes:1873,downvotes:30,score:.9344},uploaded:"2020-05-09T11:53:28.520Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"4db96dd119b51d7f7124b6055db2ee1131452667",key:"a465",state:"Published",createdAt:"2020-05-09T11:53:28.520Z",sageScore:3,diffs:[{njs:10,offset:0,notes:469,bombs:0,obstacles:135,nps:1.883,length:631,characteristic:"Standard",difficulty:"Normal",events:555,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:249.079,paritySummary:{errors:57,warns:51,resets:0}},{njs:13,offset:.3,notes:851,bombs:68,obstacles:113,nps:3.417,length:631,characteristic:"Standard",difficulty:"Expert",events:554,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:249.079,paritySummary:{errors:36,warns:33,resets:9}},{njs:13,offset:.5,notes:851,bombs:63,obstacles:116,nps:3.417,length:631,characteristic:"360Degree",difficulty:"ExpertPlus",events:766,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:249.079,paritySummary:{errors:36,warns:33,resets:9}}],downloadURL:"https://cdn.beatsaver.com/4db96dd119b51d7f7124b6055db2ee1131452667.zip",coverURL:"https://cdn.beatsaver.com/4db96dd119b51d7f7124b6055db2ee1131452667.jpg",previewURL:"https://cdn.beatsaver.com/4db96dd119b51d7f7124b6055db2ee1131452667.mp3"}],createdAt:"2020-05-09T11:53:28.520Z",updatedAt:"2020-05-09T11:53:28.520Z",lastPublishedAt:"2020-05-09T11:53:28.520Z"},{id:"6100",name:"Keina Suda - veil [Fire Force Ending]",description:"Fire Force is rad\nBoth the op and ed are also rad\n\nBPM 150 | Length 1:30\nExpert+\nExpert\nHard\nNormal\n\nplease enjoy\n\nDM any feedback on Discord\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:150,duration:91,songName:"veil",songSubName:"",songAuthorName:"Keina Suda",levelAuthorName:"ETAN"},stats:{plays:0,downloads:5151,upvotes:1646,downvotes:23,score:.9341},uploaded:"2019-09-03T00:05:16.685Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f8bd8b3b1fecc3834a6ea88da39a055c98013823",key:"6100",state:"Published",createdAt:"2019-09-03T00:05:16.685Z",sageScore:3,diffs:[{njs:11,offset:0,notes:155,bombs:0,obstacles:6,nps:1.872,length:207,characteristic:"Standard",difficulty:"Normal",events:2814,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:82.8,paritySummary:{errors:0,warns:0,resets:0}},{njs:12,offset:0,notes:203,bombs:0,obstacles:6,nps:2.452,length:207,characteristic:"Standard",difficulty:"Hard",events:2814,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:82.8,paritySummary:{errors:0,warns:0,resets:0}},{njs:14,offset:0,notes:280,bombs:0,obstacles:6,nps:3.373,length:207.5,characteristic:"Standard",difficulty:"Expert",events:2814,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:83,paritySummary:{errors:7,warns:6,resets:0}},{njs:18,offset:0,notes:366,bombs:5,obstacles:6,nps:4.41,length:207.5,characteristic:"Standard",difficulty:"ExpertPlus",events:2822,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:83,paritySummary:{errors:8,warns:9,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f8bd8b3b1fecc3834a6ea88da39a055c98013823.zip",coverURL:"https://cdn.beatsaver.com/f8bd8b3b1fecc3834a6ea88da39a055c98013823.jpg",previewURL:"https://cdn.beatsaver.com/f8bd8b3b1fecc3834a6ea88da39a055c98013823.mp3"}],createdAt:"2019-09-03T00:05:16.685Z",updatedAt:"2019-09-03T00:05:16.685Z",lastPublishedAt:"2019-09-03T00:05:16.685Z"},{id:"b",name:"Imagine Dragons - Believer",description:"Currently expert only. Events included.",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:125,duration:205,songName:"Believer",songSubName:"Imagine Dragons",songAuthorName:"Rustic",levelAuthorName:"rustic"},stats:{plays:0,downloads:19970,upvotes:11803,downvotes:476,score:.9341},uploaded:"2018-05-08T18:56:36Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"19f2879d11a91b51a5c090d63471c3e8d9b7aee3",key:"b",state:"Published",createdAt:"2018-05-08T18:56:36Z",sageScore:5,diffs:[{njs:10,offset:0,notes:546,bombs:0,obstacles:10,nps:2.754,length:413,characteristic:"Standard",difficulty:"Expert",events:551,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.24,paritySummary:{errors:130,warns:49,resets:0},stars:1.44}],downloadURL:"https://cdn.beatsaver.com/19f2879d11a91b51a5c090d63471c3e8d9b7aee3.zip",coverURL:"https://cdn.beatsaver.com/19f2879d11a91b51a5c090d63471c3e8d9b7aee3.jpg",previewURL:"https://cdn.beatsaver.com/19f2879d11a91b51a5c090d63471c3e8d9b7aee3.mp3"}],createdAt:"2018-05-08T18:56:36Z",updatedAt:"2018-05-08T18:56:36Z",lastPublishedAt:"2018-05-08T18:56:36Z"},{id:"8115",name:"Los! Los! Los! (German Ver.) [Youjo Senki Ending] - Selphius",description:"German cover of Los! Los! Los! performed by Selphius. It was originally performed by Aoi Yuuki, the voice actress of Tanya Degurechaff. \n\nHearing this song in German just feels so right! The original song was also has German lyrics but it was sung by a Japanese so it really didn't fit.",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:119,duration:215,songName:"Los! Los! Los! (German Ver.)",songSubName:"",songAuthorName:"Selphius",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:10730,upvotes:1513,downvotes:19,score:.934},uploaded:"2020-01-25T01:56:05.274Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"cdfd561127d3a71c02af0996c215242fcb789f79",key:"8115",state:"Published",createdAt:"2020-01-25T01:56:05.274Z",sageScore:5,diffs:[{njs:12,offset:0,notes:723,bombs:26,obstacles:13,nps:3.468,length:413.5,characteristic:"Standard",difficulty:"Hard",events:4753,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:208.487,paritySummary:{errors:27,warns:29,resets:4}},{njs:16,offset:0,notes:974,bombs:16,obstacles:25,nps:4.672,length:413.5,characteristic:"Standard",difficulty:"Expert",events:4753,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:208.487,paritySummary:{errors:21,warns:12,resets:4}},{njs:20,offset:.5,notes:1098,bombs:16,obstacles:14,nps:5.267,length:413.5,characteristic:"Standard",difficulty:"ExpertPlus",events:4753,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:208.487,paritySummary:{errors:20,warns:13,resets:2}}],downloadURL:"https://cdn.beatsaver.com/cdfd561127d3a71c02af0996c215242fcb789f79.zip",coverURL:"https://cdn.beatsaver.com/cdfd561127d3a71c02af0996c215242fcb789f79.jpg",previewURL:"https://cdn.beatsaver.com/cdfd561127d3a71c02af0996c215242fcb789f79.mp3"}],createdAt:"2020-01-25T01:56:05.274Z",updatedAt:"2020-01-25T01:56:05.274Z",lastPublishedAt:"2020-01-25T01:56:05.274Z"},{id:"31fa",name:"Joji - SLOW DANCING IN THE DARK",description:"89 BPM / 3:31 Runtime\r\nEasy / 223 Notes\r\nNormal / 327 Notes\r\nHard / 441 Notes\r\nExpert / 631 Notes\r\nExpert+ / ???\r\n\r\nIf this lags your computer, I'm sorry! I tried the best I could to add the walls while also optimizing for performance. Try playing with No Obstacles, that will fix the issue. Should be fine for most people.\r\n\r\nGameplay: https://youtu.be/Pweso54qcwk",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:89,duration:212,songName:"SLOW DANCING IN THE DARK",songSubName:"Joji",songAuthorName:"Skyler Wallace",levelAuthorName:"skylerwallace"},stats:{plays:0,downloads:7575,upvotes:2691,downvotes:61,score:.9338},uploaded:"2019-01-28T22:17:59Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c983fa1786f03be4965b2319daa86f74ce0be831",key:"31fa",state:"Published",createdAt:"2019-01-28T22:17:59Z",sageScore:6,diffs:[{njs:12,offset:0,notes:223,bombs:0,obstacles:55,nps:1.095,length:302,characteristic:"Standard",difficulty:"Easy",events:2312,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:203.596,paritySummary:{errors:75,warns:8,resets:0}},{njs:10,offset:0,notes:327,bombs:0,obstacles:55,nps:1.601,length:303,characteristic:"Standard",difficulty:"Normal",events:2312,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.27,paritySummary:{errors:79,warns:25,resets:0}},{njs:12,offset:0,notes:441,bombs:0,obstacles:165,nps:2.159,length:303,characteristic:"Standard",difficulty:"Hard",events:2312,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.27,paritySummary:{errors:55,warns:38,resets:0}},{njs:12,offset:0,notes:631,bombs:16,obstacles:258,nps:3.099,length:302,characteristic:"Standard",difficulty:"Expert",events:2312,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:203.596,paritySummary:{errors:49,warns:46,resets:4}}],downloadURL:"https://cdn.beatsaver.com/c983fa1786f03be4965b2319daa86f74ce0be831.zip",coverURL:"https://cdn.beatsaver.com/c983fa1786f03be4965b2319daa86f74ce0be831.jpg",previewURL:"https://cdn.beatsaver.com/c983fa1786f03be4965b2319daa86f74ce0be831.mp3"}],createdAt:"2019-01-28T22:17:59Z",updatedAt:"2019-01-28T22:17:59Z",lastPublishedAt:"2019-01-28T22:17:59Z"},{id:"32d4",name:"MariannE (Lanota Edit) - Yooh",description:"Lanota Edit (2:43)\r\nNotes per Second / Video Play-through (All Full Combo):\r\nEasy: 1.4 / https://streamable.com/6y473\r\nNormal: 1.5 / https://streamable.com/ctc6c\r\nHard: 2.6 / https://streamable.com/ot9ws\r\nExpert: 3.8 / https://streamable.com/4gsdz\r\nExpert+: 6.1 / https://streamable.com/rizv3 (1st Person) \r\n\r\nThe jump in difficulty from Expert to Expert+ is substantial, so watch out!\r\nAll difficulties as always!",uploader:{id:11373,name:"redmagi",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e9d2",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9d2?d=retro",type:"SIMPLE"},metadata:{bpm:191,duration:164,songName:"MariannE (Lanota Edit)",songSubName:"Yooh",songAuthorName:"Redmagi",levelAuthorName:"redmagi"},stats:{plays:0,downloads:7763,upvotes:5249,downvotes:168,score:.9337},uploaded:"2019-02-01T16:17:26Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"afb47d1abb417a76a4293d29a725d6dd74d76782",key:"32d4",state:"Published",createdAt:"2019-02-01T16:17:26Z",sageScore:8,diffs:[{njs:10,offset:1,notes:235,bombs:0,obstacles:2,nps:1.508,length:496,characteristic:"Standard",difficulty:"Easy",events:8433,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:155.812,paritySummary:{errors:19,warns:19,resets:0},stars:.94},{njs:12,offset:1,notes:246,bombs:32,obstacles:6,nps:1.579,length:496,characteristic:"Standard",difficulty:"Normal",events:8433,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:155.812,paritySummary:{errors:19,warns:24,resets:5},stars:1.08},{njs:14,offset:1,notes:435,bombs:48,obstacles:4,nps:2.792,length:496,characteristic:"Standard",difficulty:"Hard",events:8435,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:155.812,paritySummary:{errors:23,warns:37,resets:10},stars:1.65},{njs:16,offset:1,notes:622,bombs:86,obstacles:4,nps:3.992,length:496,characteristic:"Standard",difficulty:"Expert",events:8433,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:155.812,paritySummary:{errors:43,warns:39,resets:5},stars:2.64},{njs:18,offset:0,notes:1011,bombs:0,obstacles:0,nps:6.489,length:496,characteristic:"Standard",difficulty:"ExpertPlus",events:8431,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:155.812,paritySummary:{errors:44,warns:71,resets:0},stars:5.71}],downloadURL:"https://cdn.beatsaver.com/afb47d1abb417a76a4293d29a725d6dd74d76782.zip",coverURL:"https://cdn.beatsaver.com/afb47d1abb417a76a4293d29a725d6dd74d76782.jpg",previewURL:"https://cdn.beatsaver.com/afb47d1abb417a76a4293d29a725d6dd74d76782.mp3"}],createdAt:"2019-02-01T16:17:26Z",updatedAt:"2019-02-01T16:17:26Z",lastPublishedAt:"2019-02-01T16:17:26Z"},{id:"a68b",name:"[Noodle Touhou] Masayoshi Minoshima - Bad Apple!! (Nhato Remix)",description:"Expert+ Preview: https://www.youtube.com/watch?v=CpfdPKtiYXs\n\nThis song makes me nostalgic to my first exposure to Touhou. I hope this brings back that nostalgia in a new light before we all fade to black.\n\nThis map is part of the first Touhou map pack brought to you by the Ramen Noodle mapper group! It contains all sorts of covers, arrangements and remix of the original Touhou soundtrack. We hope you enjoy it a lot!\nCheckout the playlist here: https://bsaber.com/noodle-touhou/\n\nComments? Like it? Hate it? Let me know on Discord @Bloodcloak#5725 !",uploader:{id:71661,name:"bloodcloak",uniqueSet:!0,hash:"5cff0b7698cc5a672c8551d3",avatar:"https://cdn.beatsaver.com/avatar/205707707187986442.png",type:"DISCORD"},metadata:{bpm:138,duration:369,songName:"Bad Apple!!",songSubName:"ft. nomico (Nhato Remix)",songAuthorName:"Masayoshi Minoshima",levelAuthorName:"Bloodcloak"},stats:{plays:0,downloads:6326,upvotes:2755,downvotes:64,score:.9336},uploaded:"2020-05-15T18:01:27.405Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"3b86d374847b41800d8b3aebb2043138db06ad64",key:"a68b",state:"Published",createdAt:"2020-05-15T18:01:27.405Z",sageScore:4,diffs:[{njs:12,offset:.7,notes:1161,bombs:0,obstacles:307,nps:3.21,length:832,characteristic:"Standard",difficulty:"Hard",events:6683,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:361.739,paritySummary:{errors:6,warns:6,resets:0}},{njs:16,offset:0,notes:1341,bombs:0,obstacles:281,nps:3.707,length:832,characteristic:"Standard",difficulty:"Expert",events:6683,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:361.739,paritySummary:{errors:7,warns:9,resets:0}},{njs:20,offset:-.4,notes:1560,bombs:0,obstacles:239,nps:4.312,length:832.063,characteristic:"Standard",difficulty:"ExpertPlus",events:6683,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:361.766,paritySummary:{errors:16,warns:24,resets:0}}],downloadURL:"https://cdn.beatsaver.com/3b86d374847b41800d8b3aebb2043138db06ad64.zip",coverURL:"https://cdn.beatsaver.com/3b86d374847b41800d8b3aebb2043138db06ad64.jpg",previewURL:"https://cdn.beatsaver.com/3b86d374847b41800d8b3aebb2043138db06ad64.mp3"}],createdAt:"2020-05-15T18:01:27.405Z",updatedAt:"2020-05-15T18:01:27.405Z",lastPublishedAt:"2020-05-15T18:01:27.405Z"},{id:"1ff4",name:"Sheppard - Geronimo (100K Contest)",description:"This community is amazing, in just 6 months we've reached 100,000 members with no signs of slowing down. To celebrate, this map was created with 21 others to bring you the 100K contest! Here, you can win over $7000 in prizes!!\r\n\r\nTo enter, you need to go to the following website and download the mod installer: https://bsaber.com/100k-contest/\r\n\r\nThe competition is now over, but the maps remain!\r\nVideo Preview: https://www.youtube.com/watch?v=k4nEgDrI0vU",uploader:{id:4785,name:"stumi",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f720",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro",type:"SIMPLE"},metadata:{bpm:142,duration:219,songName:"Geronimo",songSubName:"Sheppard",songAuthorName:"Stumi",levelAuthorName:"stumi"},stats:{plays:0,downloads:6998,upvotes:2775,downvotes:65,score:.9336},uploaded:"2018-11-12T18:28:10Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"41a84fc21bdbfea8ca03021237662596d798f662",key:"1ff4",state:"Published",createdAt:"2018-11-12T18:28:10Z",sageScore:5,diffs:[{njs:10,offset:0,notes:293,bombs:20,obstacles:21,nps:1.421,length:488,characteristic:"Standard",difficulty:"Easy",events:1188,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:206.197,paritySummary:{errors:29,warns:16,resets:0}},{njs:10,offset:0,notes:338,bombs:20,obstacles:21,nps:1.639,length:488,characteristic:"Standard",difficulty:"Normal",events:1188,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:206.197,paritySummary:{errors:32,warns:26,resets:0}},{njs:10,offset:0,notes:570,bombs:20,obstacles:21,nps:2.764,length:488,characteristic:"Standard",difficulty:"Hard",events:1190,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:206.197,paritySummary:{errors:33,warns:30,resets:0}},{njs:12,offset:0,notes:707,bombs:20,obstacles:21,nps:3.429,length:488,characteristic:"Standard",difficulty:"Expert",events:1192,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:206.197,paritySummary:{errors:55,warns:50,resets:0}}],downloadURL:"https://cdn.beatsaver.com/41a84fc21bdbfea8ca03021237662596d798f662.zip",coverURL:"https://cdn.beatsaver.com/41a84fc21bdbfea8ca03021237662596d798f662.jpg",previewURL:"https://cdn.beatsaver.com/41a84fc21bdbfea8ca03021237662596d798f662.mp3"}],createdAt:"2018-11-12T18:28:10Z",updatedAt:"2018-11-12T18:28:10Z",lastPublishedAt:"2018-11-12T18:28:10Z"},{id:"4e86",name:"Zero to Hero - Hercules",description:"E+ FC: https://www.youtube.com/watch?v=SVzMwvrsQa0",uploader:{id:4285169,name:"ryger",uniqueSet:!0,hash:"5cff0b7798cc5a672c855a42",avatar:"https://cdn.beatsaver.com/avatar/169266024502263808.png",type:"DISCORD"},metadata:{bpm:120,duration:140,songName:"Zero to Hero",songSubName:"Hercules",songAuthorName:"Ryger",levelAuthorName:"Ryger"},stats:{plays:0,downloads:5259,upvotes:2235,downvotes:45,score:.9334},uploaded:"2019-05-22T16:18:18Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0b4cda7dd0b19972b9965f7c39ad3a04ceb9f110",key:"4e86",state:"Published",createdAt:"2019-05-22T16:18:18Z",sageScore:2,diffs:[{njs:12,offset:0,notes:477,bombs:0,obstacles:0,nps:3.529,length:376.19,characteristic:"Standard",difficulty:"Hard",events:2354,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.095,paritySummary:{errors:26,warns:16,resets:0}},{njs:14,offset:0,notes:604,bombs:0,obstacles:0,nps:4.469,length:376.19,characteristic:"Standard",difficulty:"Expert",events:2354,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.095,paritySummary:{errors:30,warns:19,resets:0}},{njs:15,offset:0,notes:644,bombs:0,obstacles:0,nps:4.752,length:377.206,characteristic:"Standard",difficulty:"ExpertPlus",events:2354,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.603,paritySummary:{errors:30,warns:32,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0b4cda7dd0b19972b9965f7c39ad3a04ceb9f110.zip",coverURL:"https://cdn.beatsaver.com/0b4cda7dd0b19972b9965f7c39ad3a04ceb9f110.jpg",previewURL:"https://cdn.beatsaver.com/0b4cda7dd0b19972b9965f7c39ad3a04ceb9f110.mp3"}],createdAt:"2019-05-22T16:18:18Z",updatedAt:"2019-05-22T16:18:18Z",lastPublishedAt:"2019-05-22T16:18:18Z"},{id:"3700",name:"U Got That",description:"",uploader:{id:27874,name:"serenity",uniqueSet:!0,hash:"5cff0b7798cc5a672c855426",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855426?d=retro",type:"SIMPLE"},metadata:{bpm:124,duration:190,songName:"U Got That",songSubName:"Halogen",songAuthorName:"Serenity",levelAuthorName:"Serenity"},stats:{plays:0,downloads:6766,upvotes:7958,downvotes:296,score:.9334},uploaded:"2019-02-17T05:53:20Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b671c2401d1b8af29efe71e448f586223e6ca70a",key:"3700",state:"Published",createdAt:"2019-02-17T05:53:20Z",sageScore:5,diffs:[{njs:10,offset:0,notes:732,bombs:24,obstacles:55,nps:3.96,length:382,characteristic:"Standard",difficulty:"Expert",events:1040,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:184.839,paritySummary:{errors:108,warns:73,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b671c2401d1b8af29efe71e448f586223e6ca70a.zip",coverURL:"https://cdn.beatsaver.com/b671c2401d1b8af29efe71e448f586223e6ca70a.jpg",previewURL:"https://cdn.beatsaver.com/b671c2401d1b8af29efe71e448f586223e6ca70a.mp3"}],createdAt:"2019-02-17T05:53:20Z",updatedAt:"2019-02-17T05:53:20Z",lastPublishedAt:"2019-02-17T05:53:20Z"},{id:"77e9",name:"Jingo Jungle [Saga of Tanya the Evil Opening] - AmaLee",description:'AmaLee\'s English cover of "Jingo Jungle", the opening from Saga of Tanya the Evil (Youjo Senki). Original song by MYTH & ROID.',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:130,duration:225,songName:"Jingo Jungle",songSubName:"",songAuthorName:"AmaLee",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:2875,upvotes:1595,downvotes:23,score:.9333},uploaded:"2019-12-21T02:44:34.295Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f90a2e4f8ee7b1f33543cddccb8baea660253d4a",key:"77e9",state:"Published",createdAt:"2019-12-21T02:44:34.295Z",sageScore:5,diffs:[{njs:12,offset:0,notes:581,bombs:104,obstacles:28,nps:2.647,length:475.5,characteristic:"Standard",difficulty:"Hard",events:5987,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.462,paritySummary:{errors:35,warns:15,resets:10}},{njs:15,offset:0,notes:950,bombs:78,obstacles:14,nps:4.329,length:475.5,characteristic:"Standard",difficulty:"Expert",events:5987,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.462,paritySummary:{errors:42,warns:48,resets:8}},{njs:17,offset:0,notes:1184,bombs:105,obstacles:17,nps:5.395,length:475.5,characteristic:"Standard",difficulty:"ExpertPlus",events:5987,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.462,paritySummary:{errors:32,warns:43,resets:16}}],downloadURL:"https://cdn.beatsaver.com/f90a2e4f8ee7b1f33543cddccb8baea660253d4a.zip",coverURL:"https://cdn.beatsaver.com/f90a2e4f8ee7b1f33543cddccb8baea660253d4a.jpg",previewURL:"https://cdn.beatsaver.com/f90a2e4f8ee7b1f33543cddccb8baea660253d4a.mp3"}],createdAt:"2019-12-21T02:44:34.295Z",updatedAt:"2019-12-21T02:44:34.295Z",lastPublishedAt:"2019-12-21T02:44:34.295Z"},{id:"16ff",name:"Little Swing - AronChupa",description:"Preview: https://youtu.be/_IERvrKBKB0\r\nI wasn't happy with all the other versions of this song, so I made my own.",uploader:{id:4285668,name:"connorjc",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fb89",avatar:"https://cdn.beatsaver.com/avatar/99724057217355776.png",type:"DISCORD"},metadata:{bpm:126,duration:165,songName:"Little Swing",songSubName:"AronChupa feat. Little Sis Nora",songAuthorName:"ConnorJC",levelAuthorName:"ConnorJC"},stats:{plays:0,downloads:4721,upvotes:2877,downvotes:70,score:.9333},uploaded:"2018-09-24T14:51:17Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"235336f468a6290c87d724616e9b1d952ae3b8f2",key:"16ff",state:"Published",createdAt:"2018-09-24T14:51:17Z",sageScore:4,diffs:[{njs:12,offset:0,notes:669,bombs:0,obstacles:28,nps:4.216,length:333.25,characteristic:"Standard",difficulty:"Expert",events:460,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:158.69,paritySummary:{errors:37,warns:55,resets:0}}],downloadURL:"https://cdn.beatsaver.com/235336f468a6290c87d724616e9b1d952ae3b8f2.zip",coverURL:"https://cdn.beatsaver.com/235336f468a6290c87d724616e9b1d952ae3b8f2.jpg",previewURL:"https://cdn.beatsaver.com/235336f468a6290c87d724616e9b1d952ae3b8f2.mp3"}],createdAt:"2018-09-24T14:51:17Z",updatedAt:"2018-09-24T14:51:17Z",lastPublishedAt:"2018-09-24T14:51:17Z"},{id:"1230",name:"Hymn for the Weekend - Coldplay",description:"Hymn for the weekend by Coldplay\r\nBPM: 90 (AHH SLOW)\r\nRuntime: 4m3s\r\nDifficulties: Easy, Normal, Hard, Expert\r\n\r\nDemo : https://vimeo.com/286997137",uploader:{id:47059,name:"rocket",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f1c0",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f1c0?d=retro",type:"SIMPLE"},metadata:{bpm:90,duration:244,songName:"Hymn For The Weekend",songSubName:"Coldplay",songAuthorName:"Rocket",levelAuthorName:"rocket"},stats:{plays:0,downloads:9700,upvotes:3156,downvotes:81,score:.9333},uploaded:"2018-08-28T01:41:15Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f050cd142882f102226efb614cca3a1ac1368fff",key:"1230",state:"Published",createdAt:"2018-08-28T01:41:15Z",sageScore:5,diffs:[{njs:12,offset:0,notes:202,bombs:0,obstacles:8,nps:.935,length:324,characteristic:"Standard",difficulty:"Easy",events:892,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216,paritySummary:{errors:35,warns:7,resets:0}},{njs:12,offset:0,notes:377,bombs:0,obstacles:8,nps:1.745,length:324,characteristic:"Standard",difficulty:"Normal",events:895,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216,paritySummary:{errors:49,warns:39,resets:0}},{njs:12,offset:0,notes:573,bombs:0,obstacles:8,nps:2.617,length:328.375,characteristic:"Standard",difficulty:"Hard",events:893,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.917,paritySummary:{errors:50,warns:56,resets:0}},{njs:12,offset:0,notes:729,bombs:0,obstacles:8,nps:3.33,length:328.375,characteristic:"Standard",difficulty:"Expert",events:893,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.917,paritySummary:{errors:78,warns:87,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f050cd142882f102226efb614cca3a1ac1368fff.zip",coverURL:"https://cdn.beatsaver.com/f050cd142882f102226efb614cca3a1ac1368fff.jpg",previewURL:"https://cdn.beatsaver.com/f050cd142882f102226efb614cca3a1ac1368fff.mp3"}],createdAt:"2018-08-28T01:41:15Z",updatedAt:"2018-08-28T01:41:15Z",lastPublishedAt:"2018-08-28T01:41:15Z"},{id:"276a",name:"Ain't Nothin' like a Funky Beat - Hideki Naganuma",description:"BAH BAH BAAAH BAH\r\nBAHBAH BUBAH BAH BAH BAAAAH BAH\r\nAint nothin like a funky beat\r\nMy Camera plus mod wasnt working :(\r\n\r\nDifficulties - Expert, Hard, Normal, , Easy\r\nBPM - 142\r\nPreview: https://youtu.be/92pCsIPxv10",uploader:{id:47059,name:"rocket",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f1c0",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f1c0?d=retro",type:"SIMPLE"},metadata:{bpm:142,duration:205,songName:"AIN'T NOTHIN' LIKE A FUNKY BEAT",songSubName:"Hideki Naganuma",songAuthorName:"Rocket",levelAuthorName:"rocket"},stats:{plays:0,downloads:5635,upvotes:2795,downvotes:67,score:.9332},uploaded:"2018-12-22T17:07:11Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a2c21a3a478f14422185f77cc8f9030f638fcf06",key:"276a",state:"Published",createdAt:"2018-12-22T17:07:11Z",sageScore:6,diffs:[{njs:15,offset:0,notes:237,bombs:0,obstacles:14,nps:1.214,length:462,characteristic:"Standard",difficulty:"Easy",events:1171,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:195.211,paritySummary:{errors:30,warns:16,resets:0}},{njs:15,offset:0,notes:441,bombs:0,obstacles:14,nps:2.239,length:466.25,characteristic:"Standard",difficulty:"Normal",events:1171,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.007,paritySummary:{errors:75,warns:40,resets:0}},{njs:15,offset:0,notes:684,bombs:0,obstacles:14,nps:3.472,length:466.25,characteristic:"Standard",difficulty:"Hard",events:1171,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.007,paritySummary:{errors:70,warns:95,resets:0}},{njs:15,offset:0,notes:838,bombs:0,obstacles:14,nps:4.254,length:466.25,characteristic:"Standard",difficulty:"Expert",events:1171,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.007,paritySummary:{errors:66,warns:76,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a2c21a3a478f14422185f77cc8f9030f638fcf06.zip",coverURL:"https://cdn.beatsaver.com/a2c21a3a478f14422185f77cc8f9030f638fcf06.jpg",previewURL:"https://cdn.beatsaver.com/a2c21a3a478f14422185f77cc8f9030f638fcf06.mp3"}],createdAt:"2018-12-22T17:07:11Z",updatedAt:"2018-12-22T17:07:11Z",lastPublishedAt:"2018-12-22T17:07:11Z"},{id:"46d4",name:"Rap God - Eminem",description:"",uploader:{id:4285169,name:"ryger",uniqueSet:!0,hash:"5cff0b7798cc5a672c855a42",avatar:"https://cdn.beatsaver.com/avatar/169266024502263808.png",type:"DISCORD"},metadata:{bpm:148,duration:366,songName:"Rap God",songSubName:"Eminem",songAuthorName:"Ryger",levelAuthorName:"Ryger"},stats:{plays:0,downloads:17173,upvotes:8866,downvotes:344,score:.933},uploaded:"2019-04-18T16:38:34Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a38fd8581eb892cc7090f78bfe61e9c256478cf3",key:"46d4",state:"Published",createdAt:"2019-04-18T16:38:34Z",sageScore:6,diffs:[{njs:15,offset:0,notes:2060,bombs:6,obstacles:2,nps:5.724,length:887.75,characteristic:"Standard",difficulty:"Expert",events:9351,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:359.899,paritySummary:{errors:80,warns:66,resets:0}},{njs:15,offset:0,notes:2060,bombs:6,obstacles:2,nps:5.724,length:887.75,characteristic:"Standard",difficulty:"ExpertPlus",events:9351,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:359.899,paritySummary:{errors:80,warns:70,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a38fd8581eb892cc7090f78bfe61e9c256478cf3.zip",coverURL:"https://cdn.beatsaver.com/a38fd8581eb892cc7090f78bfe61e9c256478cf3.jpg",previewURL:"https://cdn.beatsaver.com/a38fd8581eb892cc7090f78bfe61e9c256478cf3.mp3"}],createdAt:"2019-04-18T16:38:34Z",updatedAt:"2019-04-18T16:38:34Z",lastPublishedAt:"2019-04-18T16:38:34Z"},{id:"1188e",name:"Fox Stevenson - All Eyes On Me",description:"Man I love Stan, had a lot of fun making this :p\n\nhas Chroma lights",uploader:{id:4284201,name:"nitronikexe",uniqueSet:!0,hash:"5cff0b7798cc5a672c855d84",avatar:"https://cdn.beatsaver.com/avatar/428230049704181760.png",type:"DISCORD"},metadata:{bpm:172,duration:181,songName:"All Eyes On Me",songSubName:"",songAuthorName:"Fox Stevenson",levelAuthorName:"nitronik.exe"},stats:{plays:0,downloads:7649,upvotes:1891,downvotes:34,score:.9328},uploaded:"2020-11-30T15:14:16.512Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"77300a040e85107d5a745f2f9f2e5ced43205f4a",key:"1188e",state:"Published",createdAt:"2020-11-30T15:14:16.512Z",sageScore:5,diffs:[{njs:14,offset:1,notes:491,bombs:12,obstacles:66,nps:2.779,length:506.5,characteristic:"Standard",difficulty:"Hard",events:4370,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:176.686,paritySummary:{errors:0,warns:0,resets:6}},{njs:17,offset:.2,notes:748,bombs:0,obstacles:27,nps:4.213,length:509,characteristic:"Standard",difficulty:"Expert",events:4370,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:177.558,paritySummary:{errors:0,warns:0,resets:0}},{njs:21,offset:-.3,notes:951,bombs:0,obstacles:27,nps:5.382,length:506.5,characteristic:"Standard",difficulty:"ExpertPlus",events:4370,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:176.686,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/77300a040e85107d5a745f2f9f2e5ced43205f4a.zip",coverURL:"https://cdn.beatsaver.com/77300a040e85107d5a745f2f9f2e5ced43205f4a.jpg",previewURL:"https://cdn.beatsaver.com/77300a040e85107d5a745f2f9f2e5ced43205f4a.mp3"}],createdAt:"2020-11-30T15:14:16.512Z",updatedAt:"2020-11-30T15:14:16.512Z",lastPublishedAt:"2020-11-30T15:14:16.512Z"},{id:"2c3",name:"Koto - Clozee",description:"Here it is finally, Koto - Clozee from LIV's announcement featuring their depth camera so you don't have to have a green screen! https://twitter.com/LIV/status/1001490921295417345\r\n\r\nIf you love my maps and want to support me, heres my patreon!\r\nhttps://www.patreon.com/purphorosVR",uploader:{id:49373,name:"purphoros",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea98",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ea98?d=retro",type:"SIMPLE"},metadata:{bpm:100,duration:253,songName:"Koto",songSubName:"CloZee",songAuthorName:"Purphoros",levelAuthorName:"purphoros"},stats:{plays:0,downloads:5247,upvotes:3689,downvotes:105,score:.9328},uploaded:"2018-05-29T17:19:09Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c1638525606ecb7aea6d6a71d124aa79296ab842",key:"2c3",state:"Published",createdAt:"2018-05-29T17:19:09Z",sageScore:4,diffs:[{njs:10,offset:0,notes:858,bombs:0,obstacles:12,nps:3.575,length:400,characteristic:"Standard",difficulty:"Expert",events:72,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:240,paritySummary:{errors:108,warns:55,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c1638525606ecb7aea6d6a71d124aa79296ab842.zip",coverURL:"https://cdn.beatsaver.com/c1638525606ecb7aea6d6a71d124aa79296ab842.jpg",previewURL:"https://cdn.beatsaver.com/c1638525606ecb7aea6d6a71d124aa79296ab842.mp3"}],createdAt:"2018-05-29T17:19:09Z",updatedAt:"2018-05-29T17:19:09Z",lastPublishedAt:"2018-05-29T17:19:09Z"},{id:"15b16",name:"Codly - Lucy, The God Of Time [Wall Map]",description:"This map has 2 diffs Expert and ExpertPlus\nExpert - Reddek\nExpertPlus - shan_man\n\nLink to preview: https://youtu.be/_LUXKlcpue4\n\nLink to original song: https://youtu.be/kyCXzxmebB4\nSong By: Codly and Sakuzyo\n\nOkay, I put way to much time into this...\n\nHuge thanks to Shan_Man for making a diff in this\n\nAlso thank you Reaxt for your help with the last drop\n\nMade with \n-Demo.js script\n-ScuffedWalls\n\nshan_man: https://beatsaver.com/uploader/5ec5aaa616c9680006500e0a\n\nWould love some feedback in the dms!:\nReddek#5864\nshan_man#7777",uploader:{id:4233941,name:"reddek",uniqueSet:!0,hash:"5dbfb4426dea0b0006bd328d",avatar:"https://cdn.beatsaver.com/avatar/177436487086768129.png",type:"DISCORD"},metadata:{bpm:170,duration:267,songName:"Lucy, The God of Time",songSubName:"",songAuthorName:"Codly",levelAuthorName:"Shan_Man & Reddek"},stats:{plays:0,downloads:3574,upvotes:1185,downvotes:11,score:.9327},uploaded:"2021-03-21T02:47:31.861Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"dd4a025f814b8570f2726939b1c5b000ed210ecf",key:"15b16",state:"Published",createdAt:"2021-03-21T02:47:31.861Z",sageScore:3,diffs:[{njs:20,offset:-.4,notes:873,bombs:117,obstacles:4342,nps:3.654,length:677,characteristic:"Standard",difficulty:"Expert",events:31216,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:238.941,paritySummary:{errors:0,warns:0,resets:3}},{njs:20,offset:-.4,notes:1353,bombs:44,obstacles:4342,nps:5.662,length:677,characteristic:"Standard",difficulty:"ExpertPlus",events:31217,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:238.941,paritySummary:{errors:0,warns:0,resets:3}}],downloadURL:"https://cdn.beatsaver.com/dd4a025f814b8570f2726939b1c5b000ed210ecf.zip",coverURL:"https://cdn.beatsaver.com/dd4a025f814b8570f2726939b1c5b000ed210ecf.jpg",previewURL:"https://cdn.beatsaver.com/dd4a025f814b8570f2726939b1c5b000ed210ecf.mp3"}],createdAt:"2021-03-21T02:47:31.861Z",updatedAt:"2021-03-21T02:47:31.861Z",lastPublishedAt:"2021-03-21T02:47:31.861Z"},{id:"2c3e",name:"Pump It - Black Eyed Peas",description:"Map #9. This was a special request by RedMagi, and he certainly deserves it for tirelessly testing all the other garbage we throw at him. Baxter with the funky patterns, RedMagi with some challenging streams in Expert+, and ALSO the amazing lighting effects! (Oh and of course a heck of a lot of play testing and feedback for fine tuning.) Hope you enjoy it as much as we do.\r\n\r\nAlso a big thank you to all our playtesters for the useful feedback: ManDynasty, Trolav, Crankor, Scrappy, and TurtleSquared\r\n\r\nhttps://youtu.be/YJnL0gq1z7s (Easy)\r\nhttps://youtu.be/U0DIjo4_ZE0 (Normal)\r\nhttps://youtu.be/zks4TgpfoR4 (Hard)\r\nhttps://youtu.be/rRq_fHRSCoI (Expert 3rd person)\r\nhttps://youtu.be/9ThPg99Xm9A (Expert 1st person)\r\nhttps://youtu.be/NPOPWH8bb10 (Expert+)",uploader:{id:27595,name:"baxter395",uniqueSet:!0,hash:"5cff0b7598cc5a672c852f7b",avatar:"https://www.gravatar.com/avatar/5cff0b7598cc5a672c852f7b?d=retro",type:"SIMPLE"},metadata:{bpm:154,duration:215,songName:"Pump It",songSubName:"Black Eyed Peas",songAuthorName:"baxter395 (M) RedMagi (M, L)",levelAuthorName:"baxter395"},stats:{plays:0,downloads:12322,upvotes:4839,downvotes:156,score:.9327},uploaded:"2019-01-09T05:13:56Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"2884021451135e751d3c442ae92243697744b349",key:"2c3e",state:"Published",createdAt:"2019-01-09T05:13:56Z",sageScore:4,diffs:[{njs:10,offset:0,notes:306,bombs:0,obstacles:15,nps:1.144,length:686.679,characteristic:"Standard",difficulty:"Easy",events:9156,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:267.537,paritySummary:{errors:72,warns:22,resets:0}},{njs:11,offset:0,notes:393,bombs:0,obstacles:22,nps:1.877,length:537.407,characteristic:"Standard",difficulty:"Normal",events:9156,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.38,paritySummary:{errors:77,warns:43,resets:0}},{njs:12,offset:0,notes:583,bombs:0,obstacles:16,nps:2.779,length:538.36,characteristic:"Standard",difficulty:"Hard",events:9156,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.751,paritySummary:{errors:63,warns:68,resets:0}},{njs:16,offset:0,notes:890,bombs:40,obstacles:59,nps:4.243,length:538.36,characteristic:"Standard",difficulty:"Expert",events:9156,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.751,paritySummary:{errors:88,warns:125,resets:7}},{njs:18,offset:0,notes:1048,bombs:24,obstacles:63,nps:4.996,length:538.392,characteristic:"Standard",difficulty:"ExpertPlus",events:9156,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.763,paritySummary:{errors:93,warns:104,resets:2}}],downloadURL:"https://cdn.beatsaver.com/2884021451135e751d3c442ae92243697744b349.zip",coverURL:"https://cdn.beatsaver.com/2884021451135e751d3c442ae92243697744b349.jpg",previewURL:"https://cdn.beatsaver.com/2884021451135e751d3c442ae92243697744b349.mp3"}],createdAt:"2019-01-09T05:13:56Z",updatedAt:"2019-01-09T05:13:56Z",lastPublishedAt:"2019-01-09T05:13:56Z"},{id:"3f38",name:"Sk8er Boi - Avril Lavigne",description:'"Sk8er Boi" (pronounced "skater boy") is a song by Canadian singer-songwriter Avril Lavigne.\r\n\r\nThis song was on my list of songs to map and I was excited when I saw someone had made one today, and after playing it I decided to make my own map of it.',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:150,duration:206,songName:"Sk8er Boi",songSubName:"Avril Lavigne",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:8202,upvotes:2443,downvotes:55,score:.9326},uploaded:"2019-03-20T18:01:26Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1078f8128effc0b79f19adf2b7aeed613afabac6",key:"3f38",state:"Published",createdAt:"2019-03-20T18:01:26Z",sageScore:6,diffs:[{njs:15,offset:0,notes:893,bombs:0,obstacles:0,nps:4.71,length:474,characteristic:"Standard",difficulty:"Expert",events:1410,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:189.6,paritySummary:{errors:41,warns:34,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1078f8128effc0b79f19adf2b7aeed613afabac6.zip",coverURL:"https://cdn.beatsaver.com/1078f8128effc0b79f19adf2b7aeed613afabac6.jpg",previewURL:"https://cdn.beatsaver.com/1078f8128effc0b79f19adf2b7aeed613afabac6.mp3"}],createdAt:"2019-03-20T18:01:26Z",updatedAt:"2019-03-20T18:01:26Z",lastPublishedAt:"2019-03-20T18:01:26Z"},{id:"19f3",name:"PONPONPON - Kyary Pamyu Pamyu",description:"Everyday PON\nEvery time is PON\n\nExpert is relatively easy, pretty close to OST standards\nHard is pretty close to OST as well\nNormal -- first time doing Normal, give any feedback on bsaber dot com\n\nExpert Preview: https://youtu.be/4AMzxcWDqPM\nFollow me on Twitter u won't\nhttps://twitter.com/aggrogahu\n\nShoutout to Geb and RedMagi for playtesting",uploader:{id:4284613,name:"aggrogahu",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fdad",avatar:"https://cdn.beatsaver.com/avatar/158363872649150464.png",type:"DISCORD"},metadata:{bpm:128,duration:247,songName:"PONPONPON",songSubName:"Kyary Pamyu Pamyu",songAuthorName:"aggrogahu",levelAuthorName:"aggrogahu"},stats:{plays:0,downloads:4544,upvotes:2285,downvotes:49,score:.9326},uploaded:"2018-10-12T23:21:38Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c1b08e5c05c9e6dad4096f3ff04d1e0497a0a339",key:"19f3",state:"Published",createdAt:"2018-10-12T23:21:38Z",sageScore:4,diffs:[{njs:10,offset:0,notes:432,bombs:2,obstacles:38,nps:1.832,length:503,characteristic:"Standard",difficulty:"Normal",events:636,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:235.781,paritySummary:{errors:101,warns:37,resets:1}},{njs:10,offset:0,notes:541,bombs:1,obstacles:38,nps:2.29,length:504,characteristic:"Standard",difficulty:"Hard",events:636,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:236.25,paritySummary:{errors:133,warns:61,resets:0}},{njs:10,offset:0,notes:714,bombs:2,obstacles:48,nps:3.022,length:504,characteristic:"Standard",difficulty:"Expert",events:636,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:236.25,paritySummary:{errors:120,warns:84,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c1b08e5c05c9e6dad4096f3ff04d1e0497a0a339.zip",coverURL:"https://cdn.beatsaver.com/c1b08e5c05c9e6dad4096f3ff04d1e0497a0a339.jpg",previewURL:"https://cdn.beatsaver.com/c1b08e5c05c9e6dad4096f3ff04d1e0497a0a339.mp3"}],createdAt:"2018-10-12T23:21:38Z",updatedAt:"2018-10-12T23:21:38Z",lastPublishedAt:"2018-10-12T23:21:38Z"},{id:"11b7a",name:"Still Alive - Portal",description:"I've wanted to map this song for a while now. And since this one's probably the last Portal song I'll map, I gave it my best. \r\n\r\nP.S. - I'm so glad to be back mapping this month. I had to take a break due to overwhelming stress, but now I'm feeling ready again.\r\nI hope you enjoy.\r\n\r\nPortal on Steam:\r\nhttps://store.steampowered.com/app/400/Portal/",uploader:{id:4284694,name:"jokidum",uniqueSet:!0,hash:"5e15518d47f1600006e912cc",avatar:"https://cdn.beatsaver.com/avatar/494282373094047745.png",type:"DISCORD"},metadata:{bpm:120,duration:176,songName:"Still Alive",songSubName:"- Portal",songAuthorName:"Jonathan Coulton",levelAuthorName:"Jokidum"},stats:{plays:0,downloads:5965,upvotes:1927,downvotes:36,score:.9325},uploaded:"2020-12-04T20:30:44.132Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8c03b43484b0dd1fc7d8a3104a82f0992a001c6c",key:"11b7a",state:"Published",createdAt:"2020-12-04T20:30:44.132Z",sageScore:4,diffs:[{njs:12,offset:0,notes:490,bombs:0,obstacles:13,nps:2.853,length:343.5,characteristic:"Standard",difficulty:"Expert",events:1060,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:171.75,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:1060,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/8c03b43484b0dd1fc7d8a3104a82f0992a001c6c.zip",coverURL:"https://cdn.beatsaver.com/8c03b43484b0dd1fc7d8a3104a82f0992a001c6c.jpg",previewURL:"https://cdn.beatsaver.com/8c03b43484b0dd1fc7d8a3104a82f0992a001c6c.mp3"}],createdAt:"2020-12-04T20:30:44.132Z",updatedAt:"2020-12-04T20:30:44.132Z",lastPublishedAt:"2020-12-04T20:30:44.132Z"},{id:"1ff9",name:"Thaehan - Circus | - 100k Contest",description:"This is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes. Go to https://bsaber.com/100k-contest/ to register!\r\n\r\nI have changed some parts of the map since\r\n\r\nPreview: https://www.youtube.com/watch?v=e4stySCsNIM",uploader:{id:4286278,name:"ruckus",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f1d8",avatar:"https://cdn.beatsaver.com/avatar/239082462083284992.png",type:"DISCORD"},metadata:{bpm:196,duration:148,songName:"Circus",songSubName:"Thaehan",songAuthorName:"Ruckus",levelAuthorName:"ruckus"},stats:{plays:0,downloads:4649,upvotes:2448,downvotes:56,score:.9324},uploaded:"2018-11-12T20:35:47Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e2934fbc194a51aa3579613bd88dc47503016c8a",key:"1ff9",state:"Published",createdAt:"2018-11-12T20:35:47Z",sageScore:7,diffs:[{njs:11,offset:0,notes:251,bombs:0,obstacles:12,nps:1.83,length:448,characteristic:"Standard",difficulty:"Easy",events:2733,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:137.143,paritySummary:{errors:0,warns:0,resets:0}},{njs:11,offset:0,notes:462,bombs:0,obstacles:0,nps:3.369,length:448,characteristic:"Standard",difficulty:"Normal",events:2735,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:137.143,paritySummary:{errors:29,warns:27,resets:0}},{njs:12,offset:0,notes:513,bombs:0,obstacles:0,nps:3.741,length:448,characteristic:"Standard",difficulty:"Hard",events:2735,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:137.143,paritySummary:{errors:62,warns:42,resets:0}},{njs:14,offset:0,notes:719,bombs:0,obstacles:0,nps:5.24,length:448.273,characteristic:"Standard",difficulty:"Expert",events:2736,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:137.226,paritySummary:{errors:60,warns:73,resets:0}},{njs:17,offset:0,notes:739,bombs:0,obstacles:0,nps:5.386,length:448.25,characteristic:"Standard",difficulty:"ExpertPlus",events:3278,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:137.219,paritySummary:{errors:58,warns:79,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e2934fbc194a51aa3579613bd88dc47503016c8a.zip",coverURL:"https://cdn.beatsaver.com/e2934fbc194a51aa3579613bd88dc47503016c8a.jpg",previewURL:"https://cdn.beatsaver.com/e2934fbc194a51aa3579613bd88dc47503016c8a.mp3"}],createdAt:"2018-11-12T20:35:47Z",updatedAt:"2018-11-12T20:35:47Z",lastPublishedAt:"2018-11-12T20:35:47Z"},{id:"943e",name:"The Only Thing They Fear is You - Mick Gordon DOOM OST",description:"THE 360 MAP REQUIRES THE MAPPING EXTENSIONS MOD FOR BEAT SABER v1.8.0 OR GREATER (the Timbaland Update). OLDER VERSIONS OF MAPPING EXTENSIONS WILL NOT WORK.\n\nEpilepsy warning. Play with Static Lights or dim Custom Colors if prone to epileptic attacks.\nLightshow nerfed on Hard, Expert, and 360 difficulties.\n\nThis map’s Custom Colors are enabled via SongCore. To disable them, go to Mod Settings > SongCore from the ingame Main Menu.\n\n103 BPM / 3:20 Duration\n\nStandard (No Mapping Extensions)\nI'm too young to die - 482 notes (2.41 NPS)\nHurt me plenty - 603 notes (3.02 NPS)\nUltra-Violence - 713 notes (3.57 NPS)\n\n360 (Mapping Extensions)\nNightmare - 713 notes (3.57 NPS) ~6k rotations\n\nLightshow (No Mapping Extensions / SongCore required)\nLightshow - 20359 events\n\nTougeVR's Mixed Reality Playthrough: https://youtu.be/8arRphzeiDE\nMapping Extensions for pre-v1.8.0: https://drive.google.com/file/d/1-59-n3OLqNk4LOZ7MHo9AJ87-2__tEFo/view?usp=sharing",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:103,duration:200,songName:"The Only Thing They Fear is You",songSubName:"",songAuthorName:"Mick Gordon",levelAuthorName:"Skyler Wallace"},stats:{plays:0,downloads:13590,upvotes:4650,downvotes:150,score:.9322},uploaded:"2020-03-27T08:59:46.875Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ac3976bd01d289aaacf03423706010e843a824d5",key:"943e",state:"Published",createdAt:"2020-03-27T08:59:46.875Z",sageScore:6,diffs:[{njs:13,offset:-.25,notes:482,bombs:370,obstacles:376,nps:2.556,length:323.688,characteristic:"Standard",difficulty:"Hard",events:17272,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.556,paritySummary:{errors:25,warns:33,resets:0}},{njs:16,offset:.5,notes:603,bombs:721,obstacles:375,nps:3.193,length:324.187,characteristic:"Standard",difficulty:"Expert",events:17272,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.847,paritySummary:{errors:3,warns:10,resets:97}},{njs:19,offset:.25,notes:713,bombs:769,obstacles:379,nps:3.635,length:336.689,characteristic:"Standard",difficulty:"ExpertPlus",events:20359,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:196.13,paritySummary:{errors:10,warns:52,resets:95}},{njs:19,offset:.25,notes:713,bombs:7824,obstacles:9601,nps:3.623,length:337.843,characteristic:"360Degree",difficulty:"ExpertPlus",events:25883,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:196.802,paritySummary:{errors:0,warns:0,resets:0}},{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:20359,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ac3976bd01d289aaacf03423706010e843a824d5.zip",coverURL:"https://cdn.beatsaver.com/ac3976bd01d289aaacf03423706010e843a824d5.jpg",previewURL:"https://cdn.beatsaver.com/ac3976bd01d289aaacf03423706010e843a824d5.mp3"}],createdAt:"2020-03-27T08:59:46.875Z",updatedAt:"2020-03-27T08:59:46.875Z",lastPublishedAt:"2020-03-27T08:59:46.875Z"},{id:"4274",name:"Flesh - Nightcore (RubyChan)",description:"BPM: 152.674\r\nNPS: N: 1.92 H: 2.91 E: 3.71 E+: 4.26\r\nNotes: N: 425 H: 644 E: 819 E+: 942\r\nWalls: N: 80 H:82 E:96 E+: 85\r\nBombs: N: 20 H:34 E: 50 E+: 60\r\n\r\nNormal/Hard tend to follow the beat, while Expert/Expert+ tend to follow the vocals. Thanks to Redmagi and helencarnate for play testing!",uploader:{id:4285188,name:"fruhead",uniqueSet:!0,hash:"5cff0b7598cc5a672c852683",avatar:"https://cdn.beatsaver.com/avatar/174000100413145090.png",type:"DISCORD"},metadata:{bpm:153,duration:221,songName:"Flesh",songSubName:"Nighctore (RubyChan)",songAuthorName:"fruhead",levelAuthorName:"fruhead"},stats:{plays:0,downloads:3291,upvotes:1693,downvotes:29,score:.9319},uploaded:"2019-03-31T18:25:07Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0acc713b47e8228b242fb42c0db29959014f8124",key:"4274",state:"Published",createdAt:"2019-03-31T18:25:07Z",sageScore:3,diffs:[{njs:12,offset:0,notes:425,bombs:20,obstacles:80,nps:2.116,length:511,characteristic:"Standard",difficulty:"Normal",events:7207,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.392,paritySummary:{errors:13,warns:0,resets:10}},{njs:14,offset:0,notes:644,bombs:34,obstacles:82,nps:3.207,length:511,characteristic:"Standard",difficulty:"Hard",events:7207,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.392,paritySummary:{errors:14,warns:14,resets:18}},{njs:16,offset:0,notes:819,bombs:50,obstacles:96,nps:4.078,length:511,characteristic:"Standard",difficulty:"Expert",events:7207,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.392,paritySummary:{errors:32,warns:56,resets:19}},{njs:16,offset:0,notes:942,bombs:60,obstacles:85,nps:4.691,length:511,characteristic:"Standard",difficulty:"ExpertPlus",events:7207,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.392,paritySummary:{errors:23,warns:66,resets:23}}],downloadURL:"https://cdn.beatsaver.com/0acc713b47e8228b242fb42c0db29959014f8124.zip",coverURL:"https://cdn.beatsaver.com/0acc713b47e8228b242fb42c0db29959014f8124.jpg",previewURL:"https://cdn.beatsaver.com/0acc713b47e8228b242fb42c0db29959014f8124.mp3"}],createdAt:"2019-03-31T18:25:07Z",updatedAt:"2019-03-31T18:25:07Z",lastPublishedAt:"2019-03-31T18:25:07Z"},{id:"5fda",name:"Mr. Blue Sky",description:"After a certain streamer asked for this to be re-made I put it on my list, needed a break from the current harder maps I'm working on so made this feel-good classic. Hope you enjoy :D\n\nSpecial thanks to those who tested, especially Sehria for her suggestions, and thanks to my little sister for testing Hard diff :P",uploader:{id:4285633,name:"edmard",uniqueSet:!0,hash:"5cff0b7798cc5a672c856604",avatar:"https://cdn.beatsaver.com/avatar/157188812462620672.png",type:"DISCORD"},metadata:{bpm:174,duration:222,songName:"Mr. Blue Sky",songSubName:"",songAuthorName:"Electric Light Orchestra",levelAuthorName:"Edmard"},stats:{plays:0,downloads:4883,upvotes:2486,downvotes:59,score:.9318},uploaded:"2019-08-28T15:45:05.788Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0039a0c02e9e0ac1761445caadefdfdd989f5316",key:"5fda",state:"Published",createdAt:"2019-08-28T15:45:05.788Z",sageScore:5,diffs:[{njs:14,offset:0,notes:742,bombs:0,obstacles:24,nps:3.579,length:601.25,characteristic:"Standard",difficulty:"Hard",events:816,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.328,paritySummary:{errors:2,warns:2,resets:0}},{njs:16,offset:0,notes:772,bombs:0,obstacles:28,nps:3.724,length:601.25,characteristic:"Standard",difficulty:"Expert",events:816,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.328,paritySummary:{errors:2,warns:2,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0039a0c02e9e0ac1761445caadefdfdd989f5316.zip",coverURL:"https://cdn.beatsaver.com/0039a0c02e9e0ac1761445caadefdfdd989f5316.jpg",previewURL:"https://cdn.beatsaver.com/0039a0c02e9e0ac1761445caadefdfdd989f5316.mp3"}],createdAt:"2019-08-28T15:45:05.788Z",updatedAt:"2019-08-28T15:45:05.788Z",lastPublishedAt:"2019-08-28T15:45:05.788Z"},{id:"57c2",name:"Rockefeller Street (Nightcore) - Getter Jaani",description:"Hey this is reuploaded since it broke before\nhave fun",uploader:{id:16388,name:"rinkusenpai",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f6cc",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f6cc?d=retro",type:"SIMPLE"},metadata:{bpm:162.5,duration:145,songName:"Rockefeller Street (Nightcore)",songSubName:"",songAuthorName:"Getter Jaani",levelAuthorName:"RinkuSenpai"},stats:{plays:0,downloads:10267,upvotes:7867,downvotes:306,score:.9318},uploaded:"2019-07-18T21:40:09.204Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"b8c98ffc598703aadb4a3cb921d2830d270b57a5",key:"57c2",state:"Published",createdAt:"2019-07-18T21:40:09.204Z",sageScore:6,diffs:[{njs:13,offset:0,notes:545,bombs:0,obstacles:8,nps:3.884,length:380,characteristic:"Standard",difficulty:"Hard",events:2247,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:140.308,paritySummary:{errors:73,warns:61,resets:0},stars:3.06},{njs:17,offset:0,notes:709,bombs:0,obstacles:6,nps:5.053,length:380,characteristic:"Standard",difficulty:"Expert",events:2247,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:140.308,paritySummary:{errors:87,warns:75,resets:0},stars:4.39}],downloadURL:"https://cdn.beatsaver.com/b8c98ffc598703aadb4a3cb921d2830d270b57a5.zip",coverURL:"https://cdn.beatsaver.com/b8c98ffc598703aadb4a3cb921d2830d270b57a5.jpg",previewURL:"https://cdn.beatsaver.com/b8c98ffc598703aadb4a3cb921d2830d270b57a5.mp3"}],createdAt:"2019-07-18T21:40:09.204Z",updatedAt:"2019-07-18T21:40:09.204Z",lastPublishedAt:"2019-07-18T21:40:09.204Z"},{id:"2693",name:"I Want You - DJMAX",description:"I love this song.",uploader:{id:4285521,name:"ejiejidayo",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fc58",avatar:"https://cdn.beatsaver.com/avatar/224894241279574016.png",type:"DISCORD"},metadata:{bpm:140,duration:109,songName:"I Want You",songSubName:"DJMAX",songAuthorName:"ejiejidayo",levelAuthorName:"ejiejidayo"},stats:{plays:0,downloads:6675,upvotes:2356,downvotes:54,score:.9318},uploaded:"2018-12-18T12:09:51Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"bb9de13539a2ab9a21f7ff68a2669f7887011456",key:"2693",state:"Published",createdAt:"2018-12-18T12:09:51Z",sageScore:4,diffs:[{njs:11,offset:0,notes:115,bombs:0,obstacles:25,nps:1.209,length:222,characteristic:"Standard",difficulty:"Easy",events:108,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:95.143,paritySummary:{errors:23,warns:12,resets:0},stars:1.08},{njs:12,offset:0,notes:173,bombs:0,obstacles:24,nps:1.786,length:226.031,characteristic:"Standard",difficulty:"Normal",events:108,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:96.871,paritySummary:{errors:13,warns:18,resets:0},stars:1.26},{njs:13,offset:0,notes:225,bombs:2,obstacles:42,nps:2.292,length:229.031,characteristic:"Standard",difficulty:"Hard",events:108,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:98.156,paritySummary:{errors:15,warns:24,resets:0},stars:1.71},{njs:14,offset:0,notes:405,bombs:2,obstacles:32,nps:4.126,length:229.031,characteristic:"Standard",difficulty:"Expert",events:106,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:98.156,paritySummary:{errors:33,warns:80,resets:0},stars:2.85}],downloadURL:"https://cdn.beatsaver.com/bb9de13539a2ab9a21f7ff68a2669f7887011456.zip",coverURL:"https://cdn.beatsaver.com/bb9de13539a2ab9a21f7ff68a2669f7887011456.jpg",previewURL:"https://cdn.beatsaver.com/bb9de13539a2ab9a21f7ff68a2669f7887011456.mp3"}],createdAt:"2018-12-18T12:09:51Z",updatedAt:"2018-12-18T12:09:51Z",lastPublishedAt:"2018-12-18T12:09:51Z"},{id:"a907",name:"[TheFatRat Pack] Monody (ft. Laura Brehm) - TheFatRat",description:'Here it is! The unofficial "TheFatRat" Music Pack in Beat Saber - with all beatmaps being singlehandedly made by me!\n\nAll songs included in TheFatRat Music Pack:\nMonody (ft. Laura Brehm) \nUnity \nWindfall \nXenogenesis \nTime Lapse \n\nGet the full song pack here: https://bsaber.com/thefatrat-music-pack/\n(Or you should just be able to find all the other ones on my beatsaver profile as well. Heres a link to my profile: https://beatsaver.com/uploader/5d47d586c5301900060b2f6c)\n\nSongcore mod is recommended (for custom colours)\nPlays best on Origins Environment\n\nMonody Stats:\nExpert+ - 1058 Notes | 3.73 NPS\nExpert - 907 Notes | 3.19 NPS\nHard - 677 Notes | 2.38 NPS\nNormal - 421 Notes | 1.48 NPS\nEasy - 283 Notes | 1.00 NPS\n\nRoughly 11-12 Hours of work\nGameplay: https://youtu.be/5LvJXf4Co4w\n\nObviously - A huge thanks to TheFatRat himself, for not only producing the songs in the first place (and allowing free access to use them for big and small content creators), but also being a huge inspiration to lots of artists out there and for making music that everyone can jam out to! We love you, TheFatRat!',uploader:{id:4284197,name:"timeweaver",uniqueSet:!0,hash:"5d47d586c5301900060b2f6c",avatar:"https://cdn.beatsaver.com/avatar/607399708121366529.png",type:"DISCORD"},metadata:{bpm:107,duration:283,songName:"Monody",songSubName:"ft. Laura Brehm",songAuthorName:"TheFatRat",levelAuthorName:"Timeweaver"},stats:{plays:0,downloads:9449,upvotes:2084,downvotes:44,score:.9316},uploaded:"2020-05-22T13:28:13.182Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8e82872941abe8c99e9ac86d9c063fc5aee57d52",key:"a907",state:"Published",createdAt:"2020-05-22T13:28:13.182Z",sageScore:7,diffs:[{njs:10,offset:1,notes:283,bombs:0,obstacles:63,nps:1.048,length:481.689,characteristic:"Standard",difficulty:"Easy",events:3844,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:270.106,paritySummary:{errors:43,warns:21,resets:0}},{njs:10,offset:1,notes:421,bombs:0,obstacles:62,nps:1.559,length:481.689,characteristic:"Standard",difficulty:"Normal",events:3844,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:270.106,paritySummary:{errors:33,warns:16,resets:0}},{njs:12,offset:.25,notes:677,bombs:0,obstacles:61,nps:2.507,length:481.656,characteristic:"Standard",difficulty:"Hard",events:3844,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:270.087,paritySummary:{errors:8,warns:6,resets:0}},{njs:15,offset:-.3,notes:907,bombs:0,obstacles:58,nps:3.358,length:481.689,characteristic:"Standard",difficulty:"Expert",events:3844,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:270.106,paritySummary:{errors:5,warns:3,resets:0}},{njs:18,offset:.4,notes:1058,bombs:0,obstacles:59,nps:3.917,length:481.689,characteristic:"Standard",difficulty:"ExpertPlus",events:3844,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:270.106,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/8e82872941abe8c99e9ac86d9c063fc5aee57d52.zip",coverURL:"https://cdn.beatsaver.com/8e82872941abe8c99e9ac86d9c063fc5aee57d52.jpg",previewURL:"https://cdn.beatsaver.com/8e82872941abe8c99e9ac86d9c063fc5aee57d52.mp3"}],createdAt:"2020-05-22T13:28:13.182Z",updatedAt:"2020-05-22T13:28:13.182Z",lastPublishedAt:"2020-05-22T13:28:13.182Z"},{id:"9cd2",name:"Grant - Are We Still Young",description:"i can't get enough grant in my life, send help\r\n\r\nif you don't like dodge walls, check the lawless diff @whipstickgostop",uploader:{id:4284569,name:"checkthepan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f3d5",avatar:"https://cdn.beatsaver.com/avatar/184355369189900290.png",type:"DISCORD"},metadata:{bpm:110,duration:216,songName:"Are We Still Young",songSubName:"",songAuthorName:"grant",levelAuthorName:"Checkthepan"},stats:{plays:0,downloads:6474,upvotes:1642,downvotes:28,score:.9315},uploaded:"2020-04-19T21:24:40.430Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d03086c064a4546e4c5bfe6ef79545850fd1ac98",key:"9cd2",state:"Published",createdAt:"2020-04-19T21:24:40.430Z",sageScore:7,diffs:[{njs:10,offset:0,notes:270,bombs:0,obstacles:14,nps:1.292,length:383,characteristic:"Standard",difficulty:"Easy",events:8571,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:208.909,paritySummary:{errors:88,warns:19,resets:0}},{njs:10,offset:0,notes:407,bombs:0,obstacles:13,nps:1.948,length:383,characteristic:"Standard",difficulty:"Normal",events:8571,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:208.909,paritySummary:{errors:51,warns:15,resets:0}},{njs:12,offset:0,notes:576,bombs:0,obstacles:140,nps:2.746,length:384.5,characteristic:"Standard",difficulty:"Hard",events:8571,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:209.727,paritySummary:{errors:4,warns:3,resets:0}},{njs:15,offset:-.25,notes:721,bombs:16,obstacles:138,nps:3.442,length:384,characteristic:"Standard",difficulty:"Expert",events:8571,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:209.455,paritySummary:{errors:0,warns:0,resets:3}},{njs:17,offset:.2,notes:928,bombs:46,obstacles:186,nps:4.431,length:384,characteristic:"Standard",difficulty:"ExpertPlus",events:8571,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:209.455,paritySummary:{errors:0,warns:0,resets:5}},{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:8571,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:17,offset:.2,notes:928,bombs:46,obstacles:145,nps:4.431,length:384,characteristic:"Lawless",difficulty:"ExpertPlus",events:8571,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:209.455,paritySummary:{errors:0,warns:0,resets:5}}],downloadURL:"https://cdn.beatsaver.com/d03086c064a4546e4c5bfe6ef79545850fd1ac98.zip",coverURL:"https://cdn.beatsaver.com/d03086c064a4546e4c5bfe6ef79545850fd1ac98.jpg",previewURL:"https://cdn.beatsaver.com/d03086c064a4546e4c5bfe6ef79545850fd1ac98.mp3"}],createdAt:"2020-04-19T21:24:40.430Z",updatedAt:"2020-04-19T21:24:40.430Z",lastPublishedAt:"2020-04-19T21:24:40.430Z"},{id:"6d63",name:"Take on Me - a-ha",description:"This song may be older than I am, but it still rocks even to this date. This made me compelled in making a map worthy of it for modern times. Mapped in a similar dancy style as some of my other maps.\n\nAudio: The album version is used but with the music video ending/outro.\n\nPreview Video:\nhttps://youtu.be/ouhgRepxZMk\n\nBPM: 168-169\nDuration: 3:39\nEasy, Normal, Hard and Expert difficulties:\n\nEasy:\n277 notes, 29 obstacles, 0 mines\n\nNormal:\n359 notes, 26 obstacles, 0 mines\n\nHard:\n549 notes, 26 obstacles, 0 mines\n\nExpert:\n852 notes, 23 obstacles, 0 mines\n\nThanks to Jessi81, Thomas, Kival Evan, Redmagi and Storm Knight for playtesting!\n\nEnjoy!",uploader:{id:4285318,name:"kolezan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fcbb",avatar:"https://cdn.beatsaver.com/avatar/220513618763055106.png",type:"DISCORD"},metadata:{bpm:168.868,duration:219,songName:"Take On Me",songSubName:"",songAuthorName:"A-ha",levelAuthorName:"Kolezan"},stats:{plays:0,downloads:15253,upvotes:3615,downvotes:108,score:.9314},uploaded:"2019-11-01T07:20:59.352Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ac7d867dccb85bd28eea0787eda92c25f849dcef",key:"6d63",state:"Published",createdAt:"2019-11-01T07:20:59.352Z",sageScore:6,diffs:[{njs:10,offset:1,notes:277,bombs:0,obstacles:29,nps:1.325,length:588.521,characteristic:"Standard",difficulty:"Easy",events:2868,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.106,paritySummary:{errors:63,warns:26,resets:0}},{njs:12,offset:1,notes:359,bombs:0,obstacles:26,nps:1.711,length:590.521,characteristic:"Standard",difficulty:"Normal",events:2868,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.816,paritySummary:{errors:63,warns:61,resets:0}},{njs:15,offset:1,notes:549,bombs:0,obstacles:26,nps:2.617,length:590.521,characteristic:"Standard",difficulty:"Hard",events:2868,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.816,paritySummary:{errors:62,warns:70,resets:0}},{njs:18,offset:1,notes:852,bombs:0,obstacles:23,nps:4.061,length:590.521,characteristic:"Standard",difficulty:"Expert",events:2868,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.816,paritySummary:{errors:30,warns:67,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ac7d867dccb85bd28eea0787eda92c25f849dcef.zip",coverURL:"https://cdn.beatsaver.com/ac7d867dccb85bd28eea0787eda92c25f849dcef.jpg",previewURL:"https://cdn.beatsaver.com/ac7d867dccb85bd28eea0787eda92c25f849dcef.mp3"}],createdAt:"2019-11-01T07:20:59.352Z",updatedAt:"2019-11-01T07:20:59.352Z",lastPublishedAt:"2019-11-01T07:20:59.352Z"},{id:"9956",name:"Or3o - Help Me",description:"Help Me, by Or3o\nThis was really fun to map but took a little longer than expected.\nAnother full diff spread map. Hope you enjoy!\nThanks to the testplayers: Sorukun, Wolfb34, and Johnny Dee",uploader:{id:15650,name:"alzaraf",uniqueSet:!0,hash:"5cff0b7798cc5a672c855ce3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855ce3?d=retro",type:"SIMPLE"},metadata:{bpm:110,duration:188,songName:"Help Me",songSubName:"",songAuthorName:"Or3o",levelAuthorName:"Alzaraf"},stats:{plays:0,downloads:2316,upvotes:1519,downvotes:24,score:.9313},uploaded:"2020-04-10T16:34:49.265Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c56040e307335a3e7116de76e4f07d472cfe28d3",key:"9956",state:"Published",createdAt:"2020-04-10T16:34:49.265Z",sageScore:7,diffs:[{njs:10,offset:0,notes:216,bombs:0,obstacles:0,nps:1.189,length:333,characteristic:"Standard",difficulty:"Easy",events:2212,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.636,paritySummary:{errors:56,warns:2,resets:0}},{njs:12,offset:0,notes:283,bombs:0,obstacles:0,nps:1.558,length:333,characteristic:"Standard",difficulty:"Normal",events:2212,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.636,paritySummary:{errors:61,warns:0,resets:0}},{njs:14,offset:0,notes:497,bombs:0,obstacles:0,nps:2.72,length:335,characteristic:"Standard",difficulty:"Hard",events:2212,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:182.727,paritySummary:{errors:28,warns:0,resets:0}},{njs:16,offset:0,notes:729,bombs:0,obstacles:0,nps:3.984,length:335.5,characteristic:"Standard",difficulty:"Expert",events:2212,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:.3,notes:816,bombs:0,obstacles:0,nps:4.459,length:335.5,characteristic:"Standard",difficulty:"ExpertPlus",events:2212,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c56040e307335a3e7116de76e4f07d472cfe28d3.zip",coverURL:"https://cdn.beatsaver.com/c56040e307335a3e7116de76e4f07d472cfe28d3.jpg",previewURL:"https://cdn.beatsaver.com/c56040e307335a3e7116de76e4f07d472cfe28d3.mp3"}],createdAt:"2020-04-10T16:34:49.265Z",updatedAt:"2020-04-10T16:34:49.265Z",lastPublishedAt:"2020-04-10T16:34:49.265Z"},{id:"6360",name:"Shirobon - Into the Zone",description:"",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:122,duration:180,songName:"Into the Zone",songSubName:"",songAuthorName:"Shirobon",levelAuthorName:"Rustic"},stats:{plays:0,downloads:2366,upvotes:1312,downvotes:17,score:.9313},uploaded:"2019-09-14T17:32:19.835Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c22b89db9dfef084c62412def48cdace57226f5e",key:"6360",state:"Published",createdAt:"2019-09-14T17:32:19.835Z",sageScore:6,diffs:[{njs:18,offset:0,notes:428,bombs:0,obstacles:615,nps:2.67,length:326,characteristic:"Standard",difficulty:"Expert",events:5077,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:160.328,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c22b89db9dfef084c62412def48cdace57226f5e.zip",coverURL:"https://cdn.beatsaver.com/c22b89db9dfef084c62412def48cdace57226f5e.jpg",previewURL:"https://cdn.beatsaver.com/c22b89db9dfef084c62412def48cdace57226f5e.mp3"}],createdAt:"2019-09-14T17:32:19.835Z",updatedAt:"2019-09-14T17:32:19.835Z",lastPublishedAt:"2019-09-14T17:32:19.835Z"},{id:"7de1",name:"Emergency (Nightcore Mix) - Kim Leoni",description:"78",uploader:{id:4285521,name:"ejiejidayo",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fc58",avatar:"https://cdn.beatsaver.com/avatar/224894241279574016.png",type:"DISCORD"},metadata:{bpm:174,duration:148,songName:"Emergency (Nightcore Mix)",songSubName:"",songAuthorName:"Kim Leoni",levelAuthorName:"ejiejidayo"},stats:{plays:0,downloads:7439,upvotes:2274,downvotes:52,score:.9313},uploaded:"2020-01-12T09:33:57.766Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c28ac0c2eac67c79b893ba3a1f432a27dd3a368b",key:"7de1",state:"Published",createdAt:"2020-01-12T09:33:57.766Z",sageScore:4,diffs:[{njs:14,offset:.6,notes:542,bombs:58,obstacles:187,nps:3.806,length:413,characteristic:"Standard",difficulty:"Easy",events:1749,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:142.414,paritySummary:{errors:67,warns:79,resets:23}},{njs:13,offset:0,notes:428,bombs:0,obstacles:126,nps:3.005,length:413,characteristic:"Standard",difficulty:"Hard",events:1749,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:142.414,paritySummary:{errors:2,warns:2,resets:0}},{njs:16,offset:.1,notes:599,bombs:0,obstacles:126,nps:4.196,length:414,characteristic:"Standard",difficulty:"Expert",events:1749,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:142.759,paritySummary:{errors:14,warns:44,resets:0}},{njs:17,offset:0,notes:805,bombs:0,obstacles:126,nps:5.639,length:414,characteristic:"Standard",difficulty:"ExpertPlus",events:1749,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:142.759,paritySummary:{errors:18,warns:27,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c28ac0c2eac67c79b893ba3a1f432a27dd3a368b.zip",coverURL:"https://cdn.beatsaver.com/c28ac0c2eac67c79b893ba3a1f432a27dd3a368b.jpg",previewURL:"https://cdn.beatsaver.com/c28ac0c2eac67c79b893ba3a1f432a27dd3a368b.mp3"}],createdAt:"2020-01-12T09:33:57.766Z",updatedAt:"2020-01-12T09:33:57.766Z",lastPublishedAt:"2020-01-12T09:33:57.766Z"},{id:"557f",name:"Enormous Penis - Da Vinci's Notebook",description:"This is my first time working on a A Capella song! which means no instruments and mapping to lyrics or lip noises. which means its usually not following the bpm closely (some parts are 1/8 faster or slower). I did like the challenge though and it was a nice change of pace! Thanks Austin for giving me a reason to try mapping A Capella.\n\n“Enormous Penis” is an A Capella song performed by the group Da Vinci’s Notebook for their album Brontosaurus, which was released in 2002. ",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:119,duration:164,songName:"Enormous Penis",songSubName:"",songAuthorName:"Da Vinci's Notebook",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:2614,upvotes:1367,downvotes:19,score:.9312},uploaded:"2019-07-04T13:21:52.797Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"2b61e7bd12379b9c1c193de7e28d1e816942c948",key:"557f",state:"Published",createdAt:"2019-07-04T13:21:52.797Z",sageScore:5,diffs:[{njs:12,offset:0,notes:518,bombs:55,obstacles:36,nps:3.252,length:315.875,characteristic:"Standard",difficulty:"Hard",events:714,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:159.265,paritySummary:{errors:29,warns:25,resets:10}}],downloadURL:"https://cdn.beatsaver.com/2b61e7bd12379b9c1c193de7e28d1e816942c948.zip",coverURL:"https://cdn.beatsaver.com/2b61e7bd12379b9c1c193de7e28d1e816942c948.jpg",previewURL:"https://cdn.beatsaver.com/2b61e7bd12379b9c1c193de7e28d1e816942c948.mp3"}],createdAt:"2019-07-04T13:21:52.797Z",updatedAt:"2019-07-04T13:21:52.797Z",lastPublishedAt:"2019-07-04T13:21:52.797Z"},{id:"5373",name:"Chito (CV: Minase Inori), Yuuri (CV: Kubo Yurika) - Ugoku, Ugoku",description:"A nice, chill map of the opening to one of my favorite animes to let you know that I haven't stopped mapping yet. I have quite a few maps I've been slowly making progress on and they should be coming out sometime soon!\n\nIn case you need a way to contact me or let me know of any issues: discord.gg/EVU9At2",uploader:{id:4288620,name:"hexagonial",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f2fb",avatar:"https://cdn.beatsaver.com/avatar/221442943045599232.png",type:"DISCORD"},metadata:{bpm:128,duration:91,songName:"Ugoku, Ugoku",songSubName:"",songAuthorName:"Chito (CV: Minase Inori), Yuuri (CV: Kubo Yurika)",levelAuthorName:"Hexagonial"},stats:{plays:0,downloads:3196,upvotes:1684,downvotes:30,score:.9312},uploaded:"2019-06-19T01:42:05.315Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7ac2bd85723acb7d4fd9957e62a7769700755c04",key:"5373",state:"Published",createdAt:"2019-06-19T01:42:05.315Z",sageScore:7,diffs:[{njs:10,offset:0,notes:95,bombs:8,obstacles:45,nps:1.081,length:187.5,characteristic:"Standard",difficulty:"Easy",events:1220,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.891,paritySummary:{errors:0,warns:0,resets:0}},{njs:10,offset:0,notes:152,bombs:8,obstacles:45,nps:1.729,length:187.5,characteristic:"Standard",difficulty:"Normal",events:1220,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.891,paritySummary:{errors:14,warns:0,resets:0}},{njs:13,offset:0,notes:243,bombs:4,obstacles:43,nps:2.765,length:187.5,characteristic:"Standard",difficulty:"Hard",events:1220,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.891,paritySummary:{errors:8,warns:0,resets:0}},{njs:15,offset:0,notes:326,bombs:0,obstacles:36,nps:3.709,length:187.5,characteristic:"Standard",difficulty:"Expert",events:1220,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.891,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:393,bombs:0,obstacles:39,nps:4.471,length:187.5,characteristic:"Standard",difficulty:"ExpertPlus",events:1220,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.891,paritySummary:{errors:1,warns:9,resets:0}}],downloadURL:"https://cdn.beatsaver.com/7ac2bd85723acb7d4fd9957e62a7769700755c04.zip",coverURL:"https://cdn.beatsaver.com/7ac2bd85723acb7d4fd9957e62a7769700755c04.jpg",previewURL:"https://cdn.beatsaver.com/7ac2bd85723acb7d4fd9957e62a7769700755c04.mp3"}],createdAt:"2019-06-19T01:42:05.315Z",updatedAt:"2019-06-19T01:42:05.315Z",lastPublishedAt:"2019-06-19T01:42:05.315Z"},{id:"10dcc",name:"The Chonk Chart™",description:"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n(account definitely isn't a Mawntee alt account no sir)",uploader:{id:1602,name:"chief-queef",uniqueSet:!0,hash:"5f9a4d2a030219000627c2bf",avatar:"https://cdn.beatsaver.com/avatar/1602.jpg",type:"SIMPLE"},metadata:{bpm:69,duration:23,songName:"Chonk Chart",songSubName:"",songAuthorName:"Gyan Ko",levelAuthorName:"Chief Queef"},stats:{plays:0,downloads:3653,upvotes:1784,downvotes:34,score:.9311},uploaded:"2020-11-12T09:20:18.282Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b966edcba3f8187dacd633dabbf05e128e57d21b",key:"10dcc",state:"Published",createdAt:"2020-11-12T09:20:18.282Z",sageScore:4,diffs:[{njs:6.9,offset:6.9,notes:7,bombs:0,obstacles:0,nps:.447,length:18,characteristic:"Standard",difficulty:"Easy",events:312,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:15.652,paritySummary:{errors:6,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b966edcba3f8187dacd633dabbf05e128e57d21b.zip",coverURL:"https://cdn.beatsaver.com/b966edcba3f8187dacd633dabbf05e128e57d21b.jpg",previewURL:"https://cdn.beatsaver.com/b966edcba3f8187dacd633dabbf05e128e57d21b.mp3"}],createdAt:"2020-11-12T09:20:18.282Z",updatedAt:"2020-11-12T09:20:18.282Z",lastPublishedAt:"2020-11-12T09:20:18.282Z"},{id:"6b8c",name:"TheFatRat - MAYDAY feat. Laura Brehm",description:"--- PLEASE HAVE CHROMALITE INSTALLED FOR THE LIGHTSHOW AND LIGHTING EVENTS ---\n\nExpert+ (M A Y D A Y): Oddloop\nEasy - Expert: RedMagi\nLights: Aaltopahwi",uploader:{id:4284400,name:"oddloop",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fd45",avatar:"https://cdn.beatsaver.com/avatar/173241614192476161.png",type:"DISCORD"},metadata:{bpm:150,duration:249,songName:"MAYDAY",songSubName:"feat. Laura Brehm",songAuthorName:"TheFatRat",levelAuthorName:"Oddloop, RedMagi & AaltopahWi"},stats:{plays:0,downloads:8888,upvotes:4606,downvotes:154,score:.9311},uploaded:"2019-10-22T19:11:34.707Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"58e760690ffb379864d76b06505f4056e84fbe84",key:"6b8c",state:"Published",createdAt:"2019-10-22T19:11:34.707Z",sageScore:8,diffs:[{njs:10,offset:1,notes:251,bombs:0,obstacles:0,nps:1.077,length:582.5,characteristic:"Standard",difficulty:"Easy",events:20350,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:233,paritySummary:{errors:7,warns:6,resets:0},stars:.8},{njs:12,offset:1,notes:434,bombs:0,obstacles:0,nps:1.863,length:582.5,characteristic:"Standard",difficulty:"Normal",events:20350,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:233,paritySummary:{errors:11,warns:10,resets:0},stars:1.16},{njs:14,offset:1,notes:541,bombs:16,obstacles:0,nps:2.322,length:582.5,characteristic:"Standard",difficulty:"Hard",events:20350,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:233,paritySummary:{errors:7,warns:8,resets:1},stars:1.53},{njs:16,offset:.5,notes:769,bombs:12,obstacles:0,nps:3.204,length:600,characteristic:"Standard",difficulty:"Expert",events:20350,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:240,paritySummary:{errors:10,warns:9,resets:1},stars:2.17},{njs:23,offset:.5,notes:1655,bombs:0,obstacles:49,nps:6.896,length:600,characteristic:"Standard",difficulty:"ExpertPlus",events:20314,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:240,paritySummary:{errors:2,warns:0,resets:0},stars:5.3},{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:20350,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/58e760690ffb379864d76b06505f4056e84fbe84.zip",coverURL:"https://cdn.beatsaver.com/58e760690ffb379864d76b06505f4056e84fbe84.jpg",previewURL:"https://cdn.beatsaver.com/58e760690ffb379864d76b06505f4056e84fbe84.mp3"}],createdAt:"2019-10-22T19:11:34.707Z",updatedAt:"2019-10-22T19:11:34.707Z",lastPublishedAt:"2019-10-22T19:11:34.707Z"},{id:"1ff0",name:"Flux Pavilion - I can't stop | 100k Contest",description:"This is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes. Go to https://bsaber.com/100k-contest/ to register!",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:140,duration:148,songName:"I can't stop",songSubName:"Flux Pavilion",songAuthorName:"Rustic",levelAuthorName:"rustic"},stats:{plays:0,downloads:11299,upvotes:4364,downvotes:143,score:.9311},uploaded:"2018-11-12T17:55:03Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"8d9df176c94ecf5c7725457525b6f959f5ef9296",key:"1ff0",state:"Published",createdAt:"2018-11-12T17:55:03Z",sageScore:6,diffs:[{njs:10,offset:0,notes:145,bombs:0,obstacles:0,nps:1.057,length:320,characteristic:"Standard",difficulty:"Easy",events:1045,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:137.143,paritySummary:{errors:52,warns:3,resets:0},stars:.69},{njs:10,offset:0,notes:212,bombs:0,obstacles:0,nps:1.546,length:320,characteristic:"Standard",difficulty:"Normal",events:0,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:137.143,paritySummary:{errors:8,warns:17,resets:0},stars:.92},{njs:12,offset:0,notes:342,bombs:0,obstacles:0,nps:2.509,length:318,characteristic:"Standard",difficulty:"Hard",events:2634,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:136.286,paritySummary:{errors:5,warns:29,resets:0},stars:1.78},{njs:14,offset:0,notes:372,bombs:0,obstacles:15,nps:2.73,length:318,characteristic:"Standard",difficulty:"Expert",events:2634,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:136.286,paritySummary:{errors:17,warns:34,resets:0},stars:1.78}],downloadURL:"https://cdn.beatsaver.com/8d9df176c94ecf5c7725457525b6f959f5ef9296.zip",coverURL:"https://cdn.beatsaver.com/8d9df176c94ecf5c7725457525b6f959f5ef9296.jpg",previewURL:"https://cdn.beatsaver.com/8d9df176c94ecf5c7725457525b6f959f5ef9296.mp3"}],createdAt:"2018-11-12T17:55:03Z",updatedAt:"2018-11-12T17:55:03Z",lastPublishedAt:"2018-11-12T17:55:03Z"},{id:"e01a",name:"The Spectre - Wallmap",description:"Have you ever seen a call of duty montage from the early 2010's? maybe Russian guy playing a piano in public? \n \nIf you've ever heard of the name Alan Walker then you've heard of \"The Spectre\" so thanks to some help from a friend I'm here to bring you my newest masterpiece. A song with decently placed blocks... wow you'd think by now id actually do a new song but no. I'm here to fix The Spectre and give it the attention it deserves.\n\nOfficial Release Video:\nhttps://youtu.be/ljxO7plPgpA\n\nLight did a little play-through here if you curious\nhttps://www.youtube.com/watch?v=l4qjiqE-hqQ&t=12s",uploader:{id:3449,name:"rizthesnuggie",uniqueSet:!0,hash:"5f051045c51ba90006d92da9",avatar:"https://www.gravatar.com/avatar/5f051045c51ba90006d92da9?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:190,songName:"The Spectre",songSubName:"[Non NCS]",songAuthorName:"Alan Walker",levelAuthorName:"Riz and KyleT"},stats:{plays:0,downloads:2423,upvotes:1381,downvotes:20,score:.9309},uploaded:"2020-08-29T19:50:28.236Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f11409e4e08f2463be65c0e56dfc6f6b00e25aeb",key:"e01a",state:"Published",createdAt:"2020-08-29T19:50:28.236Z",sageScore:1,diffs:[{njs:16,offset:-.5,notes:749,bombs:25,obstacles:34105,nps:4.048,length:394.75,characteristic:"Standard",difficulty:"Expert",events:1,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:185.039,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:-.5,notes:0,bombs:0,obstacles:34105,nps:0,length:0,characteristic:"Lightshow",difficulty:"Expert",events:1,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f11409e4e08f2463be65c0e56dfc6f6b00e25aeb.zip",coverURL:"https://cdn.beatsaver.com/f11409e4e08f2463be65c0e56dfc6f6b00e25aeb.jpg",previewURL:"https://cdn.beatsaver.com/f11409e4e08f2463be65c0e56dfc6f6b00e25aeb.mp3"}],createdAt:"2020-08-29T19:50:28.236Z",updatedAt:"2020-08-29T19:50:28.236Z",lastPublishedAt:"2020-08-29T19:50:28.236Z"},{id:"67a8",name:"world.execute(me); - Mili (Fixed)",description:"71",uploader:{id:4285521,name:"ejiejidayo",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fc58",avatar:"https://cdn.beatsaver.com/avatar/224894241279574016.png",type:"DISCORD"},metadata:{bpm:130,duration:209,songName:"world.execute (me) ;",songSubName:"",songAuthorName:"Mili",levelAuthorName:"ejiejidayo"},stats:{plays:0,downloads:4119,upvotes:1832,downvotes:36,score:.9309},uploaded:"2019-10-03T22:51:56.567Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"cfc9d5013d12adb3ca5e0a4a31d8a06f2081dbe6",key:"67a8",state:"Published",createdAt:"2019-10-03T22:51:56.567Z",sageScore:5,diffs:[{njs:15,offset:0,notes:462,bombs:0,obstacles:610,nps:2.239,length:447,characteristic:"Standard",difficulty:"Hard",events:1025,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:206.308,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:984,bombs:0,obstacles:610,nps:4.764,length:447.5,characteristic:"Standard",difficulty:"Expert",events:1025,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:206.538,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/cfc9d5013d12adb3ca5e0a4a31d8a06f2081dbe6.zip",coverURL:"https://cdn.beatsaver.com/cfc9d5013d12adb3ca5e0a4a31d8a06f2081dbe6.jpg",previewURL:"https://cdn.beatsaver.com/cfc9d5013d12adb3ca5e0a4a31d8a06f2081dbe6.mp3"}],createdAt:"2019-10-03T22:51:56.567Z",updatedAt:"2019-10-03T22:51:56.567Z",lastPublishedAt:"2019-10-03T22:51:56.567Z"},{id:"36bf",name:"Daft Punk - Aerodynamic",description:"An essential classic. You might want to stretch first...\r\nExpert+ and Hard.\r\n\r\nPreview: https://youtu.be/1dAwipwIgDg\r\n\r\nCheck out my other maps, too! If you like them, consider subscribing on YouTube to find out when new maps go live.\r\n\r\nThanks for playing!\r\n\r\nhttps://www.twitch.tv/syntheseizure",uploader:{id:31265,name:"syntheseizure",uniqueSet:!0,hash:"5cff0b7698cc5a672c8546bd",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8546bd?d=retro",type:"SIMPLE"},metadata:{bpm:123,duration:214,songName:"Aerodynamic",songSubName:"Daft Punk",songAuthorName:"Syntheseizure",levelAuthorName:"Syntheseizure"},stats:{plays:0,downloads:5893,upvotes:2763,downvotes:73,score:.9309},uploaded:"2019-02-16T17:49:39Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"092840ca9a391f34c6af32ac1d6475498de74407",key:"36bf",state:"Published",createdAt:"2019-02-16T17:49:39Z",sageScore:5,diffs:[{njs:12,offset:0,notes:650,bombs:0,obstacles:48,nps:3.2,length:416,characteristic:"Standard",difficulty:"Hard",events:2022,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:202.927,paritySummary:{errors:32,warns:11,resets:0}},{njs:14,offset:0,notes:1022,bombs:0,obstacles:48,nps:5.031,length:416,characteristic:"Standard",difficulty:"ExpertPlus",events:2022,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:202.927,paritySummary:{errors:48,warns:27,resets:0}}],downloadURL:"https://cdn.beatsaver.com/092840ca9a391f34c6af32ac1d6475498de74407.zip",coverURL:"https://cdn.beatsaver.com/092840ca9a391f34c6af32ac1d6475498de74407.jpg",previewURL:"https://cdn.beatsaver.com/092840ca9a391f34c6af32ac1d6475498de74407.mp3"}],createdAt:"2019-02-16T17:49:39Z",updatedAt:"2019-02-16T17:49:39Z",lastPublishedAt:"2019-02-16T17:49:39Z"},{id:"381a",name:"Deep in Abyss [Made in Abyss Opening] - Riko (CV: Miyu Tomita), Reg (CV: Ise Mariya)",description:"Deep in Abyss is the opening song for Made in Abyss and is sung by Riko voiced by Miyu Tomita and Reg voiced by Ise Mariya.\r\n\r\nCheckout the map preview: https://www.youtube.com/watch?v=ZMQz-z57kKo",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:135,duration:221,songName:"Deep in Abyss",songSubName:"Riko (CV: Miyu Tomita), Reg (CV: Ise Mariya)",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:3012,upvotes:1850,downvotes:37,score:.9308},uploaded:"2019-02-21T01:04:41Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c586288044251cc2b2e1d6ac3817214a9ea02302",key:"381a",state:"Published",createdAt:"2019-02-21T01:04:41Z",sageScore:6,diffs:[{njs:15,offset:0,notes:1013,bombs:0,obstacles:33,nps:4.685,length:486.5,characteristic:"Standard",difficulty:"Expert",events:2230,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.222,paritySummary:{errors:41,warns:46,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c586288044251cc2b2e1d6ac3817214a9ea02302.zip",coverURL:"https://cdn.beatsaver.com/c586288044251cc2b2e1d6ac3817214a9ea02302.jpg",previewURL:"https://cdn.beatsaver.com/c586288044251cc2b2e1d6ac3817214a9ea02302.mp3"}],createdAt:"2019-02-21T01:04:41Z",updatedAt:"2019-02-21T01:04:41Z",lastPublishedAt:"2019-02-21T01:04:41Z"},{id:"a168",name:"Yunomi - Oedo Controller/大江戸コントローラー feat. TORIENA【Wall Map】",description:"【requires】 Noodle Extensions Chroma\nhttps://youtu.be/5D1WTufQ5dM ",uploader:{id:4285467,name:"fefy",uniqueSet:!0,hash:"5cff0b7798cc5a672c856908",avatar:"https://cdn.beatsaver.com/avatar/380656936460484620.png",type:"DISCORD"},metadata:{bpm:115,duration:257,songName:"Oedo Controller",songSubName:"feat. TORIENA",songAuthorName:"Yunomi",levelAuthorName:"Fefy"},stats:{plays:0,downloads:2659,upvotes:1344,downvotes:19,score:.9307},uploaded:"2020-05-02T09:37:24.020Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"cc3e7aefe1e878057f83d9018eaf977d9f69a1bb",key:"a168",state:"Published",createdAt:"2020-05-02T09:37:24.020Z",sageScore:7,diffs:[{njs:15,offset:0,notes:0,bombs:0,obstacles:55472,nps:0,length:0,characteristic:"Standard",difficulty:"Easy",events:2395,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:15,offset:0,notes:816,bombs:0,obstacles:55472,nps:3.265,length:479,characteristic:"Standard",difficulty:"Expert",events:2395,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:249.913,paritySummary:{errors:20,warns:12,resets:0}}],downloadURL:"https://cdn.beatsaver.com/cc3e7aefe1e878057f83d9018eaf977d9f69a1bb.zip",coverURL:"https://cdn.beatsaver.com/cc3e7aefe1e878057f83d9018eaf977d9f69a1bb.jpg",previewURL:"https://cdn.beatsaver.com/cc3e7aefe1e878057f83d9018eaf977d9f69a1bb.mp3"}],createdAt:"2020-05-02T09:37:24.020Z",updatedAt:"2020-05-02T09:37:24.020Z",lastPublishedAt:"2020-05-02T09:37:24.020Z"},{id:"6adc",name:"Rasputin (Funk Overload)",description:"Huge thanks to Whipstickgostop for remastering the audio of this funky beat!",uploader:{id:4285169,name:"ryger",uniqueSet:!0,hash:"5cff0b7798cc5a672c855a42",avatar:"https://cdn.beatsaver.com/avatar/169266024502263808.png",type:"DISCORD"},metadata:{bpm:152,duration:225,songName:"Rasputin (Funk Overload)",songSubName:"",songAuthorName:"Boney M",levelAuthorName:"Ryger"},stats:{plays:0,downloads:10264,upvotes:4935,downvotes:173,score:.9305},uploaded:"2019-10-19T23:00:58.938Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e979073ecfbb283675d03453af39109957819f35",key:"6adc",state:"Published",createdAt:"2019-10-19T23:00:58.938Z",sageScore:5,diffs:[{njs:16,offset:0,notes:988,bombs:0,obstacles:0,nps:4.542,length:551.125,characteristic:"Standard",difficulty:"Hard",events:4202,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.549,paritySummary:{errors:15,warns:14,resets:0}},{njs:16,offset:0,notes:1080,bombs:0,obstacles:0,nps:4.964,length:551.125,characteristic:"Standard",difficulty:"Expert",events:4202,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.549,paritySummary:{errors:25,warns:21,resets:0}},{njs:18,offset:0,notes:1164,bombs:0,obstacles:0,nps:5.351,length:551.125,characteristic:"Standard",difficulty:"ExpertPlus",events:4196,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.549,paritySummary:{errors:21,warns:27,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e979073ecfbb283675d03453af39109957819f35.zip",coverURL:"https://cdn.beatsaver.com/e979073ecfbb283675d03453af39109957819f35.jpg",previewURL:"https://cdn.beatsaver.com/e979073ecfbb283675d03453af39109957819f35.mp3"}],createdAt:"2019-10-19T23:00:58.938Z",updatedAt:"2019-10-19T23:00:58.938Z",lastPublishedAt:"2019-10-19T23:00:58.938Z"},{id:"3ae2",name:"I Don't Wanna Be In Love (Dance Floor Anthem) - Good Charlotte",description:"I Dont Wanna Be In Love (Dance Floor Anthem) - Good Charlotte\r\nhttps://www.youtube.com/watch?v=pbpeMN_vFRM",uploader:{id:4285982,name:"downycat",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ede5",avatar:"https://cdn.beatsaver.com/avatar/173538829888782336.png",type:"DISCORD"},metadata:{bpm:125,duration:243,songName:"I Don't Wanna Be In Love (Dance Floor Anthem)",songSubName:"Good Charlotte",songAuthorName:"DownyCat",levelAuthorName:"downycat"},stats:{plays:0,downloads:4672,upvotes:991,downvotes:8,score:.9305},uploaded:"2019-03-02T17:41:39Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f0bef11ce8866052770c42ed855e5d21e935614c",key:"3ae2",state:"Published",createdAt:"2019-03-02T17:41:39Z",sageScore:6,diffs:[{njs:10,offset:0,notes:372,bombs:0,obstacles:29,nps:1.563,length:496,characteristic:"Standard",difficulty:"Normal",events:5639,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:238.08,paritySummary:{errors:19,warns:7,resets:0}},{njs:12,offset:0,notes:796,bombs:0,obstacles:20,nps:3.343,length:496,characteristic:"Standard",difficulty:"Hard",events:5639,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:238.08,paritySummary:{errors:18,warns:26,resets:0}},{njs:14,offset:0,notes:1174,bombs:0,obstacles:10,nps:4.931,length:496,characteristic:"Standard",difficulty:"Expert",events:5639,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:238.08,paritySummary:{errors:27,warns:36,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f0bef11ce8866052770c42ed855e5d21e935614c.zip",coverURL:"https://cdn.beatsaver.com/f0bef11ce8866052770c42ed855e5d21e935614c.jpg",previewURL:"https://cdn.beatsaver.com/f0bef11ce8866052770c42ed855e5d21e935614c.mp3"}],createdAt:"2019-03-02T17:41:39Z",updatedAt:"2019-03-02T17:41:39Z",lastPublishedAt:"2019-03-02T17:41:39Z"},{id:"706b",name:"Guren No Yumiya (TV Size) [Attack On Titan Opening] - Linked Horizon",description:"This map was converted from one of my old maps.\n\nFeel free to DM me on discord @Joetastic#2501",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:180.676,duration:93,songName:"Guren no Yumiya (TV Size)",songSubName:"",songAuthorName:"Linked Horizon",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:8096,upvotes:2435,downvotes:61,score:.9304},uploaded:"2019-11-17T07:01:53.007Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c00412845c48fb65fc30f16d902af542ca2c88ac",key:"706b",state:"Published",createdAt:"2019-11-17T07:01:53.007Z",sageScore:4,diffs:[{njs:11,offset:0,notes:299,bombs:0,obstacles:0,nps:3.545,length:253.998,characteristic:"Standard",difficulty:"Hard",events:2393,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:84.349,paritySummary:{errors:10,warns:7,resets:0}},{njs:13,offset:0,notes:375,bombs:0,obstacles:0,nps:4.446,length:253.998,characteristic:"Standard",difficulty:"Expert",events:2472,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:84.349,paritySummary:{errors:21,warns:20,resets:0}},{njs:15,offset:0,notes:460,bombs:0,obstacles:0,nps:5.454,length:253.998,characteristic:"Standard",difficulty:"ExpertPlus",events:2472,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:84.349,paritySummary:{errors:22,warns:20,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c00412845c48fb65fc30f16d902af542ca2c88ac.zip",coverURL:"https://cdn.beatsaver.com/c00412845c48fb65fc30f16d902af542ca2c88ac.jpg",previewURL:"https://cdn.beatsaver.com/c00412845c48fb65fc30f16d902af542ca2c88ac.mp3"}],createdAt:"2019-11-17T07:01:53.007Z",updatedAt:"2019-11-17T07:01:53.007Z",lastPublishedAt:"2019-11-17T07:01:53.007Z"},{id:"88bd",name:"Pornhub Intro",description:"182nd Map\nCollab with Monteblanco, Neko, shuuxruri, Suzuki.dll, Zoinkai & Kalmer\n\nYoutube Preview : https://www.youtube.com/watch?v=7V8go6p4P2E",uploader:{id:4284588,name:"rigid",uniqueSet:!0,hash:"5cff0b7598cc5a672c852224",avatar:"https://cdn.beatsaver.com/avatar/295613108947386368.png",type:"DISCORD"},metadata:{bpm:120,duration:5,songName:"Pornhub Intro",songSubName:"",songAuthorName:"Yes",levelAuthorName:"Rigid, Monteblanco, Neko, shuuxruri, Suzuki.dll, Zoinkai & Kalmer"},stats:{plays:0,downloads:3144,upvotes:2182,downvotes:51,score:.9303},uploaded:"2020-02-19T21:36:55.060Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"3ff5c30044bc8d0dfe5aae6b9c665a6367732242",key:"88bd",state:"Published",createdAt:"2020-02-19T21:36:55.060Z",sageScore:3,diffs:[{njs:14,offset:0,notes:10,bombs:0,obstacles:0,nps:4.706,length:4.25,characteristic:"Standard",difficulty:"ExpertPlus",events:93,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:2.125,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/3ff5c30044bc8d0dfe5aae6b9c665a6367732242.zip",coverURL:"https://cdn.beatsaver.com/3ff5c30044bc8d0dfe5aae6b9c665a6367732242.jpg",previewURL:"https://cdn.beatsaver.com/3ff5c30044bc8d0dfe5aae6b9c665a6367732242.mp3"}],createdAt:"2020-02-19T21:36:55.060Z",updatedAt:"2020-02-19T21:36:55.060Z",lastPublishedAt:"2020-02-19T21:36:55.060Z"},{id:"3f79",name:"Here With Me (feat. CHVRCHES) - Marshmello",description:"Expert Playthrough : https://youtu.be/okOkJ55es8A",uploader:{id:13320,name:"novashaft",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ee55",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee55?d=retro",type:"SIMPLE"},metadata:{bpm:100,duration:158,songName:"Here With Me (feat. CHVRCHES)",songSubName:"Marshmello",songAuthorName:"NovaShaft",levelAuthorName:"novashaft"},stats:{plays:0,downloads:6739,upvotes:2077,downvotes:47,score:.9303},uploaded:"2019-03-21T15:12:40Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"bae9f42e64c14c8b1740c5bedc0e1c1db8c33c7d",key:"3f79",state:"Published",createdAt:"2019-03-21T15:12:40Z",sageScore:5,diffs:[{njs:11,offset:0,notes:253,bombs:0,obstacles:35,nps:1.67,length:252.5,characteristic:"Standard",difficulty:"Normal",events:626,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:151.5,paritySummary:{errors:27,warns:6,resets:0}},{njs:12,offset:0,notes:306,bombs:0,obstacles:35,nps:2.02,length:252.5,characteristic:"Standard",difficulty:"Hard",events:627,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:151.5,paritySummary:{errors:13,warns:8,resets:0}},{njs:14,offset:0,notes:450,bombs:0,obstacles:35,nps:2.97,length:252.5,characteristic:"Standard",difficulty:"Expert",events:627,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:151.5,paritySummary:{errors:28,warns:24,resets:0}}],downloadURL:"https://cdn.beatsaver.com/bae9f42e64c14c8b1740c5bedc0e1c1db8c33c7d.zip",coverURL:"https://cdn.beatsaver.com/bae9f42e64c14c8b1740c5bedc0e1c1db8c33c7d.jpg",previewURL:"https://cdn.beatsaver.com/bae9f42e64c14c8b1740c5bedc0e1c1db8c33c7d.mp3"}],createdAt:"2019-03-21T15:12:40Z",updatedAt:"2019-03-21T15:12:40Z",lastPublishedAt:"2019-03-21T15:12:40Z"},{id:"238a",name:"Dance of the Sugar Plum Fairy - Lindsey Stirling",description:"EDIT: Thanks to everyone who voted for this map in the Christmas contest!\n\nTheme from the nutcracker.\n\nExpert+ preview: https://youtu.be/naaei24FZAY\nFollow me on Twitter u won't\nhttps://twitter.com/aggrogahu\n\nHard and Normal are kinda close to OST standards, so might be easier for custom standards.\n\nThanks to Redmagi, baxter395, AaltopahWi, and Kolezan for their help and feedback.",uploader:{id:4284613,name:"aggrogahu",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fdad",avatar:"https://cdn.beatsaver.com/avatar/158363872649150464.png",type:"DISCORD"},metadata:{bpm:140,duration:158,songName:"Dance of the Sugar Plum Fairy",songSubName:"Lindsey Stirling",songAuthorName:"aggrogahu",levelAuthorName:"aggrogahu"},stats:{plays:0,downloads:4103,upvotes:1711,downvotes:33,score:.9302},uploaded:"2018-12-03T09:40:02Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6b901c30686a9fa2935271177fc1b57dd072aae8",key:"238a",state:"Published",createdAt:"2018-12-03T09:40:02Z",sageScore:4,diffs:[{njs:10,offset:0,notes:219,bombs:2,obstacles:29,nps:1.494,length:342,characteristic:"Standard",difficulty:"Normal",events:547,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:146.571,paritySummary:{errors:89,warns:12,resets:0}},{njs:10,offset:0,notes:373,bombs:2,obstacles:16,nps:2.545,length:342,characteristic:"Standard",difficulty:"Hard",events:547,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:146.571,paritySummary:{errors:54,warns:10,resets:0}},{njs:15,offset:0,notes:721,bombs:4,obstacles:32,nps:4.919,length:342,characteristic:"Standard",difficulty:"ExpertPlus",events:547,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:146.571,paritySummary:{errors:51,warns:67,resets:1}}],downloadURL:"https://cdn.beatsaver.com/6b901c30686a9fa2935271177fc1b57dd072aae8.zip",coverURL:"https://cdn.beatsaver.com/6b901c30686a9fa2935271177fc1b57dd072aae8.jpg",previewURL:"https://cdn.beatsaver.com/6b901c30686a9fa2935271177fc1b57dd072aae8.mp3"}],createdAt:"2018-12-03T09:40:02Z",updatedAt:"2018-12-03T09:40:02Z",lastPublishedAt:"2018-12-03T09:40:02Z"},{id:"ebb",name:"Do I Wanna Know? - Arctic Monkeys",description:"X/H/N/E difficulties, full manual lighting.\r\n\r\nExpert Playthrough: https://www.youtube.com/watch?v=ejmDJxe1Vzg\r\n\r\nCreated on twitch in one sitting during a tutorial stream.\r\nFollow us and come say hi on twitch! https://www.twitch.tv/freeek\r\n\r\nHave fun :)\r\n\r\nFreeek!",uploader:{id:47581,name:"freeek",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8ad",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8ad?d=retro",type:"SIMPLE"},metadata:{bpm:85,duration:273,songName:"Do I Wanna Know?",songSubName:"Arctic Monkeys",songAuthorName:"Freeek",levelAuthorName:"freeek"},stats:{plays:0,downloads:6011,upvotes:2491,downvotes:64,score:.9302},uploaded:"2018-08-09T18:05:46Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0fa854bb295e56d8c77da226a3ca41c0070cc793",key:"ebb",state:"Published",createdAt:"2018-08-09T18:05:46Z",sageScore:6,diffs:[{njs:10,offset:0,notes:372,bombs:0,obstacles:71,nps:1.387,length:380,characteristic:"Standard",difficulty:"Easy",events:1154,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:268.235,paritySummary:{errors:84,warns:10,resets:0}},{njs:10,offset:0,notes:522,bombs:0,obstacles:72,nps:1.946,length:380,characteristic:"Standard",difficulty:"Normal",events:1154,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:268.235,paritySummary:{errors:53,warns:54,resets:0}},{njs:10,offset:0,notes:708,bombs:0,obstacles:72,nps:2.639,length:380,characteristic:"Standard",difficulty:"Hard",events:1154,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:268.235,paritySummary:{errors:56,warns:74,resets:0}},{njs:10,offset:0,notes:863,bombs:0,obstacles:75,nps:3.217,length:380,characteristic:"Standard",difficulty:"Expert",events:1154,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:268.235,paritySummary:{errors:79,warns:105,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0fa854bb295e56d8c77da226a3ca41c0070cc793.zip",coverURL:"https://cdn.beatsaver.com/0fa854bb295e56d8c77da226a3ca41c0070cc793.jpg",previewURL:"https://cdn.beatsaver.com/0fa854bb295e56d8c77da226a3ca41c0070cc793.mp3"}],createdAt:"2018-08-09T18:05:46Z",updatedAt:"2018-08-09T18:05:46Z",lastPublishedAt:"2018-08-09T18:05:46Z"},{id:"80fb",name:"[Noodlegames] Lifelight (Camellia's Hardstyle Bootleg)",description:"The Ramen Noodle group is here to bring you a map pack full of our favorite video game soundtracks and game-inspired music!\r\n\r\nCamellia + Iconic Song = PepeJam\r\nHas RGB lights (use chromalite pls, you'll make me cry if you don't)\r\n\r\nStandard mapped by +1 Rabbit\r\nLots of love provided by CyanSnow\r\nOne Saber and Lights mapped by Aeroluna\r\n\r\n150 BPM / 3:47 Duration\r\n\r\n[Standard]:\r\nEasy - 284 notes (1.16 NPS)\r\nNormal - 355 notes (1.56 NPS)\r\nHard - 661 notes (2.91 NPS)\r\nExpert - 899 notes (3.96 NPS)\r\nExpert+ - 1036 notes (4.56 NPS)\r\n\r\n[One Saber]:\r\nExpert - 622 notes (2.73 NPS)\r\nExpert+ - 692 notes (3.05 NPS)\r\n\r\nLights preview: https://youtu.be/qk06uZpgr7E",uploader:{id:4284266,name:"aeroluna",uniqueSet:!0,hash:"5cff0b7698cc5a672c854907",avatar:"https://cdn.beatsaver.com/avatar/193636171497209856.png",type:"DISCORD"},metadata:{bpm:150,duration:227,songName:"Lifelight",songSubName:"(Camellia's Hardstyle Bootleg)",songAuthorName:"Camellia",levelAuthorName:"+1 Rabbit & Aeroluna"},stats:{plays:0,downloads:4528,upvotes:1540,downvotes:27,score:.9301},uploaded:"2020-01-24T23:00:27.676Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"bb2bd82208d452badc4acaf877dc2c4abd0fab15",key:"80fb",state:"Published",createdAt:"2020-01-24T23:00:27.676Z",sageScore:4,diffs:[{njs:12,offset:0,notes:264,bombs:0,obstacles:8,nps:1.231,length:536,characteristic:"Standard",difficulty:"Easy",events:27741,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:214.4,paritySummary:{errors:116,warns:8,resets:0}},{njs:12,offset:0,notes:355,bombs:0,obstacles:55,nps:1.656,length:536,characteristic:"Standard",difficulty:"Normal",events:27741,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:214.4,paritySummary:{errors:77,warns:24,resets:0}},{njs:14,offset:0,notes:661,bombs:0,obstacles:99,nps:3.083,length:536,characteristic:"Standard",difficulty:"Hard",events:27741,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:214.4,paritySummary:{errors:39,warns:29,resets:0}},{njs:16,offset:.25,notes:899,bombs:0,obstacles:103,nps:4.193,length:536,characteristic:"Standard",difficulty:"Expert",events:27741,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:214.4,paritySummary:{errors:2,warns:0,resets:0}},{njs:19,offset:-.2,notes:1036,bombs:0,obstacles:46,nps:4.832,length:536,characteristic:"Standard",difficulty:"ExpertPlus",events:27741,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:214.4,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:622,bombs:0,obstacles:0,nps:2.777,length:560,characteristic:"OneSaber",difficulty:"Expert",events:27741,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:224,paritySummary:{errors:7,warns:1,resets:0}},{njs:18,offset:0,notes:692,bombs:0,obstacles:0,nps:3.089,length:560,characteristic:"OneSaber",difficulty:"ExpertPlus",events:27741,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:224,paritySummary:{errors:3,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/bb2bd82208d452badc4acaf877dc2c4abd0fab15.zip",coverURL:"https://cdn.beatsaver.com/bb2bd82208d452badc4acaf877dc2c4abd0fab15.jpg",previewURL:"https://cdn.beatsaver.com/bb2bd82208d452badc4acaf877dc2c4abd0fab15.mp3"}],createdAt:"2020-01-24T23:00:27.676Z",updatedAt:"2020-01-24T23:00:27.676Z",lastPublishedAt:"2020-01-24T23:00:27.676Z"},{id:"d410",name:"[FUTURE FUNK PACK] Disco Lady - Nanidato",description:'FUTURE FUNK MAP PACK\n2 songs uploaded everyday through August 10th - 14th!\n\n"Disco Lady" by Nanidato was sampled from Tomato n\' Pine\'s "Wanna Dance!" \n\nPlease look forward to the upcoming maps!\n\nDM any feedback on Discord\nETAN#8341',uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:120,duration:189,songName:"Disco Lady",songSubName:"",songAuthorName:"Nanidato",levelAuthorName:"ETAN"},stats:{plays:0,downloads:4750,upvotes:1097,downvotes:12,score:.9299},uploaded:"2020-08-11T17:46:48.109Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"601f29bdee0f10a29f1ad1520bd296930c7ad3d4",key:"d410",state:"Published",createdAt:"2020-08-11T17:46:48.109Z",sageScore:6,diffs:[{njs:10,offset:1,notes:191,bombs:0,obstacles:1,nps:1.051,length:363.5,characteristic:"Standard",difficulty:"Easy",events:7333,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.75,paritySummary:{errors:8,warns:6,resets:0}},{njs:10,offset:1,notes:321,bombs:0,obstacles:1,nps:1.733,length:370.5,characteristic:"Standard",difficulty:"Normal",events:7333,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:185.25,paritySummary:{errors:2,warns:0,resets:0}},{njs:12,offset:.3,notes:494,bombs:0,obstacles:1,nps:2.667,length:370.5,characteristic:"Standard",difficulty:"Hard",events:7333,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:185.25,paritySummary:{errors:0,warns:0,resets:0}},{njs:14,offset:0,notes:661,bombs:0,obstacles:1,nps:3.568,length:370.5,characteristic:"Standard",difficulty:"Expert",events:7333,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:185.25,paritySummary:{errors:0,warns:0,resets:0}},{njs:17,offset:-.5,notes:924,bombs:0,obstacles:1,nps:4.988,length:370.5,characteristic:"Standard",difficulty:"ExpertPlus",events:7333,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:185.25,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/601f29bdee0f10a29f1ad1520bd296930c7ad3d4.zip",coverURL:"https://cdn.beatsaver.com/601f29bdee0f10a29f1ad1520bd296930c7ad3d4.jpg",previewURL:"https://cdn.beatsaver.com/601f29bdee0f10a29f1ad1520bd296930c7ad3d4.mp3"}],createdAt:"2020-08-11T17:46:48.109Z",updatedAt:"2020-08-11T17:46:48.109Z",lastPublishedAt:"2020-08-11T17:46:48.109Z"},{id:"130e6",name:"Geoxor - Faerie [wall map]",description:"Wall map collab with Reddek lets go!!\nThis turned out so much better than I thought it would, I hope you enjoy it as much as I do\n\nMap preview: https://youtu.be/uOdpWjTdGCU \n\nFeedback welcome at shan_man#7777 and Reddek#5864",uploader:{id:75261,name:"shan_man",uniqueSet:!0,hash:"5ec5aaa616c9680006500e0a",avatar:"https://cdn.beatsaver.com/avatar/345431512658739200.png",type:"DISCORD"},metadata:{bpm:150,duration:244,songName:"Faerie",songSubName:"",songAuthorName:"Geoxor",levelAuthorName:"Reddek & Shan_Man"},stats:{plays:0,downloads:2988,upvotes:1092,downvotes:12,score:.9298},uploaded:"2021-01-23T05:09:19.779Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"57c96c82897a73c495758fa494875dce6bdab869",key:"130e6",state:"Published",createdAt:"2021-01-23T05:09:19.779Z",sageScore:5,diffs:[{njs:20,offset:-.5,notes:1269,bombs:42,obstacles:0,nps:5.513,length:575.5,characteristic:"Standard",difficulty:"Expert",events:9327,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:230.2,paritySummary:{errors:0,warns:0,resets:15}},{njs:20,offset:-.5,notes:1650,bombs:42,obstacles:3239,nps:7.118,length:579.5,characteristic:"Standard",difficulty:"ExpertPlus",events:9327,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:231.8,paritySummary:{errors:37,warns:1,resets:15}}],downloadURL:"https://cdn.beatsaver.com/57c96c82897a73c495758fa494875dce6bdab869.zip",coverURL:"https://cdn.beatsaver.com/57c96c82897a73c495758fa494875dce6bdab869.jpg",previewURL:"https://cdn.beatsaver.com/57c96c82897a73c495758fa494875dce6bdab869.mp3"}],createdAt:"2021-01-23T05:09:19.779Z",updatedAt:"2021-01-23T05:09:19.779Z",lastPublishedAt:"2021-01-23T05:09:19.779Z"},{id:"4a36",name:"[Anniversary] Backbone (ft. Nevve) - Droeloe [Fafurion & Skyler Wallace]",description:"Part of the Anniversary Song Pack",uploader:{id:37070,name:"anniversaryteam",uniqueSet:!0,hash:"5cff0b7798cc5a672c8565a3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro",type:"SIMPLE"},metadata:{bpm:151,duration:171,songName:"Backbone",songSubName:"Droeloe",songAuthorName:"Fafurion & Skyler Wallace",levelAuthorName:"AnniversaryTeam"},stats:{plays:0,downloads:3767,upvotes:2308,downvotes:58,score:.9296},uploaded:"2019-05-03T14:08:11Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"376abe290620e443e9451366accb30e5095edbce",key:"4a36",state:"Published",createdAt:"2019-05-03T14:08:11Z",sageScore:7,diffs:[{njs:10,offset:0,notes:190,bombs:0,obstacles:4,nps:1.248,length:383,characteristic:"Standard",difficulty:"Easy",events:909,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:152.185,paritySummary:{errors:36,warns:31,resets:0}},{njs:12,offset:0,notes:265,bombs:0,obstacles:7,nps:1.746,length:382,characteristic:"Standard",difficulty:"Normal",events:909,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:151.788,paritySummary:{errors:43,warns:49,resets:0}},{njs:12,offset:0,notes:417,bombs:0,obstacles:12,nps:2.747,length:382,characteristic:"Standard",difficulty:"Hard",events:909,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:151.788,paritySummary:{errors:65,warns:40,resets:0}},{njs:12,offset:1,notes:552,bombs:0,obstacles:1,nps:3.632,length:382.5,characteristic:"Standard",difficulty:"Expert",events:909,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:151.987,paritySummary:{errors:36,warns:42,resets:0}},{njs:14,offset:1,notes:592,bombs:0,obstacles:3,nps:3.895,length:382.5,characteristic:"Standard",difficulty:"ExpertPlus",events:909,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:151.987,paritySummary:{errors:45,warns:59,resets:0}}],downloadURL:"https://cdn.beatsaver.com/376abe290620e443e9451366accb30e5095edbce.zip",coverURL:"https://cdn.beatsaver.com/376abe290620e443e9451366accb30e5095edbce.jpg",previewURL:"https://cdn.beatsaver.com/376abe290620e443e9451366accb30e5095edbce.mp3"}],createdAt:"2019-05-03T14:08:11Z",updatedAt:"2019-05-03T14:08:11Z",lastPublishedAt:"2019-05-03T14:08:11Z"},{id:"75ba",name:"Savior - Rise Against",description:'"Savior" is punk rock song by American rock band Rise Against, featured on their fifth studio album Appeal to Reason (2008). In contrast to the social and political topics normally discussed in Rise Against songs, "Savior" is about forgiveness and broken relationships.',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:169,duration:244,songName:"Savior",songSubName:"",songAuthorName:"Rise Against",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:3854,upvotes:1458,downvotes:25,score:.9295},uploaded:"2019-12-11T15:27:50.619Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"20527803675e3a3d7721c0b8d05a1439a02a580d",key:"75ba",state:"Published",createdAt:"2019-12-11T15:27:50.619Z",sageScore:5,diffs:[{njs:15,offset:0,notes:925,bombs:30,obstacles:6,nps:3.912,length:664.996,characteristic:"Standard",difficulty:"Expert",events:3686,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:236.093,paritySummary:{errors:20,warns:13,resets:0}}],downloadURL:"https://cdn.beatsaver.com/20527803675e3a3d7721c0b8d05a1439a02a580d.zip",coverURL:"https://cdn.beatsaver.com/20527803675e3a3d7721c0b8d05a1439a02a580d.jpg",previewURL:"https://cdn.beatsaver.com/20527803675e3a3d7721c0b8d05a1439a02a580d.mp3"}],createdAt:"2019-12-11T15:27:50.619Z",updatedAt:"2019-12-11T15:27:50.619Z",lastPublishedAt:"2019-12-11T15:27:50.619Z"},{id:"affa",name:"Zomboy - Endgame [NE/CHROMA]",description:"Can you survive?\r\n\r\nPreview: https://youtu.be/t4bk8ym3fIQ",uploader:{id:26361,name:"spookyghost",uniqueSet:!0,hash:"5cff0b7798cc5a672c8561a5",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8561a5?d=retro",type:"SIMPLE"},metadata:{bpm:200,duration:310,songName:"End Game",songSubName:"Rott n' Roll",songAuthorName:"Zomboy",levelAuthorName:"Spooky Ghost & Exce"},stats:{plays:0,downloads:2617,upvotes:2099,downvotes:50,score:.9294},uploaded:"2020-06-08T17:04:09.275Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c28ffc53acd2c89329b5a7ff3d57a2b32bca416e",key:"affa",state:"Published",createdAt:"2020-06-08T17:04:09.275Z",sageScore:4,diffs:[{njs:22,offset:0,notes:1493,bombs:5376,obstacles:5e4,nps:5.068,length:982,characteristic:"Standard",difficulty:"ExpertPlus",events:12193,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:294.6,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c28ffc53acd2c89329b5a7ff3d57a2b32bca416e.zip",coverURL:"https://cdn.beatsaver.com/c28ffc53acd2c89329b5a7ff3d57a2b32bca416e.jpg",previewURL:"https://cdn.beatsaver.com/c28ffc53acd2c89329b5a7ff3d57a2b32bca416e.mp3"}],createdAt:"2020-06-08T17:04:09.275Z",updatedAt:"2020-06-08T17:04:09.275Z",lastPublishedAt:"2020-06-08T17:04:09.275Z"},{id:"475",name:"Ride - Twenty One Pilots",description:"Expert and Normal Charts\nLighting Events\n\nhttps://twitter.com/TheDownyCat\nhttps://www.twitch.tv/downycat\nhttps://streamlabs.com/downycat/tip",uploader:{id:4285982,name:"downycat",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ede5",avatar:"https://cdn.beatsaver.com/avatar/173538829888782336.png",type:"DISCORD"},metadata:{bpm:150,duration:213,songName:"Ride",songSubName:"Twenty One Pilots",songAuthorName:"DownyCat",levelAuthorName:"downycat"},stats:{plays:0,downloads:5957,upvotes:2990,downvotes:88,score:.9294},uploaded:"2018-06-09T11:24:50Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"05c4b1fc955756d2672ce322417ad2fadb416af6",key:"475",state:"Published",createdAt:"2018-06-09T11:24:50Z",sageScore:4,diffs:[{njs:10,offset:0,notes:377,bombs:0,obstacles:32,nps:1.844,length:511,characteristic:"Standard",difficulty:"Normal",events:859,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.4,paritySummary:{errors:109,warns:26,resets:0}},{njs:10,offset:0,notes:674,bombs:0,obstacles:32,nps:3.297,length:511,characteristic:"Standard",difficulty:"Expert",events:859,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.4,paritySummary:{errors:96,warns:102,resets:0}}],downloadURL:"https://cdn.beatsaver.com/05c4b1fc955756d2672ce322417ad2fadb416af6.zip",coverURL:"https://cdn.beatsaver.com/05c4b1fc955756d2672ce322417ad2fadb416af6.jpg",previewURL:"https://cdn.beatsaver.com/05c4b1fc955756d2672ce322417ad2fadb416af6.mp3"}],createdAt:"2018-06-09T11:24:50Z",updatedAt:"2018-06-09T11:24:50Z",lastPublishedAt:"2018-06-09T11:24:50Z"},{id:"5725",name:"Livin' La Vida Loca - Ricky Martin",description:"\"Livin' la Vida Loca\" (Livin' A Crazy Life) is the number-one hit song performed by Ricky Martin. It was released on March 23, 1999, from Martin's self-titled debut English-language album.\n\nI actually heard this song first from Eddie Murphy and Antonio Banderas at the end of Shrek 2 lol. Gotta say, its pretty catchy.\n\nEDIT: Fixed one mismapped note on chorus section and added two more notes at the very start of the song",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:178,duration:242,songName:"Livin' La Vida Loca",songSubName:"",songAuthorName:"Ricky Martin",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:7458,upvotes:2396,downvotes:63,score:.9292},uploaded:"2019-07-15T07:01:36.333Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"13d4f57a62f8725b39e607914637625e1edaf58d",key:"5725",state:"Published",createdAt:"2019-07-15T07:01:36.333Z",sageScore:6,diffs:[{njs:14,offset:0,notes:932,bombs:0,obstacles:20,nps:3.908,length:707.5,characteristic:"Standard",difficulty:"Expert",events:2683,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:238.483,paritySummary:{errors:87,warns:58,resets:0}}],downloadURL:"https://cdn.beatsaver.com/13d4f57a62f8725b39e607914637625e1edaf58d.zip",coverURL:"https://cdn.beatsaver.com/13d4f57a62f8725b39e607914637625e1edaf58d.jpg",previewURL:"https://cdn.beatsaver.com/13d4f57a62f8725b39e607914637625e1edaf58d.mp3"}],createdAt:"2019-07-15T07:01:36.333Z",updatedAt:"2019-07-15T07:01:36.333Z",lastPublishedAt:"2019-07-15T07:01:36.333Z"},{id:"5efe",name:"Welcome to the Club - Nightcore (Manian)",description:"Been a while since I released, but I'm back with a brand new map! Welcome to the club everyone! We've got it goin on, til the break of dawn, so put the record on!\n\nBPM: 182.39\nNPS: N - 2.46 ; H - 2.91 ; Ex - 4.03 ; Ex+ - 4.51\nNotes: N - 396 ; H - 468 ; Ex - 648 ; Ex+ - 725\nWalls: N - 131 ; H - 48 ; Ex - 27 ; Ex+ - 31\nBombs: N - 24 ; H - 0 ; Ex - 0 ; Ex+ - 0\n\nThanks to Redmagi, Kival Evan, helencarnate, and redhq for testing, and to Skeelie and Ryger (RaynArch) for helping with timing!",uploader:{id:4285188,name:"fruhead",uniqueSet:!0,hash:"5cff0b7598cc5a672c852683",avatar:"https://cdn.beatsaver.com/avatar/174000100413145090.png",type:"DISCORD"},metadata:{bpm:182.39,duration:161,songName:"Welcome to the Club",songSubName:"",songAuthorName:"Nightcore",levelAuthorName:"fruhead"},stats:{plays:0,downloads:3613,upvotes:2226,downvotes:56,score:.9291},uploaded:"2019-08-25T06:45:04.972Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f42e4fb7ea9a439bdf295ee1cf4459e52d15b520",key:"5efe",state:"Published",createdAt:"2019-08-25T06:45:04.972Z",sageScore:4,diffs:[{njs:12,offset:0,notes:396,bombs:24,obstacles:131,nps:2.556,length:471,characteristic:"Standard",difficulty:"Normal",events:5134,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.943,paritySummary:{errors:42,warns:4,resets:4}},{njs:14,offset:.5,notes:468,bombs:0,obstacles:48,nps:3.018,length:471.375,characteristic:"Standard",difficulty:"Hard",events:5134,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:155.066,paritySummary:{errors:14,warns:1,resets:0}},{njs:17,offset:.5,notes:648,bombs:0,obstacles:27,nps:4.179,length:471.375,characteristic:"Standard",difficulty:"Expert",events:5134,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:155.066,paritySummary:{errors:18,warns:2,resets:0}},{njs:18,offset:.5,notes:725,bombs:0,obstacles:31,nps:4.675,length:471.375,characteristic:"Standard",difficulty:"ExpertPlus",events:5134,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:155.066,paritySummary:{errors:27,warns:3,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f42e4fb7ea9a439bdf295ee1cf4459e52d15b520.zip",coverURL:"https://cdn.beatsaver.com/f42e4fb7ea9a439bdf295ee1cf4459e52d15b520.jpg",previewURL:"https://cdn.beatsaver.com/f42e4fb7ea9a439bdf295ee1cf4459e52d15b520.mp3"}],createdAt:"2019-08-25T06:45:04.972Z",updatedAt:"2019-08-25T06:45:04.972Z",lastPublishedAt:"2019-08-25T06:45:04.972Z"},{id:"58b7",name:"The Twist - Chubby Checker",description:"Do the Twist!\n\nThere's a twist to this map ;) it has zero down slash notes (I always wanted to try making a map with no down slashes and I think I found the perfect song to try that)",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:155,duration:158,songName:"The Twist",songSubName:"",songAuthorName:"Chubby Checker",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:2345,upvotes:998,downvotes:10,score:.929},uploaded:"2019-07-24T18:00:19.429Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1c2af7c45bb55bfb19401ac619bded30c4cf01c6",key:"58b7",state:"Published",createdAt:"2019-07-24T18:00:19.429Z",sageScore:6,diffs:[{njs:14,offset:0,notes:591,bombs:0,obstacles:4,nps:3.834,length:398.188,characteristic:"Standard",difficulty:"Expert",events:2280,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.137,paritySummary:{errors:15,warns:93,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1c2af7c45bb55bfb19401ac619bded30c4cf01c6.zip",coverURL:"https://cdn.beatsaver.com/1c2af7c45bb55bfb19401ac619bded30c4cf01c6.jpg",previewURL:"https://cdn.beatsaver.com/1c2af7c45bb55bfb19401ac619bded30c4cf01c6.mp3"}],createdAt:"2019-07-24T18:00:19.429Z",updatedAt:"2019-07-24T18:00:19.429Z",lastPublishedAt:"2019-07-24T18:00:19.429Z"},{id:"11e9c",name:"Tsuki No Waltz (Standard and FeetSaber)",description:"*****Attention!!*****\nThis map will take SO LONG to finish loading, since it has 2 standard and 3 FeetSaber difficulties which are all wallmaps... Please be patient.\n読み込みがものすごく長いです。2刀譜面2つ、足譜面3つ、すべて壁譜面なので…。\n*********************\n\nRequirements :\nNoodle Extensions\nChroma\nFeet Saber (NalulunaModifier)\n\nBig thanks to Rinka Michibiki for making standard difficulties.\n2刀譜面を提供していただいた導祈りんか様に、心からの感謝を。\n\nFeetmap and wall: henomohesan @henomohesan\nStandard difficulty: Rinka Michibiki @rinka_michibiki\n\nDemo :\n(Standard) https://youtu.be/4Q_PJ7tg3LA\n(Feet Saber) https://youtu.be/PngIJAleFTQ\n\nYou can download NalulunaModifier from official page :\nhttps://youtu.be/QtLNweiiQPU\n\nSpecial Thanks:\nMapping Club JP Discord by kamy @kamy_0811\nChromapper JP manual by 姚明 @gensouyou_39\nBeatwall JP manual by Kamy @kamy_0811 and FaZPi @FaZ_Pi",uploader:{id:4285472,name:"henomohesan",uniqueSet:!0,hash:"5ece0766d87e5800060a4635",avatar:"https://cdn.beatsaver.com/avatar/483262661245796352.png",type:"DISCORD"},metadata:{bpm:173,duration:183,songName:"Tsuki No Waltz (Standard and FeetSaber)",songSubName:"",songAuthorName:"Mio Isayama",levelAuthorName:"henomohesan"},stats:{plays:0,downloads:2241,upvotes:723,downvotes:2,score:.9288},uploaded:"2020-12-22T07:56:06.804Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c967a5862a8602ebacebe44b6ac5c2422c3e90bb",key:"11e9c",state:"Published",createdAt:"2020-12-22T07:56:06.804Z",sageScore:4,diffs:[{njs:10,offset:.7,notes:218,bombs:0,obstacles:13839,nps:1.318,length:477,characteristic:"Standard",difficulty:"Normal",events:6,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:165.434,paritySummary:{errors:6,warns:0,resets:0}},{njs:11,offset:-.5,notes:398,bombs:0,obstacles:13839,nps:2.406,length:477,characteristic:"Standard",difficulty:"Hard",events:6,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:165.434,paritySummary:{errors:3,warns:7,resets:0}},{njs:8,offset:0,notes:206,bombs:0,obstacles:13859,nps:1.245,length:477,characteristic:"NoArrows",difficulty:"Easy",events:6,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:165.434,paritySummary:{errors:0,warns:0,resets:0}},{njs:10,offset:0,notes:333,bombs:0,obstacles:13839,nps:2.013,length:477,characteristic:"NoArrows",difficulty:"Normal",events:6,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:165.434,paritySummary:{errors:0,warns:0,resets:0}},{njs:10,offset:0,notes:408,bombs:0,obstacles:13839,nps:2.466,length:477,characteristic:"NoArrows",difficulty:"Expert",events:6,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:165.434,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c967a5862a8602ebacebe44b6ac5c2422c3e90bb.zip",coverURL:"https://cdn.beatsaver.com/c967a5862a8602ebacebe44b6ac5c2422c3e90bb.jpg",previewURL:"https://cdn.beatsaver.com/c967a5862a8602ebacebe44b6ac5c2422c3e90bb.mp3"}],createdAt:"2020-12-22T07:56:06.804Z",updatedAt:"2020-12-22T07:56:06.804Z",lastPublishedAt:"2020-12-22T07:56:06.804Z"},{id:"44f6",name:"Blumenkranz - Cyua & Hiroyuki Sawano [Kill la Kill OST]",description:"Smol fix in Exp.\r\n\r\nExp+ Gameplay: https://youtu.be/lAi_xIWoQsc\r\n\r\nVocals by Cyua.\r\nMusic by Hiroyuki Sawano.\r\nLyrics by Rie Sawano.\r\nCheck out Kill la Kill, it's awesome! And has more awesome music!\r\nhttps://myanimelist.net/anime/18679/Kill_la_Kill\r\n\r\nCover from the Kill la Kill OST.",uploader:{id:4286005,name:"mandynasty",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ffaa",avatar:"https://cdn.beatsaver.com/avatar/307589087030673408.png",type:"DISCORD"},metadata:{bpm:160,duration:259,songName:"Blumenkranz",songSubName:"Cyua & Hiroyuki Sawano",songAuthorName:"ManDynasty",levelAuthorName:"ManDynasty"},stats:{plays:0,downloads:2635,upvotes:1171,downvotes:16,score:.9288},uploaded:"2019-04-11T19:30:09Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"01f7b442e2f206d1611fe45e297c216fe07da78e",key:"44f6",state:"Published",createdAt:"2019-04-11T19:30:09Z",sageScore:4,diffs:[{njs:10,offset:0,notes:462,bombs:52,obstacles:94,nps:1.839,length:670,characteristic:"Standard",difficulty:"Normal",events:4169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:251.25,paritySummary:{errors:23,warns:15,resets:1}},{njs:14,offset:1,notes:633,bombs:101,obstacles:89,nps:2.519,length:670,characteristic:"Standard",difficulty:"Hard",events:4169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:251.25,paritySummary:{errors:44,warns:53,resets:1}},{njs:15,offset:1,notes:947,bombs:66,obstacles:77,nps:3.764,length:671,characteristic:"Standard",difficulty:"Expert",events:4169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:251.625,paritySummary:{errors:85,warns:116,resets:2}},{njs:16,offset:0,notes:1054,bombs:66,obstacles:83,nps:4.189,length:671,characteristic:"Standard",difficulty:"ExpertPlus",events:4169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:251.625,paritySummary:{errors:80,warns:108,resets:2}}],downloadURL:"https://cdn.beatsaver.com/01f7b442e2f206d1611fe45e297c216fe07da78e.zip",coverURL:"https://cdn.beatsaver.com/01f7b442e2f206d1611fe45e297c216fe07da78e.jpg",previewURL:"https://cdn.beatsaver.com/01f7b442e2f206d1611fe45e297c216fe07da78e.mp3"}],createdAt:"2019-04-11T19:30:09Z",updatedAt:"2019-04-11T19:30:09Z",lastPublishedAt:"2019-04-11T19:30:09Z"},{id:"4377",name:"The Greatest - Sia",description:"YouTube Preview: https://youtu.be/huUMotlFpig",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:192,duration:191,songName:"The Greatest (ft. Kendrick Lamar)",songSubName:"Sia",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:6436,upvotes:2325,downvotes:61,score:.9288},uploaded:"2019-04-04T21:20:03Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"58cd8ddf99600d967bca61285e9e0c429138009d",key:"4377",state:"Published",createdAt:"2019-04-04T21:20:03Z",sageScore:6,diffs:[{njs:12,offset:0,notes:822,bombs:16,obstacles:20,nps:4.355,length:604,characteristic:"Standard",difficulty:"ExpertPlus",events:3165,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.75,paritySummary:{errors:91,warns:108,resets:0}}],downloadURL:"https://cdn.beatsaver.com/58cd8ddf99600d967bca61285e9e0c429138009d.zip",coverURL:"https://cdn.beatsaver.com/58cd8ddf99600d967bca61285e9e0c429138009d.jpg",previewURL:"https://cdn.beatsaver.com/58cd8ddf99600d967bca61285e9e0c429138009d.mp3"}],createdAt:"2019-04-04T21:20:03Z",updatedAt:"2019-04-04T21:20:03Z",lastPublishedAt:"2019-04-04T21:20:03Z"},{id:"110ac",name:"Madeon - The Prince",description:'*CHROMA RECOMMENDED*\n\nThis map was originally going to have autolights. Imagine.\n\nDg: "When I began lighting this map, I did it with the intention of copying the colors and vibe of the official visualizer by Madeon, with my own twists to bring it up to Beat Saber level. The amount of time and effort that went into literally lighting thermal cam... unreal."\n\nYou can check out the visualizer here:https://www.youtube.com/watch?v=AOhFzDN3eMI\n\nBearly#5259\nDGRJ4Life#6510',uploader:{id:2381,name:"bearly",uniqueSet:!0,hash:"5ea9efbf16c968000636dba4",avatar:"https://www.gravatar.com/avatar/5ea9efbf16c968000636dba4?d=retro",type:"SIMPLE"},metadata:{bpm:95,duration:223,songName:"The Prince",songSubName:"",songAuthorName:"Madeon",levelAuthorName:"Bearly & dgrj4life"},stats:{plays:0,downloads:8424,upvotes:1707,downvotes:36,score:.9287},uploaded:"2020-11-16T23:34:00.851Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"cf3243d6fc63c77a3b864414314ca4fb36f69e77",key:"110ac",state:"Published",createdAt:"2020-11-16T23:34:00.851Z",sageScore:5,diffs:[{njs:17,offset:.15,notes:917,bombs:8,obstacles:30,nps:4.27,length:340,characteristic:"Standard",difficulty:"Expert",events:33893,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:214.737,paritySummary:{errors:0,warns:0,resets:3}},{njs:18.5,offset:-.2,notes:990,bombs:3,obstacles:21,nps:4.61,length:340,characteristic:"Standard",difficulty:"ExpertPlus",events:33893,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:214.737,paritySummary:{errors:0,warns:0,resets:1}},{njs:16,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:33893,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/cf3243d6fc63c77a3b864414314ca4fb36f69e77.zip",coverURL:"https://cdn.beatsaver.com/cf3243d6fc63c77a3b864414314ca4fb36f69e77.jpg",previewURL:"https://cdn.beatsaver.com/cf3243d6fc63c77a3b864414314ca4fb36f69e77.mp3"}],createdAt:"2020-11-16T23:34:00.851Z",updatedAt:"2020-11-16T23:34:00.851Z",lastPublishedAt:"2020-11-16T23:34:00.851Z"},{id:"b18a",name:"[Bloq Busters Vol. 4] Eric Johnson - Cliffs of Dover",description:"Thanks to SkylerWallace for warping the audio to make this actually mappable! I loved this song from Guitar Hero, and wanted it to have a spot here in Beat Saber. Enjoy!",uploader:{id:4284569,name:"checkthepan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f3d5",avatar:"https://cdn.beatsaver.com/avatar/184355369189900290.png",type:"DISCORD"},metadata:{bpm:95,duration:254,songName:"Cliffs of Dover",songSubName:"",songAuthorName:"Eric Johnson",levelAuthorName:"Checkthepan"},stats:{plays:0,downloads:5733,upvotes:1467,downvotes:27,score:.9286},uploaded:"2020-06-12T22:01:10.949Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9f9f5c00b449549b1c276209148551c38abf495a",key:"b18a",state:"Published",createdAt:"2020-06-12T22:01:10.949Z",sageScore:6,diffs:[{njs:14,offset:-.25,notes:835,bombs:0,obstacles:2,nps:3.389,length:390.063,characteristic:"Standard",difficulty:"Hard",events:8195,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:246.355,paritySummary:{errors:9,warns:7,resets:0}},{njs:16,offset:.25,notes:1327,bombs:89,obstacles:20,nps:5.387,length:390.063,characteristic:"Standard",difficulty:"Expert",events:8195,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:246.355,paritySummary:{errors:0,warns:0,resets:0}},{njs:20,offset:0,notes:1417,bombs:178,obstacles:10,nps:5.752,length:390.063,characteristic:"Standard",difficulty:"ExpertPlus",events:8195,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:246.355,paritySummary:{errors:3,warns:1,resets:7}}],downloadURL:"https://cdn.beatsaver.com/9f9f5c00b449549b1c276209148551c38abf495a.zip",coverURL:"https://cdn.beatsaver.com/9f9f5c00b449549b1c276209148551c38abf495a.jpg",previewURL:"https://cdn.beatsaver.com/9f9f5c00b449549b1c276209148551c38abf495a.mp3"}],createdAt:"2020-06-12T22:01:10.949Z",updatedAt:"2020-06-12T22:01:10.949Z",lastPublishedAt:"2020-06-12T22:01:10.949Z"},{id:"21b8",name:"Senpai Notice Me",description:"I need therapy.\r\nFinally getting it ranked! Let's go!",uploader:{id:28684,name:"jackodej",uniqueSet:!0,hash:"5cff0b7498cc5a672c850120",avatar:"https://www.gravatar.com/avatar/5cff0b7498cc5a672c850120?d=retro",type:"SIMPLE"},metadata:{bpm:155,duration:278,songName:"Senpai Notice Me",songSubName:"Camellia ft. Nanahira",songAuthorName:"JackoDEJ",levelAuthorName:"JackoDEJ"},stats:{plays:0,downloads:5405,upvotes:5203,downvotes:197,score:.9286},uploaded:"2018-11-23T14:11:31Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"e3ef6cab44ff2222c09b399e8e5a62a095233621",key:"21b8",state:"Published",createdAt:"2018-11-23T14:11:31Z",sageScore:6,diffs:[{njs:16,offset:0,notes:1730,bombs:0,obstacles:5,nps:6.357,length:703,characteristic:"Standard",difficulty:"ExpertPlus",events:1758,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:272.129,paritySummary:{errors:58,warns:61,resets:0},stars:5.91}],downloadURL:"https://cdn.beatsaver.com/e3ef6cab44ff2222c09b399e8e5a62a095233621.zip",coverURL:"https://cdn.beatsaver.com/e3ef6cab44ff2222c09b399e8e5a62a095233621.jpg",previewURL:"https://cdn.beatsaver.com/e3ef6cab44ff2222c09b399e8e5a62a095233621.mp3"}],createdAt:"2018-11-23T14:11:31Z",updatedAt:"2018-11-23T14:11:31Z",lastPublishedAt:"2018-11-23T14:11:31Z"},{id:"42",name:"Icarus - Madeon - HARD",description:"Icarus by Madeon,\r\n\r\nMostly an experiment in the 3D editor events... editor...\r\n\r\nFully evented, 3:33 length\r\n\r\nHard difficulty only.\r\n\r\nYoutube playthrough: https://www.youtube.com/watch?v=VvEkluZHkY4",uploader:{id:53534,name:"gompasta",uniqueSet:!1,hash:"5cff0b7298cc5a672c84e8de",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8de?d=retro",type:"SIMPLE"},metadata:{bpm:126,duration:213,songName:"Icarus",songSubName:"",songAuthorName:"Madeon",levelAuthorName:"gompasta"},stats:{plays:0,downloads:6994,upvotes:3007,downvotes:92,score:.9285},uploaded:"2018-05-12T00:35:40Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"be1a39b41f2089cad9aa8d775f55e8707447b5ca",key:"42",state:"Published",createdAt:"2018-05-12T00:35:40Z",sageScore:5,diffs:[{njs:10,offset:0,notes:420,bombs:16,obstacles:6,nps:2.035,length:433.5,characteristic:"Standard",difficulty:"Hard",events:859,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:206.429,paritySummary:{errors:59,warns:63,resets:4},stars:1.56}],downloadURL:"https://cdn.beatsaver.com/be1a39b41f2089cad9aa8d775f55e8707447b5ca.zip",coverURL:"https://cdn.beatsaver.com/be1a39b41f2089cad9aa8d775f55e8707447b5ca.jpg",previewURL:"https://cdn.beatsaver.com/be1a39b41f2089cad9aa8d775f55e8707447b5ca.mp3"}],createdAt:"2018-05-12T00:35:40Z",updatedAt:"2018-05-12T00:35:40Z",lastPublishedAt:"2018-05-12T00:35:40Z"},{id:"8fc3",name:"Katy Perry - Dark Horse (feat. Juicy J) [Z-ANESaber]",description:"Yo\r\nI´m open for song requests so if you have any ideas let me know in the comments or on Discord:\r\nNiqu#9221\r\n\r\nThis song was requested by: SaberTribe\r\nHave fun!\r\n\r\nPlaythrough: https://www.youtube.com/watch?v=Qs8xfj_EQYs&feature=youtu.be\r\n\r\nSong: https://www.youtube.com/watch?v=0KSOMA3QBU0\r\n\r\nBye",uploader:{id:4284220,name:"z-anesaber",uniqueSet:!0,hash:"5dfbafac9921260006527fa4",avatar:"https://cdn.beatsaver.com/avatar/324954940885958658.png",type:"DISCORD"},metadata:{bpm:132,duration:212,songName:"Dark Horse [Z-ANESaber]",songSubName:"(feat. Juicy J)",songAuthorName:"Katy Perry",levelAuthorName:"Z-ANESaber"},stats:{plays:0,downloads:4654,upvotes:1239,downvotes:19,score:.9283},uploaded:"2020-03-13T21:40:12.962Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e53f2a91acfca398d1770e3972861ce15f56b123",key:"8fc3",state:"Published",createdAt:"2020-03-13T21:40:12.962Z",sageScore:3,diffs:[{njs:13.3,offset:0,notes:802,bombs:12,obstacles:9,nps:3.811,length:463,characteristic:"Standard",difficulty:"Expert",events:1851,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:210.455,paritySummary:{errors:6,warns:4,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e53f2a91acfca398d1770e3972861ce15f56b123.zip",coverURL:"https://cdn.beatsaver.com/e53f2a91acfca398d1770e3972861ce15f56b123.jpg",previewURL:"https://cdn.beatsaver.com/e53f2a91acfca398d1770e3972861ce15f56b123.mp3"}],createdAt:"2020-03-13T21:40:12.962Z",updatedAt:"2020-03-13T21:40:12.962Z",lastPublishedAt:"2020-03-13T21:40:12.962Z"},{id:"89be",name:"More One Night [Girl's Last Tour Ending]",description:"Sung by \nChito (CV: Inori Minase)\nYuuri (CV: Yurika Kubo)\n\nCute girls doing post-apocalyptic things\n\nI have fancy lighting on this one so make sure you got chroma or chromalite to see it! Unfortunately I couldn't get ring prop to work, I think i just mapped it wrong LOL. I learn soon enough\n\nBPM 123 | \nExpert+\nExpert\nHard\nLightshow\n\nty Qwasyx for playtesting\n\npreview: https://www.youtube.com/watch?v=bsqZWXBMQwQ\n\nDM any feedback on Discord\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:123,duration:214,songName:"More One Night",songSubName:"",songAuthorName:"Inori Minase, Yurika Kubo",levelAuthorName:"ETAN"},stats:{plays:0,downloads:2748,upvotes:1179,downvotes:17,score:.9283},uploaded:"2020-02-22T21:17:09.228Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"bf43cba8026db57a2dda154ae4fa24621cc3a232",key:"89be",state:"Published",createdAt:"2020-02-22T21:17:09.228Z",sageScore:7,diffs:[{njs:13,offset:.4,notes:583,bombs:0,obstacles:21,nps:2.786,length:429,characteristic:"Standard",difficulty:"Hard",events:16009,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.268,paritySummary:{errors:0,warns:0,resets:0}},{njs:15,offset:0,notes:833,bombs:0,obstacles:21,nps:3.981,length:429,characteristic:"Standard",difficulty:"Expert",events:16009,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.268,paritySummary:{errors:0,warns:0,resets:0}},{njs:20,offset:.5,notes:1e3,bombs:0,obstacles:21,nps:4.779,length:429,characteristic:"Standard",difficulty:"ExpertPlus",events:16009,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.268,paritySummary:{errors:12,warns:9,resets:0}},{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:16009,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/bf43cba8026db57a2dda154ae4fa24621cc3a232.zip",coverURL:"https://cdn.beatsaver.com/bf43cba8026db57a2dda154ae4fa24621cc3a232.jpg",previewURL:"https://cdn.beatsaver.com/bf43cba8026db57a2dda154ae4fa24621cc3a232.mp3"}],createdAt:"2020-02-22T21:17:09.228Z",updatedAt:"2020-02-22T21:17:09.228Z",lastPublishedAt:"2020-02-22T21:17:09.228Z"},{id:"72de",name:"GRiZ - Can't Hold Me Down",description:"Easy, normal, hard, expert (maulable), expert+\r\n\r\nThis is a remap, first had major issues. Maul players seem to like the original, so a modified version is included in the expert slot. Also now has a full spread and hand lights are replacing the trash from light map.\r\n\r\nSpecial thanks to Adeza for the original suggestion. \r\n\r\nVideo: https://www.youtube.com/watch?v=c1_ziuz5hrA",uploader:{id:4235138,name:"CyanSnow",uniqueSet:!0,hash:"5cff0b7698cc5a672c8543ac",avatar:"https://cdn.beatsaver.com/avatar/154341137694326784.png",type:"DISCORD"},metadata:{bpm:180,duration:208,songName:"Can't Hold Me Down",songSubName:"",songAuthorName:"GRiZ",levelAuthorName:"CyanSnow"},stats:{plays:0,downloads:4104,upvotes:1886,downvotes:44,score:.9283},uploaded:"2019-11-30T21:07:56.418Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a0ebf4980fcb1f29871582dbeca8e3a8d5511f1c",key:"72de",state:"Published",createdAt:"2019-11-30T21:07:56.418Z",sageScore:7,diffs:[{njs:12,offset:.25,notes:303,bombs:0,obstacles:0,nps:1.524,length:596.5,characteristic:"Standard",difficulty:"Easy",events:11378,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.833,paritySummary:{errors:94,warns:26,resets:0}},{njs:12,offset:.25,notes:380,bombs:0,obstacles:0,nps:1.911,length:596.5,characteristic:"Standard",difficulty:"Normal",events:11378,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.833,paritySummary:{errors:49,warns:17,resets:0}},{njs:14,offset:1,notes:420,bombs:0,obstacles:20,nps:2.112,length:596.5,characteristic:"Standard",difficulty:"Hard",events:11378,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.833,paritySummary:{errors:12,warns:7,resets:0}},{njs:16,offset:.5,notes:749,bombs:0,obstacles:190,nps:3.767,length:596.5,characteristic:"Standard",difficulty:"Expert",events:11378,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.833,paritySummary:{errors:7,warns:2,resets:0}},{njs:18,offset:.25,notes:1029,bombs:139,obstacles:18,nps:5.175,length:596.5,characteristic:"Standard",difficulty:"ExpertPlus",events:11378,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.833,paritySummary:{errors:6,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a0ebf4980fcb1f29871582dbeca8e3a8d5511f1c.zip",coverURL:"https://cdn.beatsaver.com/a0ebf4980fcb1f29871582dbeca8e3a8d5511f1c.jpg",previewURL:"https://cdn.beatsaver.com/a0ebf4980fcb1f29871582dbeca8e3a8d5511f1c.mp3"}],createdAt:"2019-11-30T21:07:56.418Z",updatedAt:"2019-11-30T21:07:56.418Z",lastPublishedAt:"2019-11-30T21:07:56.418Z"},{id:"11de5",name:"Kaibutsu (TV Size) [Beastars Season 2 Opening] - YOASOBI",description:"Kaibutsu / 怪物 is the seventh single by Yoasobi. It is used as the opening theme song to the second season of Beastars.\n\nThis map was a special request by ScrewBedtime#5490\n\nKeep up to date on my maps: https://twitter.com/Joetastic_\nMy mapper's profile: https://bsaber.com/members/joetastic/\nContact me on discord: @Joetastic#2501",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:170,duration:88,songName:"Kaibutsu (TV Size)",songSubName:"",songAuthorName:"YOASOBI",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:16414,upvotes:1604,downvotes:33,score:.9281},uploaded:"2020-12-21T17:50:41.969Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"08d9a92c273f6d06baa30c5b70f182c902349578",key:"11de5",state:"Published",createdAt:"2020-12-21T17:50:41.969Z",sageScore:3,diffs:[{njs:15,offset:.5,notes:327,bombs:6,obstacles:28,nps:3.829,length:242,characteristic:"Standard",difficulty:"Hard",events:2248,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.412,paritySummary:{errors:7,warns:0,resets:0}},{njs:17,offset:.2,notes:426,bombs:6,obstacles:44,nps:4.988,length:242,characteristic:"Standard",difficulty:"Expert",events:2248,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.412,paritySummary:{errors:1,warns:0,resets:0}},{njs:19,offset:0,notes:475,bombs:6,obstacles:43,nps:5.561,length:242,characteristic:"Standard",difficulty:"ExpertPlus",events:2248,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.412,paritySummary:{errors:1,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/08d9a92c273f6d06baa30c5b70f182c902349578.zip",coverURL:"https://cdn.beatsaver.com/08d9a92c273f6d06baa30c5b70f182c902349578.jpg",previewURL:"https://cdn.beatsaver.com/08d9a92c273f6d06baa30c5b70f182c902349578.mp3"}],createdAt:"2020-12-21T17:50:41.969Z",updatedAt:"2020-12-21T17:50:41.969Z",lastPublishedAt:"2020-12-21T17:50:41.969Z"},{id:"ae3c",name:"Fox Stevenson - Bruises",description:"I GOT.\r\nBRUISES.\r\n\r\nMade for my fiancee, and cause this song rocks enough to deserve a 360 and 90 degree map.\r\n\r\n2nd Reupload to fix a big oops in the 360 and 90 degree map ;_;",uploader:{id:4284569,name:"checkthepan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f3d5",avatar:"https://cdn.beatsaver.com/avatar/184355369189900290.png",type:"DISCORD"},metadata:{bpm:174,duration:224,songName:"Bruises",songSubName:"",songAuthorName:"Fox Stevenson",levelAuthorName:"Checkthepan"},stats:{plays:0,downloads:3027,upvotes:1258,downvotes:20,score:.9281},uploaded:"2020-06-04T12:46:11.099Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"71eff19ed6d32fd0a446e1a32303c77aa7f646f2",key:"ae3c",state:"Published",createdAt:"2020-06-04T12:46:11.099Z",sageScore:7,diffs:[{njs:10,offset:0,notes:335,bombs:0,obstacles:65,nps:1.52,length:639,characteristic:"Standard",difficulty:"Easy",events:13393,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.345,paritySummary:{errors:86,warns:21,resets:0}},{njs:10,offset:0,notes:446,bombs:12,obstacles:64,nps:2.024,length:639,characteristic:"Standard",difficulty:"Normal",events:13393,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.345,paritySummary:{errors:87,warns:1,resets:1}},{njs:12,offset:0,notes:692,bombs:12,obstacles:66,nps:3.141,length:639,characteristic:"Standard",difficulty:"Hard",events:13393,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.345,paritySummary:{errors:8,warns:4,resets:3}},{njs:15,offset:.5,notes:1023,bombs:18,obstacles:52,nps:4.643,length:639,characteristic:"Standard",difficulty:"Expert",events:13393,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.345,paritySummary:{errors:4,warns:2,resets:1}},{njs:19,offset:0,notes:1476,bombs:76,obstacles:0,nps:6.693,length:639.562,characteristic:"Standard",difficulty:"ExpertPlus",events:13394,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.539,paritySummary:{errors:6,warns:0,resets:15}},{njs:19,offset:.25,notes:1462,bombs:130,obstacles:70,nps:6.627,length:639.75,characteristic:"90Degree",difficulty:"ExpertPlus",events:13958,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.603,paritySummary:{errors:4,warns:1,resets:15}},{njs:19,offset:.25,notes:1462,bombs:130,obstacles:74,nps:6.627,length:639.75,characteristic:"360Degree",difficulty:"ExpertPlus",events:13974,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.603,paritySummary:{errors:4,warns:1,resets:15}}],downloadURL:"https://cdn.beatsaver.com/71eff19ed6d32fd0a446e1a32303c77aa7f646f2.zip",coverURL:"https://cdn.beatsaver.com/71eff19ed6d32fd0a446e1a32303c77aa7f646f2.jpg",previewURL:"https://cdn.beatsaver.com/71eff19ed6d32fd0a446e1a32303c77aa7f646f2.mp3"}],createdAt:"2020-06-04T12:46:11.099Z",updatedAt:"2020-06-04T12:46:11.099Z",lastPublishedAt:"2020-06-04T12:46:11.099Z"},{id:"6909",name:"Feuer Frei! - Rammstein",description:"Had fun making his one, and also made some One Saber difficulties for it since it fit pretty well. Enjoy!\n\nIncludes Standard (2 saber) Expert through Easy and One Saber Expert through Normal, and is a bit harder than normal since it's a faster song.\n\nNo preview (yet).\n\nBPM: 180.18\nDuration: 3:08\n\nStandard (2 Sabers):\nEasy, Normal, Hard and Expert difficulties:\n\nEasy:\n280 notes, 16 obstacles, 4 mines\n\nNormal:\n337 notes, 16 obstacles, 4 mines\n\nHard:\n459 notes, 15 obstacles, 4 mines\n\nExpert:\n773 notes, 16 obstacles, 2 mines\n\n\nOne Saber:\nNormal, Hard and Expert difficulties:\n\nNormal:\n216 notes, 17 obstacles, 0 mines\n\nHard:\n315 notes, 16 obstacles, 0 mines\n\nExpert:\n472 notes, 16 obstacles, 2 mines",uploader:{id:4285318,name:"kolezan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fcbb",avatar:"https://cdn.beatsaver.com/avatar/220513618763055106.png",type:"DISCORD"},metadata:{bpm:190.18,duration:188,songName:"Feuer Frei!",songSubName:"",songAuthorName:"Rammstein",levelAuthorName:"Kolezan"},stats:{plays:0,downloads:6179,upvotes:2018,downvotes:50,score:.928},uploaded:"2019-10-11T06:11:24.477Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a14d4f258c4a8012e110b599d725be7b20a5470a",key:"6909",state:"Published",createdAt:"2019-10-11T06:11:24.477Z",sageScore:5,diffs:[{njs:10,offset:0,notes:280,bombs:4,obstacles:16,nps:1.592,length:557.313,characteristic:"Standard",difficulty:"Easy",events:2306,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.827,paritySummary:{errors:60,warns:13,resets:0}},{njs:12,offset:.5,notes:337,bombs:4,obstacles:16,nps:1.917,length:557.313,characteristic:"Standard",difficulty:"Normal",events:2306,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.827,paritySummary:{errors:23,warns:19,resets:0}},{njs:16,offset:1,notes:459,bombs:4,obstacles:15,nps:2.611,length:557.313,characteristic:"Standard",difficulty:"Hard",events:2306,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.827,paritySummary:{errors:29,warns:24,resets:0}},{njs:19,offset:1,notes:773,bombs:2,obstacles:16,nps:4.396,length:557.313,characteristic:"Standard",difficulty:"Expert",events:2306,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.827,paritySummary:{errors:31,warns:48,resets:0}},{njs:12,offset:.5,notes:216,bombs:0,obstacles:17,nps:1.228,length:557.313,characteristic:"OneSaber",difficulty:"Normal",events:2306,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.827,paritySummary:{errors:15,warns:34,resets:0}},{njs:16,offset:1,notes:315,bombs:0,obstacles:16,nps:1.792,length:557.313,characteristic:"OneSaber",difficulty:"Hard",events:2306,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.827,paritySummary:{errors:12,warns:14,resets:0}},{njs:19,offset:1,notes:472,bombs:2,obstacles:16,nps:2.684,length:557.313,characteristic:"OneSaber",difficulty:"Expert",events:2306,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.827,paritySummary:{errors:18,warns:14,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a14d4f258c4a8012e110b599d725be7b20a5470a.zip",coverURL:"https://cdn.beatsaver.com/a14d4f258c4a8012e110b599d725be7b20a5470a.jpg",previewURL:"https://cdn.beatsaver.com/a14d4f258c4a8012e110b599d725be7b20a5470a.mp3"}],createdAt:"2019-10-11T06:11:24.477Z",updatedAt:"2019-10-11T06:11:24.477Z",lastPublishedAt:"2019-10-11T06:11:24.477Z"},{id:"42ea",name:"DEUTSCHLAND - Rammstein",description:"Expert+ and expert are fairly similar where expert has some nerfed versions of expert+ some places. NJS18 on E+ and 15 on Expert",uploader:{id:27983,name:"heisenbergirl",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ec30",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ec30?d=retro",type:"SIMPLE"},metadata:{bpm:120,duration:323,songName:"DEUTSCHLAND",songSubName:"Rammstein",songAuthorName:"Heisenberg",levelAuthorName:"heisenbergirl"},stats:{plays:0,downloads:3694,upvotes:2773,downvotes:83,score:.928},uploaded:"2019-04-02T03:59:23Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"414169f2f791443d9f6278009dd91ebe369bc9b6",key:"42ea",state:"Published",createdAt:"2019-04-02T03:59:23Z",sageScore:4,diffs:[{njs:15,offset:0,notes:915,bombs:0,obstacles:6,nps:3.091,length:592,characteristic:"Standard",difficulty:"Expert",events:2754,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:296,paritySummary:{errors:39,warns:52,resets:0}},{njs:18,offset:0,notes:1063,bombs:0,obstacles:6,nps:3.591,length:592,characteristic:"Standard",difficulty:"ExpertPlus",events:2756,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:296,paritySummary:{errors:42,warns:53,resets:0}}],downloadURL:"https://cdn.beatsaver.com/414169f2f791443d9f6278009dd91ebe369bc9b6.zip",coverURL:"https://cdn.beatsaver.com/414169f2f791443d9f6278009dd91ebe369bc9b6.jpg",previewURL:"https://cdn.beatsaver.com/414169f2f791443d9f6278009dd91ebe369bc9b6.mp3"}],createdAt:"2019-04-02T03:59:23Z",updatedAt:"2019-04-02T03:59:23Z",lastPublishedAt:"2019-04-02T03:59:23Z"},{id:"1ffd",name:"Senbonzakura (Short Ver.) by Kradness + Giga-P",description:"You like it fast? You like Senbonzakura? You want both? Then you've come to the right map! I knew I wanted to map Senbonzakura but I didn't quite like the original version, but as soon as I heard Kradness and Giga-P's version I knew I had found my own Senbonzakura.\r\n\r\nThis is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes by just playing Beat Saber! Go to https://bsaber.com/100k-contest/ for more info.\r\n\r\nSong has been edited; custom intro and shortened from full length.\r\n\r\nPreview:\r\nhttps://youtu.be/BLTaG3z9jOY\r\n\r\nBPM: 175\r\nDuration: 2:35\r\nEasy, Normal, Hard, Expert and Expert+ difficulties.\r\n\r\nEasy: 273, 8 obstacles, 0 mines\r\nNormal: 349 notes, 33 obstacles, 0 mines\r\nHard: 524 notes, 33 obstacles, 0 mines\r\nExpert: 755 notes, 33 obstacles, 0 mines\r\nExpert+: 880 notes, 33 obstacles, 0 mines\r\n\r\nThanks to Edzo, Redmagi, AaltoPaWi and Saut for playtesting! Special thanks to Redmagi for the stream ideas!\r\n\r\nEnjoy!",uploader:{id:4285318,name:"kolezan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fcbb",avatar:"https://cdn.beatsaver.com/avatar/220513618763055106.png",type:"DISCORD"},metadata:{bpm:175,duration:156,songName:"Senbonzakura (Short Ver.)",songSubName:"Kradness + Giga-P",songAuthorName:"Kolezan",levelAuthorName:"Kolezan"},stats:{plays:0,downloads:9333,upvotes:5842,downvotes:234,score:.928},uploaded:"2018-11-12T22:10:22Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"eb28a79e2dbc80948d0ea09631e83557ea6b6735",key:"1ffd",state:"Published",createdAt:"2018-11-12T22:10:22Z",sageScore:7,diffs:[{njs:12,offset:0,notes:273,bombs:0,obstacles:33,nps:1.818,length:438,characteristic:"Standard",difficulty:"Easy",events:1285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:150.171,paritySummary:{errors:57,warns:23,resets:0},stars:1.24},{njs:13,offset:0,notes:349,bombs:0,obstacles:33,nps:2.319,length:439,characteristic:"Standard",difficulty:"Normal",events:1285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:150.514,paritySummary:{errors:61,warns:53,resets:0},stars:1.59},{njs:14,offset:0,notes:524,bombs:0,obstacles:33,nps:3.481,length:439,characteristic:"Standard",difficulty:"Hard",events:1285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:150.514,paritySummary:{errors:70,warns:55,resets:0},stars:2.42},{njs:15,offset:0,notes:755,bombs:0,obstacles:33,nps:5.016,length:439,characteristic:"Standard",difficulty:"Expert",events:1285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:150.514,paritySummary:{errors:121,warns:136,resets:0},stars:3.52},{njs:15,offset:0,notes:880,bombs:0,obstacles:33,nps:5.847,length:439,characteristic:"Standard",difficulty:"ExpertPlus",events:1285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:150.514,paritySummary:{errors:108,warns:161,resets:0},stars:4.33}],downloadURL:"https://cdn.beatsaver.com/eb28a79e2dbc80948d0ea09631e83557ea6b6735.zip",coverURL:"https://cdn.beatsaver.com/eb28a79e2dbc80948d0ea09631e83557ea6b6735.jpg",previewURL:"https://cdn.beatsaver.com/eb28a79e2dbc80948d0ea09631e83557ea6b6735.mp3"}],createdAt:"2018-11-12T22:10:22Z",updatedAt:"2018-11-12T22:10:22Z",lastPublishedAt:"2018-11-12T22:10:22Z"},{id:"aa73",name:"twenty one pilots - Level of Concern",description:"'Level of Concern' is a new single released by twenty one pilots during the COVID-19 pandemic. \n\nI meant to get this finished a couple of weeks ago, but hey, better late than never! I hope you enjoy. \n\nMapped by: Pyrowarfare#1032",uploader:{id:1096,name:"pyrowarfare",uniqueSet:!0,hash:"5e99c7df3f476a0006596cdf",avatar:"https://www.gravatar.com/avatar/5e99c7df3f476a0006596cdf?d=retro",type:"SIMPLE"},metadata:{bpm:122,duration:222,songName:"Level of Concern",songSubName:"",songAuthorName:"twenty one pilots",levelAuthorName:"Pyrowarfare"},stats:{plays:0,downloads:4749,upvotes:1220,downvotes:19,score:.9279},uploaded:"2020-05-26T00:39:21.533Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1b9278797fa6d85d0201d1a261101f8cb9ac7dde",key:"aa73",state:"Published",createdAt:"2020-05-26T00:39:21.533Z",sageScore:5,diffs:[{njs:10,offset:0,notes:233,bombs:0,obstacles:14,nps:1.062,length:446,characteristic:"Standard",difficulty:"Easy",events:2220,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.344,paritySummary:{errors:89,warns:9,resets:0}},{njs:10,offset:0,notes:461,bombs:0,obstacles:14,nps:2.102,length:446,characteristic:"Standard",difficulty:"Normal",events:2220,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.344,paritySummary:{errors:18,warns:19,resets:0}},{njs:12,offset:0,notes:663,bombs:4,obstacles:32,nps:3.023,length:446,characteristic:"Standard",difficulty:"Hard",events:2220,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.344,paritySummary:{errors:2,warns:0,resets:1}},{njs:14,offset:0,notes:692,bombs:4,obstacles:44,nps:3.155,length:446,characteristic:"Standard",difficulty:"Expert",events:2220,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.344,paritySummary:{errors:2,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1b9278797fa6d85d0201d1a261101f8cb9ac7dde.zip",coverURL:"https://cdn.beatsaver.com/1b9278797fa6d85d0201d1a261101f8cb9ac7dde.jpg",previewURL:"https://cdn.beatsaver.com/1b9278797fa6d85d0201d1a261101f8cb9ac7dde.mp3"}],createdAt:"2020-05-26T00:39:21.533Z",updatedAt:"2020-05-26T00:39:21.533Z",lastPublishedAt:"2020-05-26T00:39:21.533Z"},{id:"96fc",name:"JINGO JUNGLE [Youjo Senki Opening] - MYTH & ROID",description:"JINGO JUNGLE is the fifth single release of MYTH & ROID for their 1st Album『eYe's』and the opening song for the Youjo Senki anime. It is performed by the Japanese singer Mayu and was released on February 8th, 2017.\n\nMap was converted from my original AmaLee version as requested.\n\nEDIT: Expert Difficulty Fixed and added preview start time",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:130,duration:226,songName:"JINGO JUNGLE",songSubName:"",songAuthorName:"MYTH & ROID",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:9872,upvotes:1077,downvotes:14,score:.9279},uploaded:"2020-04-03T15:39:48.414Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f4555835fccad370eda615cbeff120afe9c4ab13",key:"96fc",state:"Published",createdAt:"2020-04-03T15:39:48.414Z",sageScore:4,diffs:[{njs:13,offset:0,notes:581,bombs:104,obstacles:28,nps:2.647,length:475.5,characteristic:"Standard",difficulty:"Hard",events:5921,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.462,paritySummary:{errors:35,warns:15,resets:10}},{njs:15,offset:0,notes:950,bombs:78,obstacles:14,nps:4.329,length:475.5,characteristic:"Standard",difficulty:"Expert",events:5921,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.462,paritySummary:{errors:42,warns:48,resets:8}},{njs:17,offset:0,notes:1184,bombs:105,obstacles:17,nps:5.395,length:475.5,characteristic:"Standard",difficulty:"ExpertPlus",events:5921,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.462,paritySummary:{errors:32,warns:43,resets:16}}],downloadURL:"https://cdn.beatsaver.com/f4555835fccad370eda615cbeff120afe9c4ab13.zip",coverURL:"https://cdn.beatsaver.com/f4555835fccad370eda615cbeff120afe9c4ab13.jpg",previewURL:"https://cdn.beatsaver.com/f4555835fccad370eda615cbeff120afe9c4ab13.mp3"}],createdAt:"2020-04-03T15:39:48.414Z",updatedAt:"2020-04-03T15:39:48.414Z",lastPublishedAt:"2020-04-03T15:39:48.414Z"},{id:"4611",name:"BTS (feat. Halsey) - Boy With Luv",description:"I wouldn't say this was rushed but that I spent a lot of time on it in a couple of days, either way I really like the song and I think the map is pretty fun too.\r\nFeel free to join our K-Pop Beat Saber Discord https://discord.gg/c9uHGYP @SimplyMarvellous#0290 if you'd like to contact me at all\r\nhttps://youtu.be/Wfhj4fjugcg\r\n\r\n\r\n\r\nDownvote if the map is bad, not because you couldn't pass it :)",uploader:{id:4285134,name:"simplymarvellous",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f7a8",avatar:"https://cdn.beatsaver.com/avatar/189618441429319680.png",type:"DISCORD"},metadata:{bpm:120,duration:232,songName:"Boy With Luv",songSubName:"BTS (ft. Halsey)",songAuthorName:"SimplyMarvellous",levelAuthorName:"simplymarvellous"},stats:{plays:0,downloads:5564,upvotes:2055,downvotes:52,score:.9279},uploaded:"2019-04-15T06:34:34Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c0e3706463c5c9b993ba5d05c2166fb0b512e695",key:"4611",state:"Published",createdAt:"2019-04-15T06:34:34Z",sageScore:5,diffs:[{njs:12,offset:0,notes:792,bombs:0,obstacles:21,nps:3.03,length:522.833,characteristic:"Standard",difficulty:"Hard",events:1832,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:261.417,paritySummary:{errors:81,warns:38,resets:0}},{njs:15,offset:0,notes:976,bombs:0,obstacles:21,nps:3.734,length:522.833,characteristic:"Standard",difficulty:"ExpertPlus",events:1832,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:261.417,paritySummary:{errors:64,warns:42,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c0e3706463c5c9b993ba5d05c2166fb0b512e695.zip",coverURL:"https://cdn.beatsaver.com/c0e3706463c5c9b993ba5d05c2166fb0b512e695.jpg",previewURL:"https://cdn.beatsaver.com/c0e3706463c5c9b993ba5d05c2166fb0b512e695.mp3"}],createdAt:"2019-04-15T06:34:34Z",updatedAt:"2019-04-15T06:34:34Z",lastPublishedAt:"2019-04-15T06:34:34Z"},{id:"1fff",name:"Chiru Chiru by REOL",description:"The 4th most played song during the 100k Contest, I present to you a dance-able map of Chiru Chiru by REOL!\r\n\r\nThis is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes by just playing Beat Saber! Go to https://bsaber.com/100k-contest/ for more info.\r\n\r\nFull length song. I've added/edited a custom countdown to the intro.\r\n\r\nPreview:\r\nhttps://youtu.be/jcx6g6NS8_4\r\n\r\nBPM: 128\r\nDuration: 3:18\r\nEasy, Normal, Hard and Expert difficulties.\r\n\r\nEasy: 253, 31 obstacles, 6 mines\r\nNormal: 356 notes, 31 obstacles, 6 mines\r\nHard: 478 notes, 31 obstacles, 18 mines\r\nExpert: 675 notes, 31 obstacles, 18 mines\r\n\r\nThanks to Kizuflux, VenclaireVR, squeaksies, Crankor, NekiCoule, Redmagi, aggrogahu and Saut for playtesting!\r\n\r\nEnjoy!",uploader:{id:4285318,name:"kolezan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fcbb",avatar:"https://cdn.beatsaver.com/avatar/220513618763055106.png",type:"DISCORD"},metadata:{bpm:128,duration:199,songName:"Chiru Chiru",songSubName:"REOL",songAuthorName:"Kolezan",levelAuthorName:"Kolezan"},stats:{plays:0,downloads:6874,upvotes:4133,downvotes:148,score:.9279},uploaded:"2018-11-12T22:29:15Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"9993d9f5b03472efa5b8b31d3dc4156301145d97",key:"1fff",state:"Published",createdAt:"2018-11-12T22:29:15Z",sageScore:4,diffs:[{njs:10,offset:0,notes:258,bombs:6,obstacles:31,nps:1.339,length:411,characteristic:"Standard",difficulty:"Easy",events:955,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192.656,paritySummary:{errors:62,warns:27,resets:3},stars:1.1},{njs:10,offset:0,notes:356,bombs:6,obstacles:31,nps:1.846,length:411.5,characteristic:"Standard",difficulty:"Normal",events:955,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192.891,paritySummary:{errors:64,warns:44,resets:3},stars:1.37},{njs:11,offset:0,notes:478,bombs:18,obstacles:31,nps:2.472,length:412.5,characteristic:"Standard",difficulty:"Hard",events:955,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.359,paritySummary:{errors:70,warns:85,resets:4},stars:1.82},{njs:11,offset:0,notes:669,bombs:18,obstacles:31,nps:3.46,length:412.5,characteristic:"Standard",difficulty:"Expert",events:956,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.359,paritySummary:{errors:96,warns:89,resets:5},stars:2.28}],downloadURL:"https://cdn.beatsaver.com/9993d9f5b03472efa5b8b31d3dc4156301145d97.zip",coverURL:"https://cdn.beatsaver.com/9993d9f5b03472efa5b8b31d3dc4156301145d97.jpg",previewURL:"https://cdn.beatsaver.com/9993d9f5b03472efa5b8b31d3dc4156301145d97.mp3"}],createdAt:"2018-11-12T22:29:15Z",updatedAt:"2018-11-12T22:29:15Z",lastPublishedAt:"2018-11-12T22:29:15Z"},{id:"6ac",name:"Pompeii - Bastille",description:"Hard only - Manageable but active. Events included.",uploader:{id:51831,name:"dietmoxie",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ec3a",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ec3a?d=retro",type:"SIMPLE"},metadata:{bpm:127,duration:214,songName:"Pompeii",songSubName:"",songAuthorName:"Bastille",levelAuthorName:"dietmoxie"},stats:{plays:0,downloads:10306,upvotes:5098,downvotes:196,score:.9279},uploaded:"2018-06-26T00:59:17Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9753e45020fe1c5681fcd74f5a41efcf3c143282",key:"6ac",state:"Published",createdAt:"2018-06-26T00:59:17Z",sageScore:4,diffs:[{njs:10,offset:0,notes:698,bombs:0,obstacles:31,nps:3.348,length:443,characteristic:"Standard",difficulty:"Hard",events:665,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.291,paritySummary:{errors:134,warns:133,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9753e45020fe1c5681fcd74f5a41efcf3c143282.zip",coverURL:"https://cdn.beatsaver.com/9753e45020fe1c5681fcd74f5a41efcf3c143282.jpg",previewURL:"https://cdn.beatsaver.com/9753e45020fe1c5681fcd74f5a41efcf3c143282.mp3"}],createdAt:"2018-06-26T00:59:17Z",updatedAt:"2018-06-26T00:59:17Z",lastPublishedAt:"2018-06-26T00:59:17Z"},{id:"54bb",name:"Bodies - Drowning Pool",description:'Fun fact: My first time hearing this song was on some random YouTube video in the 2000s, almost all YouTube videos back then used this song for some reason.\n\nWhen I reheard the song I immediately knew I have to put duck walls every time the lyrics went "HIT THE FLOOR". Also I wanted to use 1, 2, 3, 4 notes on a section of lyrics that said ONE TWO THREE FOUR.\n\nWarning: Please don\'t actually let your body hit the floor while playing this map. Smashing head first into the floor with a VR headset can be an expensive mistake.\n\n"Bodies" (often incorrectly called "Let the Bodies Hit the Floor") is a song by the American rock band Drowning Pool and also is the lead single from their debut album Sinner. It was also the theme song for the 2001 WWF SummerSlam pay-per-view event, as well as that of the ECW brand in 2006 to early 2008',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:130,duration:202,songName:"Bodies",songSubName:"",songAuthorName:"Drowning Pool",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:4168,upvotes:1980,downvotes:49,score:.9278},uploaded:"2019-06-27T18:32:03.310Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8818e19d544a6ca8b1a05e7324731fee2f38b58f",key:"54bb",state:"Published",createdAt:"2019-06-27T18:32:03.310Z",sageScore:2,diffs:[{njs:14,offset:0,notes:805,bombs:0,obstacles:19,nps:4.211,length:414.144,characteristic:"Standard",difficulty:"Expert",events:5298,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.144,paritySummary:{errors:29,warns:33,resets:0}}],downloadURL:"https://cdn.beatsaver.com/8818e19d544a6ca8b1a05e7324731fee2f38b58f.zip",coverURL:"https://cdn.beatsaver.com/8818e19d544a6ca8b1a05e7324731fee2f38b58f.jpg",previewURL:"https://cdn.beatsaver.com/8818e19d544a6ca8b1a05e7324731fee2f38b58f.mp3"}],createdAt:"2019-06-27T18:32:03.310Z",updatedAt:"2019-06-27T18:32:03.310Z",lastPublishedAt:"2019-06-27T18:32:03.310Z"},{id:"5352",name:"1999 - Charli XCX & Troye Sivan",description:"It started as a meme in #mapping-discussion and expanded to a full blown project. I really like how it turned out. Hope you enjoy it :)\n\nLength: 3:11\nBPM: 124\nNJS: 17 (Expert+), 15 (Expert), 13 (Hard)\n\nEasy slot is the lightshow as always.\n\nThanks to my playtesters CyanSnow (2x) and Redmagi, show them some love! :)\n\nDM me your feedback on discord: Teuflum#5982",uploader:{id:68740,name:"Teuflum",uniqueSet:!0,hash:"5cff0b7498cc5a672c851a6b",avatar:"https://cdn.beatsaver.com/avatar/114706869460664326.png",type:"DISCORD"},metadata:{bpm:124,duration:192,songName:"1999",songSubName:"",songAuthorName:"Charli XCX & Troye Sivan",levelAuthorName:"Teuflum"},stats:{plays:0,downloads:2205,upvotes:1273,downvotes:21,score:.9278},uploaded:"2019-06-17T15:29:13.123Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d68bd4d997726249406bce748b83bf5464da99e7",key:"5352",state:"Published",createdAt:"2019-06-17T15:29:13.123Z",sageScore:7,diffs:[{njs:13,offset:0,notes:555,bombs:56,obstacles:37,nps:2.968,length:386.5,characteristic:"Standard",difficulty:"Hard",events:6185,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:187.016,paritySummary:{errors:23,warns:8,resets:4}},{njs:15,offset:0,notes:668,bombs:56,obstacles:41,nps:3.572,length:386.5,characteristic:"Standard",difficulty:"Expert",events:6185,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:187.016,paritySummary:{errors:20,warns:16,resets:4}},{njs:17,offset:0,notes:812,bombs:8,obstacles:39,nps:4.342,length:386.5,characteristic:"Standard",difficulty:"ExpertPlus",events:6185,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:187.016,paritySummary:{errors:33,warns:48,resets:2}},{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:6185,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/d68bd4d997726249406bce748b83bf5464da99e7.zip",coverURL:"https://cdn.beatsaver.com/d68bd4d997726249406bce748b83bf5464da99e7.jpg",previewURL:"https://cdn.beatsaver.com/d68bd4d997726249406bce748b83bf5464da99e7.mp3"}],createdAt:"2019-06-17T15:29:13.123Z",updatedAt:"2019-06-17T15:29:13.123Z",lastPublishedAt:"2019-06-17T15:29:13.123Z"},{id:"a934",name:"Sabaton - Seven Pillars of Wisdom",description:"Sabaton is a Power-metal band that sings almost exclusively about historical events. This song is about Lawrence of Arabia, and is named after his autobiography.\r\n\r\nThe map is fully lit, and available in multiple difficulties. Thanks to the BSMG discord for helping test the map before release.\r\n\r\nNormal: 2.2 NPS - 10 NJS\r\nHard: 3.89 NPS - 13 NJS\r\nExpert: 5.24 NPS - 17 NJS",uploader:{id:4285369,name:"Cyrix",uniqueSet:!0,hash:"5eb6eb9a7abb000006c85add",avatar:"https://cdn.beatsaver.com/avatar/167730807929044992.png",type:"DISCORD"},metadata:{bpm:152,duration:178,songName:"Seven Pillars of Wisdom",songSubName:"",songAuthorName:"Sabaton",levelAuthorName:"Cyrix"},stats:{plays:0,downloads:2699,upvotes:824,downvotes:6,score:.9276},uploaded:"2020-05-22T21:19:05.343Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"16732f8edc59bd358278c14055cde1cd9ecb47aa",key:"a934",state:"Published",createdAt:"2020-05-22T21:19:05.343Z",sageScore:5,diffs:[{njs:10,offset:0,notes:393,bombs:0,obstacles:24,nps:2.299,length:433,characteristic:"Standard",difficulty:"Normal",events:1826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:170.921,paritySummary:{errors:18,warns:4,resets:0}},{njs:13,offset:.25,notes:696,bombs:20,obstacles:16,nps:4.044,length:436,characteristic:"Standard",difficulty:"Hard",events:1826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:172.105,paritySummary:{errors:0,warns:2,resets:3}},{njs:17,offset:.3,notes:937,bombs:16,obstacles:14,nps:5.444,length:436,characteristic:"Standard",difficulty:"Expert",events:1826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:172.105,paritySummary:{errors:0,warns:5,resets:5}}],downloadURL:"https://cdn.beatsaver.com/16732f8edc59bd358278c14055cde1cd9ecb47aa.zip",coverURL:"https://cdn.beatsaver.com/16732f8edc59bd358278c14055cde1cd9ecb47aa.jpg",previewURL:"https://cdn.beatsaver.com/16732f8edc59bd358278c14055cde1cd9ecb47aa.mp3"}],createdAt:"2020-05-22T21:19:05.343Z",updatedAt:"2020-05-22T21:19:05.343Z",lastPublishedAt:"2020-05-22T21:19:05.343Z"},{id:"51be",name:"Prayer Of The Refugee - Rise Against",description:'"Prayer of the Refugee" is a song by American rock band Rise Against. The lyrics were written by lead vocalist Tim McIlrath, and deal with the themes of forced displacement and the societal issues surrounding refugees. Thanks to @Scrappy for helping me find the variable BPM in this song',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:150,duration:200,songName:"Prayer Of The Refugee",songSubName:"Rise Against",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:3598,upvotes:1630,downvotes:35,score:.9276},uploaded:"2019-06-06T05:53:57Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9c7e5ae537bb4871513330da180c6647cd8cffff",key:"51be",state:"Published",createdAt:"2019-06-06T05:53:57Z",sageScore:6,diffs:[{njs:13.5,offset:0,notes:860,bombs:0,obstacles:23,nps:4.503,length:479.103,characteristic:"Standard",difficulty:"Expert",events:3414,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.641,paritySummary:{errors:37,warns:24,resets:0}},{njs:15,offset:0,notes:936,bombs:0,obstacles:23,nps:4.9,length:479.103,characteristic:"Standard",difficulty:"ExpertPlus",events:3414,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.641,paritySummary:{errors:33,warns:20,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9c7e5ae537bb4871513330da180c6647cd8cffff.zip",coverURL:"https://cdn.beatsaver.com/9c7e5ae537bb4871513330da180c6647cd8cffff.jpg",previewURL:"https://cdn.beatsaver.com/9c7e5ae537bb4871513330da180c6647cd8cffff.mp3"}],createdAt:"2019-06-06T05:53:57Z",updatedAt:"2019-06-06T05:53:57Z",lastPublishedAt:"2019-06-06T05:53:57Z"},{id:"226e",name:"Crawling - Linkin Park",description:"Another Linkin Park map! This time it is Crawling. \nPreview: https://www.youtube.com/watch?v=Pkr9Vm1dPv8\n\nhttps://twitter.com/TheDownyCat\nhttps://www.twitch.tv/downycat\nhttps://streamlabs.com/downycat/tip",uploader:{id:4285982,name:"downycat",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ede5",avatar:"https://cdn.beatsaver.com/avatar/173538829888782336.png",type:"DISCORD"},metadata:{bpm:105,duration:208,songName:"Crawling",songSubName:"Linkin Park",songAuthorName:"DownyCat",levelAuthorName:"downycat"},stats:{plays:0,downloads:5610,upvotes:2388,downvotes:67,score:.9276},uploaded:"2018-11-26T14:10:51Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"691b382b6ca6e69b9b908e41d439f9b7b9403fb6",key:"226e",state:"Published",createdAt:"2018-11-26T14:10:51Z",sageScore:5,diffs:[{njs:10,offset:0,notes:455,bombs:0,obstacles:64,nps:2.317,length:344,characteristic:"Standard",difficulty:"Normal",events:2399,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:196.571,paritySummary:{errors:29,warns:28,resets:0}},{njs:12,offset:0,notes:666,bombs:0,obstacles:71,nps:3.386,length:344.5,characteristic:"Standard",difficulty:"Hard",events:2399,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:196.857,paritySummary:{errors:24,warns:19,resets:0}},{njs:14,offset:0,notes:862,bombs:0,obstacles:75,nps:4.383,length:344.5,characteristic:"Standard",difficulty:"Expert",events:2399,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:196.857,paritySummary:{errors:18,warns:39,resets:0}}],downloadURL:"https://cdn.beatsaver.com/691b382b6ca6e69b9b908e41d439f9b7b9403fb6.zip",coverURL:"https://cdn.beatsaver.com/691b382b6ca6e69b9b908e41d439f9b7b9403fb6.jpg",previewURL:"https://cdn.beatsaver.com/691b382b6ca6e69b9b908e41d439f9b7b9403fb6.mp3"}],createdAt:"2018-11-26T14:10:51Z",updatedAt:"2018-11-26T14:10:51Z",lastPublishedAt:"2018-11-26T14:10:51Z"},{id:"6cf7",name:"[Noodleween] AronChupa, Little Sis Nora - Rave in the Grave",description:"2nd Place winner in the BSMG Halloween map competition! :D\n\nThis map is part of the Noodleween song pack, brought to you by the Noodle mapper group. We hope you enjoy this as much as we enjoyed making it.\n\nThis song already had a map, but I thought it could use some love and revamping. Hope you guys enjoy the full difficulty spread!\n\nExpert+ Playthrough: https://www.youtube.com/watch?v=ufEQ4L2y694&feature=youtu.be\n\nHappy Halloween! :D 👻",uploader:{id:17131,name:"tranquillizeme",uniqueSet:!0,hash:"5cff0b7798cc5a672c85609e",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c85609e?d=retro",type:"SIMPLE"},metadata:{bpm:132,duration:154,songName:"Rave In The Grave",songSubName:"",songAuthorName:"AronChupa, Little Sis Nora",levelAuthorName:"TranquillizeMe"},stats:{plays:0,downloads:2987,upvotes:1394,downvotes:26,score:.9275},uploaded:"2019-10-29T23:00:07.667Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b288ce94ed8feff67af04fd75e23acafad66b9f8",key:"6cf7",state:"Published",createdAt:"2019-10-29T23:00:07.667Z",sageScore:6,diffs:[{njs:12,offset:1.5,notes:212,bombs:0,obstacles:36,nps:1.418,length:329,characteristic:"Standard",difficulty:"Easy",events:7067,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:149.545,paritySummary:{errors:49,warns:7,resets:0}},{njs:13,offset:1,notes:286,bombs:12,obstacles:43,nps:1.912,length:329,characteristic:"Standard",difficulty:"Normal",events:7067,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:149.545,paritySummary:{errors:42,warns:12,resets:0}},{njs:14,offset:1,notes:447,bombs:12,obstacles:37,nps:2.989,length:329,characteristic:"Standard",difficulty:"Hard",events:7067,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:149.545,paritySummary:{errors:9,warns:2,resets:0}},{njs:15,offset:.5,notes:514,bombs:8,obstacles:47,nps:3.437,length:329,characteristic:"Standard",difficulty:"Expert",events:7067,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:149.545,paritySummary:{errors:7,warns:2,resets:0}},{njs:19,offset:0,notes:610,bombs:24,obstacles:44,nps:4.079,length:329,characteristic:"Standard",difficulty:"ExpertPlus",events:7067,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:149.545,paritySummary:{errors:8,warns:3,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b288ce94ed8feff67af04fd75e23acafad66b9f8.zip",coverURL:"https://cdn.beatsaver.com/b288ce94ed8feff67af04fd75e23acafad66b9f8.jpg",previewURL:"https://cdn.beatsaver.com/b288ce94ed8feff67af04fd75e23acafad66b9f8.mp3"}],createdAt:"2019-10-29T23:00:07.667Z",updatedAt:"2019-10-29T23:00:07.667Z",lastPublishedAt:"2019-10-29T23:00:07.667Z"},{id:"53fc",name:"Sabaton - Shiroyama",description:"Second map!!! I hope you all enjoy the new map with added difficulties!! Feel free to message me on discord if you liked the map, have feedback, or have any suggestions for some more maps!!!\nMax●The●Whale#8744",uploader:{id:40212,name:"maximusthewhale",uniqueSet:!0,hash:"5cff0b7898cc5a672c856ed4",avatar:"https://www.gravatar.com/avatar/5cff0b7898cc5a672c856ed4?d=retro",type:"SIMPLE"},metadata:{bpm:171,duration:212,songName:"Shiroyama",songSubName:"",songAuthorName:"Sabaton",levelAuthorName:"Maximus"},stats:{plays:0,downloads:2704,upvotes:1798,downvotes:42,score:.9275},uploaded:"2019-06-22T09:34:40.930Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1340476c96b9052adfff5e63993b7ffa03229c39",key:"53fc",state:"Published",createdAt:"2019-06-22T09:34:40.930Z",sageScore:5,diffs:[{njs:13,offset:0,notes:736,bombs:0,obstacles:5,nps:3.648,length:575,characteristic:"Standard",difficulty:"Hard",events:1038,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:201.754,paritySummary:{errors:12,warns:0,resets:0}},{njs:15,offset:0,notes:889,bombs:0,obstacles:16,nps:4.406,length:575,characteristic:"Standard",difficulty:"Expert",events:3144,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:201.754,paritySummary:{errors:22,warns:22,resets:0}},{njs:18,offset:0,notes:1353,bombs:0,obstacles:16,nps:6.706,length:575,characteristic:"Standard",difficulty:"ExpertPlus",events:3216,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:201.754,paritySummary:{errors:29,warns:27,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1340476c96b9052adfff5e63993b7ffa03229c39.zip",coverURL:"https://cdn.beatsaver.com/1340476c96b9052adfff5e63993b7ffa03229c39.jpg",previewURL:"https://cdn.beatsaver.com/1340476c96b9052adfff5e63993b7ffa03229c39.mp3"}],createdAt:"2019-06-22T09:34:40.930Z",updatedAt:"2019-06-22T09:34:40.930Z",lastPublishedAt:"2019-06-22T09:34:40.930Z"},{id:"5389",name:"On Top of the World - Imagine Dragons",description:"Re-upload of an earlier Beatmap that was lost to the update.",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:100,duration:192,songName:"On Top of the World",songSubName:"",songAuthorName:"Imagine Dragons",levelAuthorName:"BennyDaBeast"},stats:{plays:0,downloads:12331,upvotes:3114,downvotes:101,score:.9274},uploaded:"2019-06-19T17:02:53.084Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"88314981432a8002f62e464562c0c41f06393ab5",key:"5389",state:"Published",createdAt:"2019-06-19T17:02:53.084Z",sageScore:2,diffs:[{njs:10,offset:0,notes:269,bombs:0,obstacles:18,nps:1.423,length:315,characteristic:"Standard",difficulty:"Normal",events:781,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:189,paritySummary:{errors:48,warns:37,resets:0}},{njs:10,offset:0,notes:374,bombs:0,obstacles:18,nps:1.976,length:315.5,characteristic:"Standard",difficulty:"Hard",events:781,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:189.3,paritySummary:{errors:54,warns:52,resets:0}},{njs:10,offset:0,notes:551,bombs:0,obstacles:27,nps:2.911,length:315.5,characteristic:"Standard",difficulty:"Expert",events:781,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:189.3,paritySummary:{errors:81,warns:91,resets:0}},{njs:10,offset:0,notes:720,bombs:4,obstacles:27,nps:3.803,length:315.5,characteristic:"Standard",difficulty:"ExpertPlus",events:781,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:189.3,paritySummary:{errors:54,warns:71,resets:4}}],downloadURL:"https://cdn.beatsaver.com/88314981432a8002f62e464562c0c41f06393ab5.zip",coverURL:"https://cdn.beatsaver.com/88314981432a8002f62e464562c0c41f06393ab5.jpg",previewURL:"https://cdn.beatsaver.com/88314981432a8002f62e464562c0c41f06393ab5.mp3"}],createdAt:"2019-06-19T17:02:53.084Z",updatedAt:"2019-06-19T17:02:53.084Z",lastPublishedAt:"2019-06-19T17:02:53.084Z"},{id:"4a3d",name:"[Anniversary] Fractures (ft. Nevve) - Illenium [BennyDaBeast]",description:"Part of the Anniversary Song Pack",uploader:{id:37070,name:"anniversaryteam",uniqueSet:!0,hash:"5cff0b7798cc5a672c8565a3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro",type:"SIMPLE"},metadata:{bpm:160,duration:246,songName:"Fractures (ft. Nevve)",songSubName:"Illenium",songAuthorName:"BennyDaBeast",levelAuthorName:"AnniversaryTeam"},stats:{plays:0,downloads:3049,upvotes:2328,downvotes:65,score:.9274},uploaded:"2019-05-03T14:09:37Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"440945a4fe86b5e3ee7f03b98c636c881930072f",key:"4a3d",state:"Published",createdAt:"2019-05-03T14:09:37Z",sageScore:5,diffs:[{njs:12,offset:0,notes:805,bombs:0,obstacles:41,nps:3.363,length:638.25,characteristic:"Standard",difficulty:"Hard",events:2214,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:239.344,paritySummary:{errors:98,warns:99,resets:0}},{njs:12,offset:0,notes:1048,bombs:0,obstacles:41,nps:4.379,length:638.25,characteristic:"Standard",difficulty:"Expert",events:2214,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:239.344,paritySummary:{errors:145,warns:163,resets:0}},{njs:15,offset:0,notes:1060,bombs:0,obstacles:41,nps:4.429,length:638.25,characteristic:"Standard",difficulty:"ExpertPlus",events:2214,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:239.344,paritySummary:{errors:137,warns:160,resets:0}}],downloadURL:"https://cdn.beatsaver.com/440945a4fe86b5e3ee7f03b98c636c881930072f.zip",coverURL:"https://cdn.beatsaver.com/440945a4fe86b5e3ee7f03b98c636c881930072f.jpg",previewURL:"https://cdn.beatsaver.com/440945a4fe86b5e3ee7f03b98c636c881930072f.mp3"}],createdAt:"2019-05-03T14:09:37Z",updatedAt:"2019-05-03T14:09:37Z",lastPublishedAt:"2019-05-03T14:09:37Z"},{id:"41a8",name:"fhana - Aozora no Rhapsody [Miss Kobayashi's Dragon Maid Opening]",description:"edited: Reworking E+, second guessing its patterns\r\nCGDCT is the best genre of anime. Dragon maid op is fire\r\nPlease check out fhána and their other music\r\n\r\nBPM 135 \r\nExpert\r\nHard\r\nNormal\r\nEasy\r\n\r\nhas fun\r\n\r\ncontact me on discord\r\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:135,duration:96,songName:"Aozora no Rhapsody",songSubName:"fhna",songAuthorName:"ETAN",levelAuthorName:"ETAN"},stats:{plays:0,downloads:7116,upvotes:2214,downvotes:60,score:.9274},uploaded:"2019-03-29T05:34:40Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"cdd469b733ade02a7996d1055082f3e1bc14ca8a",key:"41a8",state:"Published",createdAt:"2019-03-29T05:34:40Z",sageScore:4,diffs:[{njs:10,offset:0,notes:180,bombs:0,obstacles:7,nps:2.045,length:198,characteristic:"Standard",difficulty:"Easy",events:704,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:88,paritySummary:{errors:11,warns:1,resets:0}},{njs:12,offset:0,notes:274,bombs:0,obstacles:3,nps:3.114,length:198,characteristic:"Standard",difficulty:"Normal",events:704,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:88,paritySummary:{errors:12,warns:0,resets:0}},{njs:14,offset:0,notes:379,bombs:0,obstacles:3,nps:4.307,length:198,characteristic:"Standard",difficulty:"Hard",events:704,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:88,paritySummary:{errors:16,warns:4,resets:0}},{njs:15,offset:0,notes:461,bombs:0,obstacles:2,nps:5.239,length:198,characteristic:"Standard",difficulty:"Expert",events:704,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:88,paritySummary:{errors:7,warns:6,resets:0}}],downloadURL:"https://cdn.beatsaver.com/cdd469b733ade02a7996d1055082f3e1bc14ca8a.zip",coverURL:"https://cdn.beatsaver.com/cdd469b733ade02a7996d1055082f3e1bc14ca8a.jpg",previewURL:"https://cdn.beatsaver.com/cdd469b733ade02a7996d1055082f3e1bc14ca8a.mp3"}],createdAt:"2019-03-29T05:34:40Z",updatedAt:"2019-03-29T05:34:40Z",lastPublishedAt:"2019-03-29T05:34:40Z"},{id:"84b4",name:"Nightcore - Everytime We Touch | Cascada",description:"174th Map\n\nYoutube Preview : https://youtu.be/i6so3ZhTtGQ",uploader:{id:4284588,name:"rigid",uniqueSet:!0,hash:"5cff0b7598cc5a672c852224",avatar:"https://cdn.beatsaver.com/avatar/295613108947386368.png",type:"DISCORD"},metadata:{bpm:186,duration:152,songName:"Nightcore - Everytime We Touch",songSubName:"",songAuthorName:"Cascada",levelAuthorName:"Rigid"},stats:{plays:0,downloads:4362,upvotes:1614,downvotes:35,score:.9273},uploaded:"2020-02-06T17:16:32.579Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"31979b560a0ea958f9f0d92df8dcc12f6b8f567c",key:"84b4",state:"Published",createdAt:"2020-02-06T17:16:32.579Z",sageScore:4,diffs:[{njs:15,offset:.5,notes:608,bombs:2,obstacles:77,nps:4.158,length:453.265,characteristic:"Standard",difficulty:"Expert",events:730,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:146.214,paritySummary:{errors:9,warns:8,resets:1}}],downloadURL:"https://cdn.beatsaver.com/31979b560a0ea958f9f0d92df8dcc12f6b8f567c.zip",coverURL:"https://cdn.beatsaver.com/31979b560a0ea958f9f0d92df8dcc12f6b8f567c.jpg",previewURL:"https://cdn.beatsaver.com/31979b560a0ea958f9f0d92df8dcc12f6b8f567c.mp3"}],createdAt:"2020-02-06T17:16:32.579Z",updatedAt:"2020-02-06T17:16:32.579Z",lastPublishedAt:"2020-02-06T17:16:32.579Z"},{id:"8149",name:"Great Days [JoJo's Bizarre Adventure: Diamond is Unbreakable 3rd Opening] - Karen Aoki & Daisuke Hasegawa",description:"\"Great Days\" is the third opening of JoJo's Bizarre Adventure: Diamond is Unbreakable and the seventh overall opening of the JoJo's Bizarre Adventure anime. The song is performed by the jazz vocalist Karen Aoki and Daisuke Hasegawa and composed by Yugo Kanno. The single was released on October 19, 2016.",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:170,duration:239,songName:"Great Days",songSubName:"",songAuthorName:"Daisuke Hasegawa & Karen Aoki",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:6431,upvotes:1376,downvotes:26,score:.9271},uploaded:"2020-01-25T14:01:38.069Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"3d3effcb84f2bf4aadcd7f6ba7f89eb37226a3c3",key:"8149",state:"Published",createdAt:"2020-01-25T14:01:38.069Z",sageScore:4,diffs:[{njs:16,offset:0,notes:1005,bombs:10,obstacles:54,nps:4.237,length:672,characteristic:"Standard",difficulty:"Expert",events:2987,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:237.176,paritySummary:{errors:43,warns:45,resets:0}}],downloadURL:"https://cdn.beatsaver.com/3d3effcb84f2bf4aadcd7f6ba7f89eb37226a3c3.zip",coverURL:"https://cdn.beatsaver.com/3d3effcb84f2bf4aadcd7f6ba7f89eb37226a3c3.jpg",previewURL:"https://cdn.beatsaver.com/3d3effcb84f2bf4aadcd7f6ba7f89eb37226a3c3.mp3"}],createdAt:"2020-01-25T14:01:38.069Z",updatedAt:"2020-01-25T14:01:38.069Z",lastPublishedAt:"2020-01-25T14:01:38.069Z"},{id:"8ac5",name:"Overthinker - INZO",description:"Thanks Rexxz for all your patience and lighting skillz <3",uploader:{id:4285169,name:"ryger",uniqueSet:!0,hash:"5cff0b7798cc5a672c855a42",avatar:"https://cdn.beatsaver.com/avatar/169266024502263808.png",type:"DISCORD"},metadata:{bpm:108,duration:222,songName:"Overthinker",songSubName:"",songAuthorName:"INZO",levelAuthorName:"Ryger"},stats:{plays:0,downloads:2384,upvotes:1616,downvotes:36,score:.9268},uploaded:"2020-02-26T02:39:13.425Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e09394d9d641b6739e80553ce56dcd68fa27bdf3",key:"8ac5",state:"Published",createdAt:"2020-02-26T02:39:13.425Z",sageScore:4,diffs:[{njs:20,offset:.25,notes:0,bombs:0,obstacles:2405,nps:0,length:0,characteristic:"Standard",difficulty:"Expert",events:6835,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:20,offset:.25,notes:984,bombs:0,obstacles:2405,nps:4.893,length:362,characteristic:"Standard",difficulty:"ExpertPlus",events:6836,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:201.111,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e09394d9d641b6739e80553ce56dcd68fa27bdf3.zip",coverURL:"https://cdn.beatsaver.com/e09394d9d641b6739e80553ce56dcd68fa27bdf3.jpg",previewURL:"https://cdn.beatsaver.com/e09394d9d641b6739e80553ce56dcd68fa27bdf3.mp3"}],createdAt:"2020-02-26T02:39:13.425Z",updatedAt:"2020-02-26T02:39:13.425Z",lastPublishedAt:"2020-02-26T02:39:13.425Z"},{id:"1ff6",name:"Don't Let Me Down (Illenium Remix) - The Chainsmokers feat. Daya (100k Contest)",description:"This is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes. Go to https://bsaber.com/100k-contest/ to register!\r\nDifficulties: Expert+, Expert, Hard, Normal",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:160,duration:220,songName:"Don't Let Me Down (Illenium Remix)",songSubName:"The Chainsmokers feat. Daya",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:10044,upvotes:4381,downvotes:166,score:.9268},uploaded:"2018-11-12T18:48:50Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5639a12cccf90238055116ec53e5297aa004627e",key:"1ff6",state:"Published",createdAt:"2018-11-12T18:48:50Z",sageScore:8,diffs:[{njs:10,offset:0,notes:280,bombs:0,obstacles:26,nps:1.511,length:494,characteristic:"Standard",difficulty:"Easy",events:1714,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:185.25,paritySummary:{errors:68,warns:14,resets:0}},{njs:10,offset:0,notes:360,bombs:0,obstacles:26,nps:1.943,length:494,characteristic:"Standard",difficulty:"Normal",events:1714,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:185.25,paritySummary:{errors:68,warns:32,resets:0}},{njs:12,offset:0,notes:521,bombs:0,obstacles:154,nps:2.801,length:496,characteristic:"Standard",difficulty:"Hard",events:1714,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:186,paritySummary:{errors:77,warns:49,resets:0}},{njs:12,offset:0,notes:746,bombs:0,obstacles:155,nps:4.011,length:496,characteristic:"Standard",difficulty:"Expert",events:1714,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:186,paritySummary:{errors:76,warns:100,resets:0}},{njs:14,offset:0,notes:1225,bombs:0,obstacles:207,nps:6.481,length:504,characteristic:"Standard",difficulty:"ExpertPlus",events:1714,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:189,paritySummary:{errors:101,warns:114,resets:0}}],downloadURL:"https://cdn.beatsaver.com/5639a12cccf90238055116ec53e5297aa004627e.zip",coverURL:"https://cdn.beatsaver.com/5639a12cccf90238055116ec53e5297aa004627e.jpg",previewURL:"https://cdn.beatsaver.com/5639a12cccf90238055116ec53e5297aa004627e.mp3"}],createdAt:"2018-11-12T18:48:50Z",updatedAt:"2018-11-12T18:48:50Z",lastPublishedAt:"2018-11-12T18:48:50Z"},{id:"393",name:"O-Zone - Dragostea Din Tei",description:"numa numa numa yey\r\n\r\nhard only for now, but i'll add more difficulties later\r\n\r\nfull events/lighting",uploader:{id:52747,name:"esspee39",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f198",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f198?d=retro",type:"SIMPLE"},metadata:{bpm:130,duration:214,songName:"Dragostei Din Tei",songSubName:"O-Zone",songAuthorName:"esspee",levelAuthorName:"esspee39"},stats:{plays:0,downloads:5541,upvotes:3046,downvotes:100,score:.9268},uploaded:"2018-06-04T00:27:54Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b0fd4145a269f1fc8f78afccb4a310a36f2f873c",key:"393",state:"Published",createdAt:"2018-06-04T00:27:54Z",sageScore:5,diffs:[{njs:10,offset:0,notes:676,bombs:69,obstacles:16,nps:3.266,length:448.5,characteristic:"Standard",difficulty:"Hard",events:1136,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207,paritySummary:{errors:47,warns:131,resets:9}}],downloadURL:"https://cdn.beatsaver.com/b0fd4145a269f1fc8f78afccb4a310a36f2f873c.zip",coverURL:"https://cdn.beatsaver.com/b0fd4145a269f1fc8f78afccb4a310a36f2f873c.jpg",previewURL:"https://cdn.beatsaver.com/b0fd4145a269f1fc8f78afccb4a310a36f2f873c.mp3"}],createdAt:"2018-06-04T00:27:54Z",updatedAt:"2018-06-04T00:27:54Z",lastPublishedAt:"2018-06-04T00:27:54Z"},{id:"484d",name:"Sosageyo | Shinzou wo sasageyo | Attack on Titan OP 3 - Linked Horizon",description:"Huge thanks to Skeelie for lighting this map!\r\n\r\nThis map overrides the default red-blue colors to a blue-white color, matching the Survey Corps' Wings of Freedom.\r\nEasy, Hard, Expert, and Expert+ are all available.\r\nEasy is a bit spicy, Expert is very spicy.",uploader:{id:15368,name:"theab",uniqueSet:!0,hash:"5cff0b7698cc5a672c853a14",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c853a14?d=retro",type:"SIMPLE"},metadata:{bpm:160,duration:90,songName:"Shinzou wo Sasageyo",songSubName:"Linked Horizon",songAuthorName:"Ab & Skeelie",levelAuthorName:"TheAb"},stats:{plays:0,downloads:8967,upvotes:2595,downvotes:79,score:.9267},uploaded:"2019-04-25T10:29:55Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"713da9a9a0737f402ca75819ea9dc19ec3723329",key:"484d",state:"Published",createdAt:"2019-04-25T10:29:55Z",sageScore:5,diffs:[{njs:12,offset:0,notes:123,bombs:4,obstacles:5,nps:1.439,length:228,characteristic:"Standard",difficulty:"Easy",events:5254,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.5,paritySummary:{errors:30,warns:3,resets:2}},{njs:12,offset:0,notes:229,bombs:0,obstacles:5,nps:2.678,length:228,characteristic:"Standard",difficulty:"Hard",events:5215,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.5,paritySummary:{errors:21,warns:18,resets:0}},{njs:15,offset:0,notes:372,bombs:0,obstacles:4,nps:4.351,length:228,characteristic:"Standard",difficulty:"Expert",events:5215,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.5,paritySummary:{errors:33,warns:29,resets:0}},{njs:18,offset:0,notes:548,bombs:0,obstacles:3,nps:6.627,length:220.5,characteristic:"Standard",difficulty:"ExpertPlus",events:5215,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:82.688,paritySummary:{errors:27,warns:48,resets:0}}],downloadURL:"https://cdn.beatsaver.com/713da9a9a0737f402ca75819ea9dc19ec3723329.zip",coverURL:"https://cdn.beatsaver.com/713da9a9a0737f402ca75819ea9dc19ec3723329.jpg",previewURL:"https://cdn.beatsaver.com/713da9a9a0737f402ca75819ea9dc19ec3723329.mp3"}],createdAt:"2019-04-25T10:29:55Z",updatedAt:"2019-04-25T10:29:55Z",lastPublishedAt:"2019-04-25T10:29:55Z"},{id:"21d9",name:"GAY FROGS",description:"I DON'T LIKE EM PUTTING CHEMICALS IN THE WATER THAT TURN THE FRIGGIN FROGS GAY!",uploader:{id:408,name:"nuketime",uniqueSet:!0,hash:"5cff0b7498cc5a672c8507f7",avatar:"https://cdn.beatsaver.com/avatar/175811186007343104.png",type:"DISCORD"},metadata:{bpm:143,duration:58,songName:"Gay Frogs",songSubName:"",songAuthorName:"Nuketime",levelAuthorName:"Nuketime"},stats:{plays:0,downloads:2129,upvotes:1147,downvotes:18,score:.9267},uploaded:"2018-11-24T03:47:04Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c7bdbfea113219f8b372ca6107540995c2e81997",key:"21d9",state:"Published",createdAt:"2018-11-24T03:47:04Z",sageScore:3,diffs:[{njs:15,offset:0,notes:278,bombs:0,obstacles:2,nps:5.066,length:109.75,characteristic:"Standard",difficulty:"ExpertPlus",events:280,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:46.049,paritySummary:{errors:52,warns:17,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c7bdbfea113219f8b372ca6107540995c2e81997.zip",coverURL:"https://cdn.beatsaver.com/c7bdbfea113219f8b372ca6107540995c2e81997.jpg",previewURL:"https://cdn.beatsaver.com/c7bdbfea113219f8b372ca6107540995c2e81997.mp3"}],createdAt:"2018-11-24T03:47:04Z",updatedAt:"2018-11-24T03:47:04Z",lastPublishedAt:"2018-11-24T03:47:04Z"},{id:"a76b",name:"BB 2020 | PSYQUI feat. Marpril - Girly Cupid | 18 | Submission #47",description:"This is a submission for the Building Blocks 2020 mapping contest!\n\nAll submissions are anonymous and will be uploaded by the BuildingBlocks account from May 3rd-May 17th 2020.\n\nInterested in checking out more map submissions or entering yourself? Join our discord here: https://discord.gg/3VAPcdg\n\nRequired Plugins:\nNoodle Extension\nChroma",uploader:{id:27741,name:"buildingblocks",uniqueSet:!0,hash:"5eac7bb67abb000006beca92",avatar:"https://www.gravatar.com/avatar/5eac7bb67abb000006beca92?d=retro",type:"SIMPLE"},metadata:{bpm:133,duration:244,songName:"Girly Cupid",songSubName:"feat. Marpril",songAuthorName:"PSYQUI",levelAuthorName:"Building Blocks 2020"},stats:{plays:0,downloads:1140,upvotes:1003,downvotes:13,score:.9266},uploaded:"2020-05-17T20:45:31.509Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"55cd8d585f6e63fb9b06d7c7358bda53f821fa81",key:"a76b",state:"Published",createdAt:"2020-05-17T20:45:31.509Z",sageScore:3,diffs:[{njs:18,offset:-.2,notes:764,bombs:0,obstacles:36331,nps:3.232,length:524,characteristic:"Standard",difficulty:"Expert",events:3539,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:236.391,paritySummary:{errors:28,warns:16,resets:0}}],downloadURL:"https://cdn.beatsaver.com/55cd8d585f6e63fb9b06d7c7358bda53f821fa81.zip",coverURL:"https://cdn.beatsaver.com/55cd8d585f6e63fb9b06d7c7358bda53f821fa81.jpg",previewURL:"https://cdn.beatsaver.com/55cd8d585f6e63fb9b06d7c7358bda53f821fa81.mp3"}],createdAt:"2020-05-17T20:45:31.509Z",updatedAt:"2020-05-17T20:45:31.509Z",lastPublishedAt:"2020-05-17T20:45:31.509Z"},{id:"6368",name:"Mimimi - Nightcore",description:"Youtube Preview: https://youtu.be/vqVK85T72hs",uploader:{id:23751,name:"monteblanco",uniqueSet:!0,hash:"5cff0b7798cc5a672c855ef5",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855ef5?d=retro",type:"SIMPLE"},metadata:{bpm:144.6,duration:167,songName:"Mi Mi Mi - Nightcore",songSubName:"",songAuthorName:"NightcoreZodiac",levelAuthorName:"Monteblanco"},stats:{plays:0,downloads:2275,upvotes:1677,downvotes:39,score:.9266},uploaded:"2019-09-14T22:08:05.659Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"448f6e65098a9b0d2de0c5b87a53300a61795eb3",key:"6368",state:"Published",createdAt:"2019-09-14T22:08:05.659Z",sageScore:4,diffs:[{njs:16,offset:0,notes:755,bombs:0,obstacles:2,nps:4.648,length:391.5,characteristic:"Standard",difficulty:"Expert",events:859,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:162.448,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/448f6e65098a9b0d2de0c5b87a53300a61795eb3.zip",coverURL:"https://cdn.beatsaver.com/448f6e65098a9b0d2de0c5b87a53300a61795eb3.jpg",previewURL:"https://cdn.beatsaver.com/448f6e65098a9b0d2de0c5b87a53300a61795eb3.mp3"}],createdAt:"2019-09-14T22:08:05.659Z",updatedAt:"2019-09-14T22:08:05.659Z",lastPublishedAt:"2019-09-14T22:08:05.659Z"},{id:"51fd",name:"BLOODY STREAM",description:"For the Jojo Fans",uploader:{id:4284704,name:"epg7ens",uniqueSet:!0,hash:"5cff0b7798cc5a672c855bb6",avatar:"https://cdn.beatsaver.com/avatar/174643589618466816.png",type:"DISCORD"},metadata:{bpm:132,duration:259,songName:"BLOODY STREAM",songSubName:"Coda",songAuthorName:"EPG7ENS",levelAuthorName:"EPG7ENS"},stats:{plays:0,downloads:3172,upvotes:2054,downvotes:55,score:.9266},uploaded:"2019-06-07T06:27:36Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7d5038dd8aae109cbe537ecbc6c38ec458c820f8",key:"51fd",state:"Published",createdAt:"2019-06-07T06:27:36Z",sageScore:5,diffs:[{njs:17,offset:0,notes:1448,bombs:0,obstacles:0,nps:5.648,length:564,characteristic:"Standard",difficulty:"ExpertPlus",events:2746,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:256.364,paritySummary:{errors:2,warns:3,resets:0}}],downloadURL:"https://cdn.beatsaver.com/7d5038dd8aae109cbe537ecbc6c38ec458c820f8.zip",coverURL:"https://cdn.beatsaver.com/7d5038dd8aae109cbe537ecbc6c38ec458c820f8.jpg",previewURL:"https://cdn.beatsaver.com/7d5038dd8aae109cbe537ecbc6c38ec458c820f8.mp3"}],createdAt:"2019-06-07T06:27:36Z",updatedAt:"2019-06-07T06:27:36Z",lastPublishedAt:"2019-06-07T06:27:36Z"},{id:"4b20",name:"[Anniversary] Booty Bounce - Tujamo & Taio Cruz [Fafurion]",description:"Part of the Anniversary Song Pack\r\nExpert+ must be unlocked via the Anniversary Campaign\r\nEdit: Fixed notes placed after song is finished",uploader:{id:37070,name:"anniversaryteam",uniqueSet:!0,hash:"5cff0b7798cc5a672c8565a3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:198,songName:"Booty Bounce",songSubName:"Tujamo & Taio Cruz",songAuthorName:"Fafurion",levelAuthorName:"AnniversaryTeam"},stats:{plays:0,downloads:4060,upvotes:1819,downvotes:45,score:.9266},uploaded:"2019-05-07T03:38:08Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d106db545bccd0bba2432b71d94bb7f94fd1f9a2",key:"4b20",state:"Published",createdAt:"2019-05-07T03:38:08Z",sageScore:7,diffs:[{njs:13,offset:0,notes:366,bombs:0,obstacles:0,nps:1.881,length:415,characteristic:"Standard",difficulty:"Easy",events:6151,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.531,paritySummary:{errors:6,warns:0,resets:0}},{njs:13,offset:0,notes:550,bombs:0,obstacles:0,nps:2.824,length:415.5,characteristic:"Standard",difficulty:"Normal",events:6151,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.766,paritySummary:{errors:6,warns:0,resets:0}},{njs:13,offset:0,notes:732,bombs:0,obstacles:0,nps:3.756,length:415.75,characteristic:"Standard",difficulty:"Hard",events:6151,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.883,paritySummary:{errors:20,warns:16,resets:0}},{njs:15,offset:0,notes:874,bombs:0,obstacles:0,nps:4.485,length:415.75,characteristic:"Standard",difficulty:"Expert",events:6151,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.883,paritySummary:{errors:28,warns:34,resets:0}},{njs:15,offset:0,notes:938,bombs:0,obstacles:0,nps:4.813,length:415.75,characteristic:"Standard",difficulty:"ExpertPlus",events:6151,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.883,paritySummary:{errors:32,warns:34,resets:0}}],downloadURL:"https://cdn.beatsaver.com/d106db545bccd0bba2432b71d94bb7f94fd1f9a2.zip",coverURL:"https://cdn.beatsaver.com/d106db545bccd0bba2432b71d94bb7f94fd1f9a2.jpg",previewURL:"https://cdn.beatsaver.com/d106db545bccd0bba2432b71d94bb7f94fd1f9a2.mp3"}],createdAt:"2019-05-07T03:38:08Z",updatedAt:"2019-05-07T03:38:08Z",lastPublishedAt:"2019-05-07T03:38:08Z"},{id:"672f",name:"Kyouran Hey Kids!! [TV Size] - THE ORAL CIGARETTES (Noragami Aragoto Opening)",description:"Added a more comfortable diff which is more similar to my usual mapping style. If you don't like Ex+, play 'Shinki' for more comfort :) Also included a Hard diff for new players to enjoy this amazing song!\n\nPreview(Shinki) by Monteblanco: https://www.youtube.com/watch?v=9g9k1PomJGc\n\nHard: 369 Notes\nExpert+: 582 Notes\nShinki: 484 Notes\nLighting: 2243 Events",uploader:{id:4285130,name:"zoinkai__",uniqueSet:!0,hash:"5d465581f9bbae00060f3215",avatar:"https://cdn.beatsaver.com/avatar/146677763347185665.png",type:"DISCORD"},metadata:{bpm:142,duration:91,songName:"Kyouran Hey Kids!! (TV Size)",songSubName:"Noragami Aragoto Opening (V2)",songAuthorName:"THE ORAL CIGARETTES",levelAuthorName:"Zoinkai"},stats:{plays:0,downloads:3439,upvotes:1294,downvotes:24,score:.9264},uploaded:"2019-10-01T14:49:19.005Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ad82ca6317e82318db8281f8902952f9d6175d3e",key:"672f",state:"Published",createdAt:"2019-10-01T14:49:19.005Z",sageScore:6,diffs:[{njs:12,offset:0,notes:369,bombs:0,obstacles:21,nps:4.456,length:196,characteristic:"Standard",difficulty:"Hard",events:2243,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:82.817,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:0,notes:582,bombs:7,obstacles:33,nps:6.622,length:208,characteristic:"Standard",difficulty:"Expert",events:2243,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.887,paritySummary:{errors:6,warns:10,resets:1}},{njs:18,offset:0,notes:484,bombs:13,obstacles:34,nps:5.507,length:208,characteristic:"Standard",difficulty:"ExpertPlus",events:2243,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.887,paritySummary:{errors:5,warns:13,resets:2}}],downloadURL:"https://cdn.beatsaver.com/ad82ca6317e82318db8281f8902952f9d6175d3e.zip",coverURL:"https://cdn.beatsaver.com/ad82ca6317e82318db8281f8902952f9d6175d3e.jpg",previewURL:"https://cdn.beatsaver.com/ad82ca6317e82318db8281f8902952f9d6175d3e.mp3"}],createdAt:"2019-10-01T14:49:19.005Z",updatedAt:"2019-10-01T14:49:19.005Z",lastPublishedAt:"2019-10-01T14:49:19.005Z"},{id:"5d26",name:"[Anniversary] Dancin (Krono Remix) - Aaron Smith [Skyler Wallace & Rexxz]",description:"Part of the Anniversary Song Pack",uploader:{id:37070,name:"anniversaryteam",uniqueSet:!0,hash:"5cff0b7798cc5a672c8565a3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro",type:"SIMPLE"},metadata:{bpm:120,duration:198,songName:"Dancin",songSubName:"Krono Remix",songAuthorName:"Aaron Smith",levelAuthorName:"Skyler Wallace & Rexxz"},stats:{plays:0,downloads:7081,upvotes:2783,downvotes:89,score:.9263},uploaded:"2019-08-16T01:48:15.139Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"52cf3774ef1705f2830a85ad3147be9c52c795af",key:"5d26",state:"Published",createdAt:"2019-08-16T01:48:15.139Z",sageScore:7,diffs:[{njs:10,offset:1,notes:232,bombs:0,obstacles:8,nps:1.215,length:382,characteristic:"Standard",difficulty:"Easy",events:7824,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191,paritySummary:{errors:57,warns:26,resets:0}},{njs:10,offset:1,notes:280,bombs:0,obstacles:0,nps:1.458,length:384,characteristic:"Standard",difficulty:"Normal",events:7824,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:71,warns:47,resets:0}},{njs:10,offset:1,notes:386,bombs:0,obstacles:4,nps:2.01,length:384,characteristic:"Standard",difficulty:"Hard",events:7824,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:68,warns:47,resets:0}},{njs:14,offset:0,notes:594,bombs:0,obstacles:0,nps:3.094,length:384,characteristic:"Standard",difficulty:"Expert",events:7824,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:52,warns:59,resets:0}},{njs:14,offset:0,notes:793,bombs:0,obstacles:30,nps:4.13,length:384,characteristic:"Standard",difficulty:"ExpertPlus",events:7824,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:81,warns:81,resets:0}}],downloadURL:"https://cdn.beatsaver.com/52cf3774ef1705f2830a85ad3147be9c52c795af.zip",coverURL:"https://cdn.beatsaver.com/52cf3774ef1705f2830a85ad3147be9c52c795af.jpg",previewURL:"https://cdn.beatsaver.com/52cf3774ef1705f2830a85ad3147be9c52c795af.mp3"}],createdAt:"2019-08-16T01:48:15.139Z",updatedAt:"2019-08-16T01:48:15.139Z",lastPublishedAt:"2019-08-16T01:48:15.139Z"},{id:"32e",name:"Daft Punk - Harder Better Faster Stronger",description:"Expert & Hard | 600+ Blocks | Full Song 3:44 | Includes Lighting. Request to: @themakertales",uploader:{id:51740,name:"runrockgame",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f04e",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f04e?d=retro",type:"SIMPLE"},metadata:{bpm:123,duration:224,songName:"Harder Better Faster Stronger",songSubName:"Daft Punk",songAuthorName:"RunRockGame",levelAuthorName:"runrockgame"},stats:{plays:0,downloads:14652,upvotes:15728,downvotes:820,score:.9263},uploaded:"2018-06-01T18:01:45Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7c7f38d467bb43fe11a142581e63e324622ecc71",key:"32e",state:"Published",createdAt:"2018-06-01T18:01:45Z",sageScore:6,diffs:[{njs:10,offset:0,notes:423,bombs:57,obstacles:33,nps:1.381,length:630.5,characteristic:"Standard",difficulty:"Hard",events:1618,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:307.561,paritySummary:{errors:95,warns:38,resets:16}},{njs:10,offset:0,notes:616,bombs:68,obstacles:33,nps:2.011,length:630.5,characteristic:"Standard",difficulty:"Expert",events:1618,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:307.561,paritySummary:{errors:60,warns:83,resets:14}}],downloadURL:"https://cdn.beatsaver.com/7c7f38d467bb43fe11a142581e63e324622ecc71.zip",coverURL:"https://cdn.beatsaver.com/7c7f38d467bb43fe11a142581e63e324622ecc71.jpg",previewURL:"https://cdn.beatsaver.com/7c7f38d467bb43fe11a142581e63e324622ecc71.mp3"}],createdAt:"2018-06-01T18:01:45Z",updatedAt:"2018-06-01T18:01:45Z",lastPublishedAt:"2018-06-01T18:01:45Z"},{id:"636",name:"Burn - Ellie Goulding",description:"Difficulties: Expert, Hard, Normal\r\nCome Hang Out on Twitch! http://www.twitch.tv/bennydabeastlive\r\nYouTube Link: https://youtu.be/KOdvSdrnaeE\r\n\r\nIf you like this, check out my other beat maps:\r\nUptown Funk: https://beatsaver.com/details.php?id=1962\r\nCAN'T STOP THE FEELING by Justin Timberlake: https://beatsaver.com/details.php?id=1587\r\nMidnight City by M83: https://beatsaver.com/details.php?id=542\r\nKids by MGMT: https://beatsaver.com/details.php?id=421\r\nWhat You Know by Two Door Cinema Club: https://beatsaver.com/details.php?id=1107\r\nPolish Girl by Neon Indian: https://beatsaver.com/details.php?id=694",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:174,duration:233,songName:"Burn",songSubName:"Ellie Goulding",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:14492,upvotes:7023,downvotes:311,score:.9262},uploaded:"2018-06-22T20:31:34Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"9d31d3aab3d58ab540df63caed06d62ff1cfefdd",key:"636",state:"Published",createdAt:"2018-06-22T20:31:34Z",sageScore:7,diffs:[{njs:10,offset:0,notes:438,bombs:12,obstacles:8,nps:1.58,length:804,characteristic:"Standard",difficulty:"Easy",events:396,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:277.241,paritySummary:{errors:107,warns:62,resets:0}},{njs:10,offset:0,notes:519,bombs:12,obstacles:8,nps:1.872,length:804,characteristic:"Standard",difficulty:"Hard",events:396,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:277.241,paritySummary:{errors:67,warns:109,resets:0}},{njs:10,offset:0,notes:686,bombs:12,obstacles:8,nps:3.251,length:612,characteristic:"Standard",difficulty:"Expert",events:396,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:211.034,paritySummary:{errors:120,warns:168,resets:0},stars:2.37}],downloadURL:"https://cdn.beatsaver.com/9d31d3aab3d58ab540df63caed06d62ff1cfefdd.zip",coverURL:"https://cdn.beatsaver.com/9d31d3aab3d58ab540df63caed06d62ff1cfefdd.jpg",previewURL:"https://cdn.beatsaver.com/9d31d3aab3d58ab540df63caed06d62ff1cfefdd.mp3"}],createdAt:"2018-06-22T20:31:34Z",updatedAt:"2018-06-22T20:31:34Z",lastPublishedAt:"2018-06-22T20:31:34Z"},{id:"b662",name:"PREPARING THE KRABBY PATTY",description:"Just a funny little map I made a couple weeks ago. I thought you might enjoy it so I'm releasing it now.\r\nI hope you enjoy.\r\n\r\nThe song is from the SpongeBob episode, Krusty Krab Training Video.\r\nEpisode Info: https://spongebob.fandom.com/wiki/Krusty_Krab_Training_Video",uploader:{id:4284694,name:"jokidum",uniqueSet:!0,hash:"5e15518d47f1600006e912cc",avatar:"https://cdn.beatsaver.com/avatar/494282373094047745.png",type:"DISCORD"},metadata:{bpm:145,duration:37,songName:"PREPARING THE KRABBY PATTY",songSubName:"",songAuthorName:"SpongeBob SquarePants",levelAuthorName:"Jokidum"},stats:{plays:0,downloads:2731,upvotes:1125,downvotes:18,score:.9261},uploaded:"2020-06-26T20:00:17.824Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f931e1d23e0fad3b1ac22d86c55ab17718470b6d",key:"b662",state:"Published",createdAt:"2020-06-26T20:00:17.824Z",sageScore:-2,diffs:[{njs:12,offset:0,notes:165,bombs:0,obstacles:2,nps:5.75,length:69.344,characteristic:"Standard",difficulty:"ExpertPlus",events:628,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:28.694,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f931e1d23e0fad3b1ac22d86c55ab17718470b6d.zip",coverURL:"https://cdn.beatsaver.com/f931e1d23e0fad3b1ac22d86c55ab17718470b6d.jpg",previewURL:"https://cdn.beatsaver.com/f931e1d23e0fad3b1ac22d86c55ab17718470b6d.mp3"}],createdAt:"2020-06-26T20:00:17.824Z",updatedAt:"2020-06-26T20:00:17.824Z",lastPublishedAt:"2020-06-26T20:00:17.824Z"},{id:"6381",name:"Caravan Palace - Moonshine",description:"Easy, Normal, Hard, Expert, ExpertPlus\n\nE+: https://www.youtube.com/watch?v=pQFgyOkFdgM\n\nRequested by laser",uploader:{id:4235138,name:"CyanSnow",uniqueSet:!0,hash:"5cff0b7698cc5a672c8543ac",avatar:"https://cdn.beatsaver.com/avatar/154341137694326784.png",type:"DISCORD"},metadata:{bpm:117,duration:215,songName:"Moonshine",songSubName:"",songAuthorName:"Caravan Palace",levelAuthorName:"CyanSnow"},stats:{plays:0,downloads:3301,upvotes:1700,downvotes:41,score:.9261},uploaded:"2019-09-15T02:18:33.112Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"fd8d96de2a21cd4c56c6657214bb88e1b127b471",key:"6381",state:"Published",createdAt:"2019-09-15T02:18:33.112Z",sageScore:8,diffs:[{njs:12,offset:.5,notes:260,bombs:0,obstacles:23,nps:1.24,length:409,characteristic:"Standard",difficulty:"Easy",events:3302,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.744,paritySummary:{errors:96,warns:14,resets:0}},{njs:12,offset:.5,notes:376,bombs:0,obstacles:23,nps:1.793,length:409,characteristic:"Standard",difficulty:"Normal",events:3302,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.744,paritySummary:{errors:38,warns:19,resets:0}},{njs:13,offset:.25,notes:596,bombs:0,obstacles:10,nps:2.856,length:407,characteristic:"Standard",difficulty:"Hard",events:3302,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:208.718,paritySummary:{errors:7,warns:7,resets:0}},{njs:15,offset:0,notes:691,bombs:0,obstacles:9,nps:3.311,length:407,characteristic:"Standard",difficulty:"Expert",events:3302,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:208.718,paritySummary:{errors:7,warns:11,resets:0}},{njs:17,offset:-.25,notes:1302,bombs:0,obstacles:8,nps:6.2,length:409.5,characteristic:"Standard",difficulty:"ExpertPlus",events:3299,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:210,paritySummary:{errors:3,warns:3,resets:0}}],downloadURL:"https://cdn.beatsaver.com/fd8d96de2a21cd4c56c6657214bb88e1b127b471.zip",coverURL:"https://cdn.beatsaver.com/fd8d96de2a21cd4c56c6657214bb88e1b127b471.jpg",previewURL:"https://cdn.beatsaver.com/fd8d96de2a21cd4c56c6657214bb88e1b127b471.mp3"}],createdAt:"2019-09-15T02:18:33.112Z",updatedAt:"2019-09-15T02:18:33.112Z",lastPublishedAt:"2019-09-15T02:18:33.112Z"},{id:"8570",name:"Dua Lipa - Physical",description:"Physical - The first difficulty is Hard but is mislabeled as Expert. I have no way to update this sorry! The second difficulty is Expert.",uploader:{id:4285261,name:"yomama",uniqueSet:!0,hash:"5e23f0a1054bbd0007bc1ed4",avatar:"https://cdn.beatsaver.com/avatar/153595294792155137.png",type:"DISCORD"},metadata:{bpm:147,duration:195,songName:"Physical",songSubName:"",songAuthorName:"Dua Lipa",levelAuthorName:"yomama"},stats:{plays:0,downloads:4086,upvotes:1554,downvotes:35,score:.926},uploaded:"2020-02-09T03:16:30.433Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ab7c911471a652de2ba74bd6df2a4cbbc5d45fee",key:"8570",state:"Published",createdAt:"2020-02-09T03:16:30.433Z",sageScore:4,diffs:[{njs:10,offset:0,notes:767,bombs:0,obstacles:33,nps:4.059,length:463,characteristic:"Standard",difficulty:"Hard",events:2281,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.98,paritySummary:{errors:105,warns:24,resets:0}},{njs:14,offset:0,notes:841,bombs:0,obstacles:33,nps:4.45,length:463,characteristic:"Standard",difficulty:"Expert",events:1397,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.98,paritySummary:{errors:101,warns:44,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ab7c911471a652de2ba74bd6df2a4cbbc5d45fee.zip",coverURL:"https://cdn.beatsaver.com/ab7c911471a652de2ba74bd6df2a4cbbc5d45fee.jpg",previewURL:"https://cdn.beatsaver.com/ab7c911471a652de2ba74bd6df2a4cbbc5d45fee.mp3"}],createdAt:"2020-02-09T03:16:30.433Z",updatedAt:"2020-02-09T03:16:30.433Z",lastPublishedAt:"2020-02-09T03:16:30.433Z"},{id:"6f60",name:"True Damage - GIANTS",description:"PepeJamJam ",uploader:{id:4285107,name:"kikaeaeon",uniqueSet:!0,hash:"5cff0b7498cc5a672c85109b",avatar:"https://cdn.beatsaver.com/avatar/103715469822816256.png",type:"DISCORD"},metadata:{bpm:155,duration:193,songName:"GIANTS",songSubName:"",songAuthorName:"True Damage",levelAuthorName:"KikaeAeon"},stats:{plays:0,downloads:7189,upvotes:2503,downvotes:77,score:.926},uploaded:"2019-11-11T08:43:31.658Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7fba5d716708d625428985bbead477321c419240",key:"6f60",state:"Published",createdAt:"2019-11-11T08:43:31.658Z",sageScore:7,diffs:[{njs:10,offset:0,notes:418,bombs:0,obstacles:68,nps:2.279,length:473.72,characteristic:"Standard",difficulty:"Hard",events:1150,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.376,paritySummary:{errors:21,warns:7,resets:0}},{njs:12,offset:0,notes:633,bombs:0,obstacles:54,nps:3.452,length:473.72,characteristic:"Standard",difficulty:"Expert",events:1150,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.376,paritySummary:{errors:12,warns:14,resets:0}},{njs:16,offset:0,notes:863,bombs:0,obstacles:59,nps:4.705,length:473.84,characteristic:"Standard",difficulty:"ExpertPlus",events:1150,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.422,paritySummary:{errors:30,warns:55,resets:0}}],downloadURL:"https://cdn.beatsaver.com/7fba5d716708d625428985bbead477321c419240.zip",coverURL:"https://cdn.beatsaver.com/7fba5d716708d625428985bbead477321c419240.jpg",previewURL:"https://cdn.beatsaver.com/7fba5d716708d625428985bbead477321c419240.mp3"}],createdAt:"2019-11-11T08:43:31.658Z",updatedAt:"2019-11-11T08:43:31.658Z",lastPublishedAt:"2019-11-11T08:43:31.658Z"},{id:"c208",name:"[Alphabeat - Pegboard Nerds Pack] Pegboard Nerds - Disconnected",description:"Part of the Pegboard Nerds Music Pack - Presented by the Alphabeat Mapping Group.\n\nAlphabeat is a mapping group that currently consists of 6 members, 4 of which have made this pack. This Pegboard Nerds pack is brought to you by Timeweaver, Rayman9515, KuritsaDBS & FireStrike!\n\nThis map uses a custom platform made by Rayman! Download it here: https://modelsaber.com/Platforms/?id=1594988870\n\nAll songs included in this pack:\n- Gunslinga (Mapped by Rayman)\n- Coffins (Mapped by Rayman)\n- Superstar (Mapped by Timeweaver & Firestrike)\n- Razor Sharp (Mapped by Firestrike)\n- Luigi’s Mansion (Mapped by Rayman)\n- Try This (Mapped by Timeweaver & Firestrike)\n- Swamp Thing (Mapped by Rayman & KuritsaDVR)\n- Exterminate (Mapped by Timeweaver)\n- Disconnected (Mapped by Timeweaver & Firestrike)\n- Here it Comes (Mapped by KuritsaDVR & Timeweaver)\nGet the playlist here: Coming Soon\n\nCheck everyone out:\nRayman: https://beatsaver.com/uploader/5dc6edac6dea0b0006c18486\nFirestrike: https://beatsaver.com/uploader/5cff0b7498cc5a672c85055a\nKuritsaDBS: https://beatsaver.com/uploader/5cff0b7698cc5a672c8537ef\n\nIncludes\n- 5 Standard Difficulties\n- 1 One Saber Difficulty",uploader:{id:4284197,name:"timeweaver",uniqueSet:!0,hash:"5d47d586c5301900060b2f6c",avatar:"https://cdn.beatsaver.com/avatar/607399708121366529.png",type:"DISCORD"},metadata:{bpm:128,duration:212,songName:"Disconnected",songSubName:"",songAuthorName:"Pegboard Nerds",levelAuthorName:"FireStrike & Timeweaver"},stats:{plays:0,downloads:4098,upvotes:1198,downvotes:21,score:.9259},uploaded:"2020-07-17T13:00:44.293Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"423bd0a80440bcc9dda9dbe20a72ed235dfc3e84",key:"c208",state:"Published",createdAt:"2020-07-17T13:00:44.293Z",sageScore:7,diffs:[{njs:9,offset:0,notes:274,bombs:0,obstacles:43,nps:1.319,length:443,characteristic:"Standard",difficulty:"Easy",events:4547,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.656,paritySummary:{errors:82,warns:16,resets:0}},{njs:10,offset:1,notes:374,bombs:0,obstacles:58,nps:1.799,length:443.5,characteristic:"Standard",difficulty:"Normal",events:4547,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.891,paritySummary:{errors:62,warns:42,resets:0}},{njs:12,offset:.5,notes:567,bombs:0,obstacles:60,nps:2.727,length:443.5,characteristic:"Standard",difficulty:"Hard",events:4547,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.891,paritySummary:{errors:31,warns:22,resets:0}},{njs:15,offset:0,notes:777,bombs:0,obstacles:73,nps:3.738,length:443.5,characteristic:"Standard",difficulty:"Expert",events:4547,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.891,paritySummary:{errors:2,warns:0,resets:0}},{njs:17,offset:-.25,notes:957,bombs:114,obstacles:56,nps:4.603,length:443.5,characteristic:"Standard",difficulty:"ExpertPlus",events:4547,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.891,paritySummary:{errors:0,warns:2,resets:0}},{njs:15,offset:0,notes:611,bombs:0,obstacles:85,nps:2.939,length:443.5,characteristic:"OneSaber",difficulty:"Expert",events:4548,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.891,paritySummary:{errors:0,warns:1,resets:0}}],downloadURL:"https://cdn.beatsaver.com/423bd0a80440bcc9dda9dbe20a72ed235dfc3e84.zip",coverURL:"https://cdn.beatsaver.com/423bd0a80440bcc9dda9dbe20a72ed235dfc3e84.jpg",previewURL:"https://cdn.beatsaver.com/423bd0a80440bcc9dda9dbe20a72ed235dfc3e84.mp3"}],createdAt:"2020-07-17T13:00:44.293Z",updatedAt:"2020-07-17T13:00:44.293Z",lastPublishedAt:"2020-07-17T13:00:44.293Z"},{id:"1fed",name:"Change The World - Fox Blanco - 100k Contest",description:"This is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes. Go to https://bsaber.com/100k-contest/ to register!",uploader:{id:13320,name:"novashaft",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ee55",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee55?d=retro",type:"SIMPLE"},metadata:{bpm:126,duration:179,songName:"Change The World",songSubName:"Fox Blanco",songAuthorName:"NovaShaft",levelAuthorName:"novashaft"},stats:{plays:0,downloads:4075,upvotes:1249,downvotes:23,score:.9259},uploaded:"2018-11-12T17:42:26Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"fcc70ede2fcbd648a25a954e6928a14985f1fbe8",key:"1fed",state:"Published",createdAt:"2018-11-12T17:42:26Z",sageScore:5,diffs:[{njs:10,offset:0,notes:245,bombs:0,obstacles:18,nps:1.4,length:367.5,characteristic:"Standard",difficulty:"Easy",events:889,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175,paritySummary:{errors:25,warns:4,resets:0}},{njs:10,offset:0,notes:321,bombs:0,obstacles:19,nps:1.834,length:367.5,characteristic:"Standard",difficulty:"Normal",events:889,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175,paritySummary:{errors:35,warns:6,resets:0}},{njs:10,offset:0,notes:443,bombs:0,obstacles:19,nps:2.531,length:367.5,characteristic:"Standard",difficulty:"Hard",events:889,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175,paritySummary:{errors:26,warns:9,resets:0}},{njs:12,offset:0,notes:531,bombs:0,obstacles:19,nps:3.034,length:367.5,characteristic:"Standard",difficulty:"Expert",events:889,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175,paritySummary:{errors:40,warns:34,resets:0}}],downloadURL:"https://cdn.beatsaver.com/fcc70ede2fcbd648a25a954e6928a14985f1fbe8.zip",coverURL:"https://cdn.beatsaver.com/fcc70ede2fcbd648a25a954e6928a14985f1fbe8.jpg",previewURL:"https://cdn.beatsaver.com/fcc70ede2fcbd648a25a954e6928a14985f1fbe8.mp3"}],createdAt:"2018-11-12T17:42:26Z",updatedAt:"2018-11-12T17:42:26Z",lastPublishedAt:"2018-11-12T17:42:26Z"},{id:"3023",name:"Houdini - Foster The People",description:"Expert Playthrough : https://youtu.be/6Fk164IwVyU",uploader:{id:13320,name:"novashaft",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ee55",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee55?d=retro",type:"SIMPLE"},metadata:{bpm:110,duration:204,songName:"Houdini",songSubName:"Foster The People",songAuthorName:"NovaShaft",levelAuthorName:"novashaft"},stats:{plays:0,downloads:3836,upvotes:1087,downvotes:17,score:.9258},uploaded:"2019-01-22T19:02:49Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c50641c7f73470e5368ab6957bedca3b2e620edc",key:"3023",state:"Published",createdAt:"2019-01-22T19:02:49Z",sageScore:6,diffs:[{njs:10,offset:0,notes:367,bombs:0,obstacles:27,nps:1.838,length:366,characteristic:"Standard",difficulty:"Normal",events:1163,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:199.636,paritySummary:{errors:30,warns:20,resets:0}},{njs:11,offset:0,notes:522,bombs:0,obstacles:27,nps:2.615,length:366,characteristic:"Standard",difficulty:"Hard",events:1163,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:199.636,paritySummary:{errors:38,warns:29,resets:0}},{njs:12,offset:0,notes:829,bombs:0,obstacles:27,nps:4.153,length:366,characteristic:"Standard",difficulty:"Expert",events:1163,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:199.636,paritySummary:{errors:41,warns:33,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c50641c7f73470e5368ab6957bedca3b2e620edc.zip",coverURL:"https://cdn.beatsaver.com/c50641c7f73470e5368ab6957bedca3b2e620edc.jpg",previewURL:"https://cdn.beatsaver.com/c50641c7f73470e5368ab6957bedca3b2e620edc.mp3"}],createdAt:"2019-01-22T19:02:49Z",updatedAt:"2019-01-22T19:02:49Z",lastPublishedAt:"2019-01-22T19:02:49Z"},{id:"849c",name:"Nightcore - Sweet but Psycho",description:"Youtube Preview: https://youtu.be/7u9Z8z-25ro",uploader:{id:23751,name:"monteblanco",uniqueSet:!0,hash:"5cff0b7798cc5a672c855ef5",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855ef5?d=retro",type:"SIMPLE"},metadata:{bpm:148,duration:167,songName:"Nightcore - Sweet but Psycho",songSubName:"",songAuthorName:"Syrex",levelAuthorName:"Monteblanco"},stats:{plays:0,downloads:2955,upvotes:1088,downvotes:17,score:.9258},uploaded:"2020-02-06T05:37:47.858Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"908f95d354d9a3861f94055772983d54cd12bdcd",key:"849c",state:"Published",createdAt:"2020-02-06T05:37:47.858Z",sageScore:2,diffs:[{njs:18,offset:0,notes:672,bombs:0,obstacles:0,nps:4.134,length:400,characteristic:"Standard",difficulty:"ExpertPlus",events:778,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:162.162,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/908f95d354d9a3861f94055772983d54cd12bdcd.zip",coverURL:"https://cdn.beatsaver.com/908f95d354d9a3861f94055772983d54cd12bdcd.jpg",previewURL:"https://cdn.beatsaver.com/908f95d354d9a3861f94055772983d54cd12bdcd.mp3"}],createdAt:"2020-02-06T05:37:47.858Z",updatedAt:"2020-02-06T05:37:47.858Z",lastPublishedAt:"2020-02-06T05:37:47.858Z"},{id:"6cc2",name:"Tones And I - Dance Monkey",description:"Dance. :3",uploader:{id:4289959,name:"pinus-sp",uniqueSet:!0,hash:"5d9cd7b2e6a67600062ab0a9",avatar:"https://cdn.beatsaver.com/avatar/188777396441186304.png",type:"DISCORD"},metadata:{bpm:196,duration:211,songName:"Dance Monkey",songSubName:"",songAuthorName:"Tones and I",levelAuthorName:"Pinus Sp"},stats:{plays:0,downloads:7505,upvotes:5655,downvotes:239,score:.9258},uploaded:"2019-10-28T20:20:40.691Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"46bbda664ab28c94639d8991d924726c0803b023",key:"6cc2",state:"Published",createdAt:"2019-10-28T20:20:40.691Z",sageScore:5,diffs:[{njs:12,offset:0,notes:256,bombs:0,obstacles:76,nps:1.253,length:667.25,characteristic:"Standard",difficulty:"Normal",events:1140,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.26,paritySummary:{errors:133,warns:0,resets:0}},{njs:12,offset:0,notes:462,bombs:0,obstacles:88,nps:2.262,length:667.25,characteristic:"Standard",difficulty:"Hard",events:1140,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.26,paritySummary:{errors:265,warns:3,resets:0}},{njs:12,offset:0,notes:826,bombs:0,obstacles:88,nps:4.044,length:667.25,characteristic:"Standard",difficulty:"Expert",events:1140,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.26,paritySummary:{errors:132,warns:93,resets:0}}],downloadURL:"https://cdn.beatsaver.com/46bbda664ab28c94639d8991d924726c0803b023.zip",coverURL:"https://cdn.beatsaver.com/46bbda664ab28c94639d8991d924726c0803b023.jpg",previewURL:"https://cdn.beatsaver.com/46bbda664ab28c94639d8991d924726c0803b023.mp3"}],createdAt:"2019-10-28T20:20:40.691Z",updatedAt:"2019-10-28T20:20:40.691Z",lastPublishedAt:"2019-10-28T20:20:40.691Z"},{id:"5dbb",name:"Siames - The Wolf",description:"Video Preview: https://youtu.be/I68zZeXioyc\n\nDifficulty: Expert\nBPM: 96.1\nNotes: 632\nNJS: 12\nNPS: 3.32\nSong Duration: 3:10",uploader:{id:34679,name:"lukemortora",uniqueSet:!0,hash:"5cff0b7798cc5a672c855c16",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855c16?d=retro",type:"SIMPLE"},metadata:{bpm:96.1,duration:190,songName:"The Wolf",songSubName:"",songAuthorName:"Siames",levelAuthorName:"LukeMortora"},stats:{plays:0,downloads:1765,upvotes:1108,downvotes:18,score:.9257},uploaded:"2019-08-18T13:54:38.297Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"88ef5d6f1ce10e3cc85637b095cd46ee68f125ac",key:"5dbb",state:"Published",createdAt:"2019-08-18T13:54:38.297Z",sageScore:6,diffs:[{njs:13,offset:0,notes:632,bombs:60,obstacles:19,nps:3.467,length:292,characteristic:"Standard",difficulty:"Expert",events:1152,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:182.31,paritySummary:{errors:51,warns:53,resets:22}}],downloadURL:"https://cdn.beatsaver.com/88ef5d6f1ce10e3cc85637b095cd46ee68f125ac.zip",coverURL:"https://cdn.beatsaver.com/88ef5d6f1ce10e3cc85637b095cd46ee68f125ac.jpg",previewURL:"https://cdn.beatsaver.com/88ef5d6f1ce10e3cc85637b095cd46ee68f125ac.mp3"}],createdAt:"2019-08-18T13:54:38.297Z",updatedAt:"2019-08-18T13:54:38.297Z",lastPublishedAt:"2019-08-18T13:54:38.297Z"},{id:"8e98",name:"2WEI feat. Edda Hayes - Warriors",description:"Bit late on this one to be honest.\nOfficial Imagine Dragons cover from League of Legends season 2020 cinematic.\n\nvideo: https://youtu.be/Wl-GfMwC3i8\n\nEasy: Notes: 159 NPS: 0.91 NJS: 12\nNormal: Notes: 221 NPS: 1.26 NJS: 12\nHard: Notes: 288 NPS: 1.64 NJS: 15\nExpert: Notes: 373 NPS: 1.98 NJS: 17\nExpert+: Notes: 442 NPS: 2.35 NJS: 19\n\nCheck out my lightshows here: https://www.youtube.com/playlist?list=PLwl6dYq72JOYu1BnKl5WATa4Dh__ZJmuN",uploader:{id:14808,name:"halcyon12",uniqueSet:!0,hash:"5cff0b7698cc5a672c8547ad",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8547ad?d=retro",type:"SIMPLE"},metadata:{bpm:123,duration:204,songName:"Warriors",songSubName:"(feat. Edda Hayes)",songAuthorName:"2WEI, League of Legends",levelAuthorName:"Halcyon12"},stats:{plays:0,downloads:10351,upvotes:2900,downvotes:97,score:.9256},uploaded:"2020-03-09T01:22:45.508Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"3a49f1b40044ba90eb27963c29121537cec28a44",key:"8e98",state:"Published",createdAt:"2020-03-09T01:22:45.508Z",sageScore:8,diffs:[{njs:12,offset:1,notes:159,bombs:0,obstacles:21,nps:.91,length:358.292,characteristic:"Standard",difficulty:"Easy",events:3343,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:174.777,paritySummary:{errors:13,warns:2,resets:0}},{njs:14,offset:.5,notes:221,bombs:0,obstacles:35,nps:1.259,length:359.904,characteristic:"Standard",difficulty:"Normal",events:3343,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.563,paritySummary:{errors:9,warns:4,resets:0}},{njs:15,offset:0,notes:288,bombs:0,obstacles:54,nps:1.64,length:359.904,characteristic:"Standard",difficulty:"Hard",events:3343,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.563,paritySummary:{errors:0,warns:0,resets:0}},{njs:17,offset:-.25,notes:373,bombs:0,obstacles:34,nps:1.98,length:386.268,characteristic:"Standard",difficulty:"Expert",events:3343,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.424,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:.5,notes:442,bombs:0,obstacles:178,nps:2.346,length:386.268,characteristic:"Standard",difficulty:"ExpertPlus",events:3343,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.424,paritySummary:{errors:1,warns:0,resets:0}},{njs:12,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"ExpertPlus",events:3343,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/3a49f1b40044ba90eb27963c29121537cec28a44.zip",coverURL:"https://cdn.beatsaver.com/3a49f1b40044ba90eb27963c29121537cec28a44.jpg",previewURL:"https://cdn.beatsaver.com/3a49f1b40044ba90eb27963c29121537cec28a44.mp3"}],createdAt:"2020-03-09T01:22:45.508Z",updatedAt:"2020-03-09T01:22:45.508Z",lastPublishedAt:"2020-03-09T01:22:45.508Z"},{id:"4fc3",name:"Doubt - twenty one pilots",description:"Nice relaxing and laid-back experience, even on Expert/Expert+. In-game voting is fixed too, so don't forget to update your mods!\r\n\r\nBPM: 123\r\n\r\nNotes: N - 409 ; H - 487 ; Ex - 668 ; Ex+ - 720\r\nWalls: N - 68 ; H - 42 ; Ex - 41 ; Ex+ - 40\r\nBombs: None!\r\n\r\nThanks to helencarnate and Qwasyx for playtesting!",uploader:{id:4285188,name:"fruhead",uniqueSet:!0,hash:"5cff0b7598cc5a672c852683",avatar:"https://cdn.beatsaver.com/avatar/174000100413145090.png",type:"DISCORD"},metadata:{bpm:123,duration:191,songName:"Doubt",songSubName:"twenty one pilots",songAuthorName:"fruhead",levelAuthorName:"fruhead"},stats:{plays:0,downloads:6089,upvotes:1160,downvotes:20,score:.9256},uploaded:"2019-05-29T18:36:45Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"bf166123a88a801f41aed10cff6c36f9f11f4cf3",key:"4fc3",state:"Published",createdAt:"2019-05-29T18:36:45Z",sageScore:4,diffs:[{njs:12,offset:0,notes:409,bombs:0,obstacles:68,nps:2.285,length:367,characteristic:"Standard",difficulty:"Normal",events:5750,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:179.024,paritySummary:{errors:13,warns:4,resets:0}},{njs:12,offset:0,notes:487,bombs:0,obstacles:42,nps:2.72,length:367,characteristic:"Standard",difficulty:"Hard",events:5750,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:179.024,paritySummary:{errors:11,warns:12,resets:0}},{njs:14,offset:0,notes:668,bombs:0,obstacles:41,nps:3.731,length:367,characteristic:"Standard",difficulty:"Expert",events:5750,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:179.024,paritySummary:{errors:20,warns:19,resets:0}},{njs:16,offset:0,notes:720,bombs:0,obstacles:41,nps:4.022,length:367,characteristic:"Standard",difficulty:"ExpertPlus",events:5750,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:179.024,paritySummary:{errors:18,warns:18,resets:0}}],downloadURL:"https://cdn.beatsaver.com/bf166123a88a801f41aed10cff6c36f9f11f4cf3.zip",coverURL:"https://cdn.beatsaver.com/bf166123a88a801f41aed10cff6c36f9f11f4cf3.jpg",previewURL:"https://cdn.beatsaver.com/bf166123a88a801f41aed10cff6c36f9f11f4cf3.mp3"}],createdAt:"2019-05-29T18:36:45Z",updatedAt:"2019-05-29T18:36:45Z",lastPublishedAt:"2019-05-29T18:36:45Z"},{id:"1362d",name:"Ghost Choir - Louie Zong (modchart)",description:"This is a relaxing modchart and a technical proof of concept. If you haven't played my modchart Dondante yet, please check it out: https://beatsaver.com/beatmap/123b5\r\n\r\nThe map requires the mods Noodle Extensions and Chroma. If Noodle Extensions is not available yet on ModAssistant, you can get the latest release at https://github.com/Aeroluna/NoodleExtensions/releases/tag/v1.3.5\r\n\r\nTips for a better experience:\r\n- Disable static lights; there are no lights anyway\r\n- Hide the HUD\r\n- Turn the SFX volume down (0 or low value like 0.2)\r\n- Enable bloom post-processing\r\n\r\nPreview: https://youtu.be/XC7RY9C_EHs\r\n\r\nI adapted this from Louie Zong's original animation: https://youtu.be/kXF3VYYa5TI\r\n\r\n",uploader:{id:4288814,name:"nyri0",uniqueSet:!0,hash:"5e792df416c9680006086a78",avatar:"https://cdn.beatsaver.com/avatar/396715033125584907.png",type:"DISCORD"},metadata:{bpm:67,duration:90,songName:"Ghost Choir",songSubName:"",songAuthorName:"Louie Zong",levelAuthorName:"nyri0"},stats:{plays:0,downloads:1938,upvotes:663,downvotes:3,score:.9255},uploaded:"2021-01-30T12:31:29.825Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1d373506c0b2b82867411f18696a1ad53d4ea01d",key:"1362d",state:"Published",createdAt:"2021-01-30T12:31:29.825Z",sageScore:2,diffs:[{njs:14,offset:0,notes:138,bombs:0,obstacles:1460,nps:1.684,length:91.5,characteristic:"Standard",difficulty:"Hard",events:5,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:81.94,paritySummary:{errors:4,warns:3,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1d373506c0b2b82867411f18696a1ad53d4ea01d.zip",coverURL:"https://cdn.beatsaver.com/1d373506c0b2b82867411f18696a1ad53d4ea01d.jpg",previewURL:"https://cdn.beatsaver.com/1d373506c0b2b82867411f18696a1ad53d4ea01d.mp3"}],createdAt:"2021-01-30T12:31:29.825Z",updatedAt:"2021-01-30T12:31:29.825Z",lastPublishedAt:"2021-01-30T12:31:29.825Z"},{id:"f91e",name:"Who's Laughing Now - Ava Max",description:"Surprise, it's a slow pop song and it doesn't have sliders!\nGoing back to my roots with this one just because I love the song and I wanted to rank a pop song in quite a while anyways.\n\nThank you for the mod Trolav!\n\nAs always, I'm open to feedback on discord @Teuflum#5982.",uploader:{id:68740,name:"Teuflum",uniqueSet:!0,hash:"5cff0b7498cc5a672c851a6b",avatar:"https://cdn.beatsaver.com/avatar/114706869460664326.png",type:"DISCORD"},metadata:{bpm:92,duration:181,songName:"Who's Laughing Now",songSubName:"",songAuthorName:"Ava Max",levelAuthorName:"Teuflum"},stats:{plays:0,downloads:11683,upvotes:1652,downvotes:40,score:.9255},uploaded:"2020-10-04T11:45:39.424Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"559113d5c4247438c6ecad852c61d03d79396af1",key:"f91e",state:"Published",createdAt:"2020-10-04T11:45:39.424Z",sageScore:7,diffs:[{njs:12,offset:0,notes:286,bombs:19,obstacles:139,nps:1.636,length:268,characteristic:"Standard",difficulty:"Easy",events:2852,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:174.783,paritySummary:{errors:3,warns:0,resets:1},stars:.96},{njs:13,offset:-.25,notes:344,bombs:19,obstacles:139,nps:1.968,length:268,characteristic:"Standard",difficulty:"Normal",events:2852,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:174.783,paritySummary:{errors:0,warns:0,resets:2},stars:1.32},{njs:14,offset:.5,notes:545,bombs:20,obstacles:126,nps:3.118,length:268,characteristic:"Standard",difficulty:"Hard",events:2852,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:174.783,paritySummary:{errors:0,warns:0,resets:2},stars:1.96},{njs:15,offset:.25,notes:703,bombs:20,obstacles:93,nps:4.022,length:268,characteristic:"Standard",difficulty:"Expert",events:2852,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:174.783,paritySummary:{errors:0,warns:0,resets:0},stars:2.83},{njs:17,offset:.1,notes:727,bombs:20,obstacles:93,nps:4.159,length:268,characteristic:"Standard",difficulty:"ExpertPlus",events:2852,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:174.783,paritySummary:{errors:0,warns:0,resets:0},stars:4.02}],downloadURL:"https://cdn.beatsaver.com/559113d5c4247438c6ecad852c61d03d79396af1.zip",coverURL:"https://cdn.beatsaver.com/559113d5c4247438c6ecad852c61d03d79396af1.jpg",previewURL:"https://cdn.beatsaver.com/559113d5c4247438c6ecad852c61d03d79396af1.mp3"}],createdAt:"2020-10-04T11:45:39.424Z",updatedAt:"2021-09-20T15:00:35.623946Z",lastPublishedAt:"2020-10-04T11:45:39.424Z"},{id:"4fba",name:"Mirror Mirror [One Saber] (RWBY: Volume 1 Soundtrack) - Jeff Williams ft. Casey Lee Williams",description:"My first one saber map! Can't believe it took me 250 maps before I started making even 1 one saber map. Trying out one saber mapping with the first RWBY song that I mapped. No promises, but I might do more one saber RWBY maps if this takes off. Map comes with custom Atlas Blue and Snow White colors",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:146,duration:175,songName:"Mirror Mirror (One Saber)",songSubName:"Jeff Williams ft. Casey Lee Williams",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:3363,upvotes:760,downvotes:6,score:.9255},uploaded:"2019-05-29T13:04:18Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"4cb8bba2e14169819d61a4ccb69adba7b59d7f7a",key:"4fba",state:"Published",createdAt:"2019-05-29T13:04:18Z",sageScore:5,diffs:[{njs:12,offset:0,notes:352,bombs:0,obstacles:8,nps:2.185,length:391.993,characteristic:"OneSaber",difficulty:"Expert",events:581,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:161.093,paritySummary:{errors:15,warns:22,resets:0}}],downloadURL:"https://cdn.beatsaver.com/4cb8bba2e14169819d61a4ccb69adba7b59d7f7a.zip",coverURL:"https://cdn.beatsaver.com/4cb8bba2e14169819d61a4ccb69adba7b59d7f7a.jpg",previewURL:"https://cdn.beatsaver.com/4cb8bba2e14169819d61a4ccb69adba7b59d7f7a.mp3"}],createdAt:"2019-05-29T13:04:18Z",updatedAt:"2019-05-29T13:04:18Z",lastPublishedAt:"2019-05-29T13:04:18Z"},{id:"447a",name:"AIAIAI",description:"Twitter: https://twitter.com/Dack731",uploader:{id:4285250,name:"dack",uniqueSet:!0,hash:"5cff0b7598cc5a672c852c6f",avatar:"https://cdn.beatsaver.com/avatar/297344689798119424.png",type:"DISCORD"},metadata:{bpm:128,duration:192,songName:"AIAIAI (feat. Yasutaka Nakata)",songSubName:"Kizuna AI",songAuthorName:"Dack",levelAuthorName:"Dack"},stats:{plays:0,downloads:1261,upvotes:1434,downvotes:31,score:.9255},uploaded:"2019-04-09T11:00:10Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"174dbef7bfdd791378582d4e7b46f9d652ba44d8",key:"447a",state:"Published",createdAt:"2019-04-09T11:00:10Z",sageScore:4,diffs:[{njs:14,offset:0,notes:466,bombs:8,obstacles:15,nps:2.556,length:389,characteristic:"Standard",difficulty:"Expert",events:715,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:182.344,paritySummary:{errors:35,warns:29,resets:1}}],downloadURL:"https://cdn.beatsaver.com/174dbef7bfdd791378582d4e7b46f9d652ba44d8.zip",coverURL:"https://cdn.beatsaver.com/174dbef7bfdd791378582d4e7b46f9d652ba44d8.jpg",previewURL:"https://cdn.beatsaver.com/174dbef7bfdd791378582d4e7b46f9d652ba44d8.mp3"}],createdAt:"2019-04-09T11:00:10Z",updatedAt:"2019-04-09T11:00:10Z",lastPublishedAt:"2019-04-09T11:00:10Z"},{id:"d35a",name:"[FUTURE FUNK PACK] Windy Summer (Night Tempo 100% Pure Remastered)",description:"FUTURE FUNK MAP PACK\n2 songs uploaded everyday through August 10th - 14th!\n\nThese first two songs are originally sung by Anri, one of my favorite City Pop artist. \n\nPlease look forward to the upcoming maps!\n\nDM any feedback on Discord\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:120,duration:190,songName:"Windy Summer",songSubName:"(Night Tempo 100% Pure Remastered)",songAuthorName:"Anri",levelAuthorName:"ETAN"},stats:{plays:0,downloads:4185,upvotes:753,downvotes:6,score:.9253},uploaded:"2020-08-10T17:48:34.173Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"dc259cc74cc52a6103c0c3f44b04549e9f555425",key:"d35a",state:"Published",createdAt:"2020-08-10T17:48:34.173Z",sageScore:6,diffs:[{njs:10,offset:1,notes:177,bombs:0,obstacles:30,nps:.982,length:360.5,characteristic:"Standard",difficulty:"Easy",events:11459,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.25,paritySummary:{errors:25,warns:8,resets:0}},{njs:11,offset:1,notes:302,bombs:0,obstacles:29,nps:1.675,length:360.5,characteristic:"Standard",difficulty:"Normal",events:11459,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.25,paritySummary:{errors:0,warns:0,resets:0}},{njs:12,offset:.5,notes:422,bombs:0,obstacles:29,nps:2.335,length:361.5,characteristic:"Standard",difficulty:"Hard",events:11459,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.75,paritySummary:{errors:0,warns:0,resets:0}},{njs:14,offset:0,notes:668,bombs:0,obstacles:27,nps:3.696,length:361.5,characteristic:"Standard",difficulty:"Expert",events:11459,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.75,paritySummary:{errors:0,warns:0,resets:0}},{njs:17,offset:-.5,notes:877,bombs:0,obstacles:28,nps:4.852,length:361.5,characteristic:"Standard",difficulty:"ExpertPlus",events:11459,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.75,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/dc259cc74cc52a6103c0c3f44b04549e9f555425.zip",coverURL:"https://cdn.beatsaver.com/dc259cc74cc52a6103c0c3f44b04549e9f555425.jpg",previewURL:"https://cdn.beatsaver.com/dc259cc74cc52a6103c0c3f44b04549e9f555425.mp3"}],createdAt:"2020-08-10T17:48:34.173Z",updatedAt:"2020-08-10T17:48:34.173Z",lastPublishedAt:"2020-08-10T17:48:34.173Z"},{id:"3969",name:"Lukas Graham - 7 Years",description:"Trying out something new here and seeing how well a slower song performs in beat saber. I decided not to map an easy for this one due to the songs length and naturally slow pacing. I'm interested to know what you think though. Do you think slow songs are good for beat saber? Should I do more? etc...\r\n\r\nTime spent mapping: 13:52\r\nVideo Preview: https://www.youtube.com/watch?v=2JB4fn1npwQ",uploader:{id:4785,name:"stumi",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f720",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro",type:"SIMPLE"},metadata:{bpm:120,duration:235,songName:"7 Years",songSubName:"Lukas Graham",songAuthorName:"Stumi",levelAuthorName:"stumi"},stats:{plays:0,downloads:4425,upvotes:2415,downvotes:75,score:.9253},uploaded:"2019-02-24T17:19:02Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"11621a2effc185bf6ae4c7526c9db8cf435fd9b2",key:"3969",state:"Published",createdAt:"2019-02-24T17:19:02Z",sageScore:5,diffs:[{njs:10,offset:0,notes:374,bombs:0,obstacles:36,nps:1.645,length:454.75,characteristic:"Standard",difficulty:"Normal",events:1566,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:227.375,paritySummary:{errors:30,warns:19,resets:0}},{njs:11,offset:0,notes:626,bombs:0,obstacles:23,nps:2.753,length:454.75,characteristic:"Standard",difficulty:"Hard",events:1566,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:227.375,paritySummary:{errors:41,warns:49,resets:0}},{njs:14,offset:0,notes:756,bombs:0,obstacles:23,nps:3.325,length:454.75,characteristic:"Standard",difficulty:"Expert",events:1566,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:227.375,paritySummary:{errors:42,warns:55,resets:0}}],downloadURL:"https://cdn.beatsaver.com/11621a2effc185bf6ae4c7526c9db8cf435fd9b2.zip",coverURL:"https://cdn.beatsaver.com/11621a2effc185bf6ae4c7526c9db8cf435fd9b2.jpg",previewURL:"https://cdn.beatsaver.com/11621a2effc185bf6ae4c7526c9db8cf435fd9b2.mp3"}],createdAt:"2019-02-24T17:19:02Z",updatedAt:"2019-02-24T17:19:02Z",lastPublishedAt:"2019-02-24T17:19:02Z"},{id:"157",name:"Seagulls!(Stop it Now)",description:"Normal/Hard/Expert (though overall they should all be fairly easy) Thought this would be a fun, lighthearted song to do. Song by Bad Lip Reading. (as sung by Yoda Luke and R2...kind of)",uploader:{id:53109,name:"paynter3d",uniqueSet:!0,hash:"5cff0b7298cc5a672c84eb80",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84eb80?d=retro",type:"SIMPLE"},metadata:{bpm:120,duration:192,songName:"Seagulls!",songSubName:"(Stop It Now)",songAuthorName:"Bad Lip Reading",levelAuthorName:"paynter3d"},stats:{plays:0,downloads:2917,upvotes:1985,downvotes:55,score:.9253},uploaded:"2018-05-20T20:57:46Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"055e8f8f8fabefcf12bbb6c50e2f78d666d619bf",key:"157",state:"Published",createdAt:"2018-05-20T20:57:46Z",sageScore:3,diffs:[{njs:10,offset:0,notes:383,bombs:0,obstacles:37,nps:2.037,length:376,characteristic:"Standard",difficulty:"Normal",events:622,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188,paritySummary:{errors:95,warns:61,resets:0}},{njs:10,offset:0,notes:460,bombs:0,obstacles:37,nps:2.447,length:376,characteristic:"Standard",difficulty:"Hard",events:622,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188,paritySummary:{errors:116,warns:58,resets:0}},{njs:10,offset:0,notes:628,bombs:64,obstacles:37,nps:3.34,length:376,characteristic:"Standard",difficulty:"Expert",events:626,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188,paritySummary:{errors:86,warns:105,resets:0}}],downloadURL:"https://cdn.beatsaver.com/055e8f8f8fabefcf12bbb6c50e2f78d666d619bf.zip",coverURL:"https://cdn.beatsaver.com/055e8f8f8fabefcf12bbb6c50e2f78d666d619bf.jpg",previewURL:"https://cdn.beatsaver.com/055e8f8f8fabefcf12bbb6c50e2f78d666d619bf.mp3"}],createdAt:"2018-05-20T20:57:46Z",updatedAt:"2018-05-20T20:57:46Z",lastPublishedAt:"2018-05-20T20:57:46Z"},{id:"1a0b9",name:"[Electro Swing Pack] Caravan Palace - Lone Digger",description:"Nixie Presents: Electro Swing Pack!\n\n10 electro swing songs with expert and expert+ diffs to make your booty swing!\n\nGet The Pack: \nhttps://bsaber.com/electro-swing-pack/\n\nMap Gameplay:\nhttps://youtu.be/DF_ZrKY3LfY\n\nComplete Pack Playthrough:\nhttps://youtu.be/yj9rw4MEh7s\n\nHeyya! After looking for some dancey electro swing maps, I noticed that there barely are any!\nSo I took matters into my own hands, learning mapping basically from scratch,\nscrapping my first failed attempts and then finally making a map that was good.\nI found it so fun that I ended up making 9 more maps,\nand fine tuned them with the help of the testplayers in BSMG,\nas well as the lovely curators from the bsaber discord.\n\nHuge thanks in particular to:\nMonstor, Bearly, Noxn, Bullet, Vaser888, Tocxx, Jafdy, Storm Knight and Pixelguy!\n\nIf you want to talk to me, here is my Discord:\nNixie.Korten#6944",uploader:{id:4286374,name:"nixiekorten",uniqueSet:!0,hash:"6096752e12772e0006e2f7e6",avatar:"https://cdn.beatsaver.com/avatar/840550221690699776.png",type:"DISCORD"},metadata:{bpm:124,duration:171,songName:"Lone Digger",songSubName:"",songAuthorName:"Caravan Palace",levelAuthorName:"Nixie.Korten"},stats:{plays:0,downloads:19552,upvotes:1165,downvotes:21,score:.925},uploaded:"2021-07-08T15:25:28.524Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f89d7a02f16dbbe3c957fd56e35844ab7f23f532",key:"1a0b9",state:"Published",createdAt:"2021-07-08T15:25:28.524Z",sageScore:5,diffs:[{njs:16,offset:-.25,notes:434,bombs:0,obstacles:0,nps:2.611,length:343.5,characteristic:"Standard",difficulty:"Expert",events:1448,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:166.21,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:.25,notes:891,bombs:0,obstacles:4,nps:5.299,length:347.5,characteristic:"Standard",difficulty:"ExpertPlus",events:1448,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.145,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f89d7a02f16dbbe3c957fd56e35844ab7f23f532.zip",coverURL:"https://cdn.beatsaver.com/f89d7a02f16dbbe3c957fd56e35844ab7f23f532.jpg",previewURL:"https://cdn.beatsaver.com/f89d7a02f16dbbe3c957fd56e35844ab7f23f532.mp3"}],createdAt:"2021-07-08T15:25:28.524Z",updatedAt:"2021-07-08T15:25:28.524Z",lastPublishedAt:"2021-07-08T15:25:28.524Z"},{id:"5d24",name:"[Anniversary] Face My Fears - Hikaru Utadu & Skrillex [BennyDaBeast]",description:"Part of the Anniversary Song Pack",uploader:{id:37070,name:"anniversaryteam",uniqueSet:!0,hash:"5cff0b7798cc5a672c8565a3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro",type:"SIMPLE"},metadata:{bpm:160,duration:212,songName:"Face My Fears",songSubName:"",songAuthorName:"Hikaru Utada & Skrillex",levelAuthorName:"BennyDaBeast"},stats:{plays:0,downloads:4932,upvotes:2031,downvotes:58,score:.925},uploaded:"2019-08-16T01:48:04.848Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"460fcbe6916bd64eb31ff65a03e4d46d4773e31c",key:"5d24",state:"Published",createdAt:"2019-08-16T01:48:04.848Z",sageScore:8,diffs:[{njs:10,offset:0,notes:390,bombs:0,obstacles:0,nps:1.912,length:544,characteristic:"Standard",difficulty:"Easy",events:2297,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204,paritySummary:{errors:85,warns:29,resets:0}},{njs:10,offset:0,notes:455,bombs:0,obstacles:0,nps:2.23,length:544,characteristic:"Standard",difficulty:"Normal",events:2297,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204,paritySummary:{errors:80,warns:29,resets:0}},{njs:12,offset:-1,notes:567,bombs:0,obstacles:0,nps:2.779,length:544,characteristic:"Standard",difficulty:"Hard",events:2298,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204,paritySummary:{errors:88,warns:36,resets:0}},{njs:12,offset:-1,notes:776,bombs:0,obstacles:0,nps:3.804,length:544,characteristic:"Standard",difficulty:"Expert",events:2297,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204,paritySummary:{errors:105,warns:60,resets:0}},{njs:15,offset:.4,notes:921,bombs:0,obstacles:0,nps:4.515,length:544,characteristic:"Standard",difficulty:"ExpertPlus",events:2297,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204,paritySummary:{errors:102,warns:83,resets:0}}],downloadURL:"https://cdn.beatsaver.com/460fcbe6916bd64eb31ff65a03e4d46d4773e31c.zip",coverURL:"https://cdn.beatsaver.com/460fcbe6916bd64eb31ff65a03e4d46d4773e31c.jpg",previewURL:"https://cdn.beatsaver.com/460fcbe6916bd64eb31ff65a03e4d46d4773e31c.mp3"}],createdAt:"2019-08-16T01:48:04.848Z",updatedAt:"2019-08-16T01:48:04.848Z",lastPublishedAt:"2019-08-16T01:48:04.848Z"},{id:"269f",name:"Amusement Park - Keigo Hoashi [NieR: Automata]",description:"Expert Gameplay: https://www.youtube.com/watch?v=gOeGoxKR7fI&feature=youtu.be\r\nExpert and Expert+ are very similar, though Expert+ is a tad harder.\r\n\r\nSong by Keigo Hoashi as NieR:Automata OST",uploader:{id:4286005,name:"mandynasty",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ffaa",avatar:"https://cdn.beatsaver.com/avatar/307589087030673408.png",type:"DISCORD"},metadata:{bpm:120,duration:266,songName:"Amusement Park",songSubName:"Keigo Hoashi",songAuthorName:"ManDynasty",levelAuthorName:"ManDynasty"},stats:{plays:0,downloads:3394,upvotes:1832,downvotes:49,score:.925},uploaded:"2018-12-18T15:57:22Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"00151f9ef33d55245bb7cfc9756e223b7183ff65",key:"269f",state:"Published",createdAt:"2018-12-18T15:57:22Z",sageScore:2,diffs:[{njs:9,offset:0,notes:396,bombs:0,obstacles:242,nps:1.571,length:504,characteristic:"Standard",difficulty:"Normal",events:1606,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:252,paritySummary:{errors:74,warns:23,resets:0}},{njs:10,offset:0,notes:528,bombs:0,obstacles:272,nps:2.095,length:504,characteristic:"Standard",difficulty:"Hard",events:1606,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:252,paritySummary:{errors:42,warns:49,resets:0}},{njs:14,offset:0,notes:888,bombs:0,obstacles:102,nps:3.524,length:504,characteristic:"Standard",difficulty:"Expert",events:1606,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:252,paritySummary:{errors:86,warns:77,resets:0}},{njs:14,offset:0,notes:931,bombs:0,obstacles:118,nps:3.588,length:519,characteristic:"Standard",difficulty:"ExpertPlus",events:1606,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:259.5,paritySummary:{errors:69,warns:56,resets:0}}],downloadURL:"https://cdn.beatsaver.com/00151f9ef33d55245bb7cfc9756e223b7183ff65.zip",coverURL:"https://cdn.beatsaver.com/00151f9ef33d55245bb7cfc9756e223b7183ff65.jpg",previewURL:"https://cdn.beatsaver.com/00151f9ef33d55245bb7cfc9756e223b7183ff65.mp3"}],createdAt:"2018-12-18T15:57:22Z",updatedAt:"2018-12-18T15:57:22Z",lastPublishedAt:"2018-12-18T15:57:22Z"},{id:"6ace",name:"Flower Dance - DJ Okawari",description:"There it is!!!! Hope you all enjoy this <3 \nCollabed with kuritsadbs on this map as he worked on the lights and he did amazing job on them! \nI might make 1 saber mode later on if i see that many liked this one :D\nCheck the map here: https://www.youtube.com/watch?v=vTPssZ0rKyI&feature=youtu.be",uploader:{id:1708,name:"layanmeta",uniqueSet:!0,hash:"5cff0b7698cc5a672c8539a1",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8539a1?d=retro",type:"SIMPLE"},metadata:{bpm:200,duration:238,songName:" Flower Dance",songSubName:"",songAuthorName:"DJ Okawari",levelAuthorName:"Layanmeta w/ KuritsaDBS"},stats:{plays:0,downloads:2467,upvotes:1257,downvotes:25,score:.9248},uploaded:"2019-10-19T17:05:33.835Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5d4b7dfbc7370400f54f02b76568bacd8497b3e9",key:"6ace",state:"Published",createdAt:"2019-10-19T17:05:33.835Z",sageScore:8,diffs:[{njs:12,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Standard",difficulty:"Easy",events:2030,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:15,offset:.4,notes:1225,bombs:0,obstacles:70,nps:5.206,length:784.375,characteristic:"Standard",difficulty:"ExpertPlus",events:2030,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:235.313,paritySummary:{errors:12,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/5d4b7dfbc7370400f54f02b76568bacd8497b3e9.zip",coverURL:"https://cdn.beatsaver.com/5d4b7dfbc7370400f54f02b76568bacd8497b3e9.jpg",previewURL:"https://cdn.beatsaver.com/5d4b7dfbc7370400f54f02b76568bacd8497b3e9.mp3"}],createdAt:"2019-10-19T17:05:33.835Z",updatedAt:"2019-10-19T17:05:33.835Z",lastPublishedAt:"2019-10-19T17:05:33.835Z"},{id:"e7cd",name:"[NoodleGames Vol.2] Last Surprise - Persona 5",description:"The Ramen Noodle group is back again to bring you a map pack full of our favorite video game soundtracks and game-inspired music!\n\nHere's one of my 4 Persona maps for the pack! Hope you enjoy.",uploader:{id:15368,name:"theab",uniqueSet:!0,hash:"5cff0b7698cc5a672c853a14",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c853a14?d=retro",type:"SIMPLE"},metadata:{bpm:123,duration:210,songName:"Last Surprise",songSubName:"",songAuthorName:"Shoji Meguro",levelAuthorName:"Ab"},stats:{plays:0,downloads:5978,upvotes:1048,downvotes:17,score:.9247},uploaded:"2020-09-10T19:19:34.152Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b5e4c4a65fa8c55a4c5a2b1d7681c31f301d5449",key:"e7cd",state:"Published",createdAt:"2020-09-10T19:19:34.152Z",sageScore:2,diffs:[{njs:13,offset:0,notes:650,bombs:0,obstacles:2,nps:3.173,length:420,characteristic:"Standard",difficulty:"Hard",events:3292,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:204.878,paritySummary:{errors:12,warns:8,resets:0}},{njs:17,offset:-.2,notes:861,bombs:0,obstacles:0,nps:4.203,length:420,characteristic:"Standard",difficulty:"Expert",events:3292,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.878,paritySummary:{errors:8,warns:9,resets:0}},{njs:18,offset:-.2,notes:983,bombs:0,obstacles:7,nps:4.798,length:420,characteristic:"Standard",difficulty:"ExpertPlus",events:3250,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:204.878,paritySummary:{errors:8,warns:8,resets:0}},{njs:16,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"ExpertPlus",events:3249,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b5e4c4a65fa8c55a4c5a2b1d7681c31f301d5449.zip",coverURL:"https://cdn.beatsaver.com/b5e4c4a65fa8c55a4c5a2b1d7681c31f301d5449.jpg",previewURL:"https://cdn.beatsaver.com/b5e4c4a65fa8c55a4c5a2b1d7681c31f301d5449.mp3"}],createdAt:"2020-09-10T19:19:34.152Z",updatedAt:"2020-09-10T19:19:34.152Z",lastPublishedAt:"2020-09-10T19:19:34.152Z"},{id:"1a0b8",name:"[Electro Swing Pack] Wolfgang Lohr & The Swinghoppers - Party Like It's 1920",description:"Nixie Presents: Electro Swing Pack!\n\n10 electro swing songs with expert and expert+ diffs to make your booty swing!\n\nGet The Pack: \nhttps://bsaber.com/electro-swing-pack/\n\nMap Gameplay:\nhttps://youtu.be/ye22W_xrXnk\n\nComplete Pack Playthrough:\nhttps://youtu.be/yj9rw4MEh7s\n\nHeyya! After looking for some dancey electro swing maps, I noticed that there barely are any!\nSo I took matters into my own hands, learning mapping basically from scratch,\nscrapping my first failed attempts and then finally making a map that was good.\nI found it so fun that I ended up making 9 more maps,\nand fine tuned them with the help of the testplayers in BSMG,\nas well as the lovely curators from the bsaber discord.\n\nHuge thanks in particular to:\nMonstor, Bearly, Noxn, Bullet, Vaser888, Tocxx, Jafdy, Storm Knight and Pixelguy!\n\nIf you want to talk to me, here is my Discord:\nNixie.Korten#6944",uploader:{id:4286374,name:"nixiekorten",uniqueSet:!0,hash:"6096752e12772e0006e2f7e6",avatar:"https://cdn.beatsaver.com/avatar/840550221690699776.png",type:"DISCORD"},metadata:{bpm:120,duration:187,songName:"Party Like It's 1920",songSubName:"",songAuthorName:"The Swinghoppers & Wolfgang Lohr",levelAuthorName:"Nixie.Korten"},stats:{plays:0,downloads:13163,upvotes:670,downvotes:4,score:.9246},uploaded:"2021-07-08T15:25:28.451Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"973bab980b568e41b0a17a772e61377b01ef85ec",key:"1a0b8",state:"Published",createdAt:"2021-07-08T15:25:28.451Z",sageScore:4,diffs:[{njs:16,offset:-.5,notes:556,bombs:0,obstacles:0,nps:3.063,length:363,characteristic:"Standard",difficulty:"Expert",events:2057,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.5,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:.25,notes:850,bombs:0,obstacles:0,nps:4.683,length:363,characteristic:"Standard",difficulty:"ExpertPlus",events:2057,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.5,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/973bab980b568e41b0a17a772e61377b01ef85ec.zip",coverURL:"https://cdn.beatsaver.com/973bab980b568e41b0a17a772e61377b01ef85ec.jpg",previewURL:"https://cdn.beatsaver.com/973bab980b568e41b0a17a772e61377b01ef85ec.mp3"}],createdAt:"2021-07-08T15:25:28.451Z",updatedAt:"2021-07-08T15:25:28.451Z",lastPublishedAt:"2021-07-08T15:25:28.451Z"},{id:"d60d",name:"[FUTURE FUNK PACK] Tokyo Chopp ft. Shiki​(​TMNS​)​ (Moe Shop Remix)",description:'FUTURE FUNK MAP PACK\n2 songs uploaded everyday through August 10th - 14th!\n\nThese last two Moe Shop songs brings a fresh spin on the Future Funk genre! This song is a Moe Shop remix of Hentai Dude\'s "Tokyo Chopp" and Tomoko Aran\'s "Midnight Pretenders" (1983.)\n\nThank you for playing! I hope you enjoyed the map pack!\n\nDM any feedback on Discord\nETAN#8341',uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:117,duration:188,songName:"Tokyo Chopp ft. Shiki​(​TMNS​)​",songSubName:"(Moe Shop Remix)",songAuthorName:"Hentai Dude",levelAuthorName:"ETAN"},stats:{plays:0,downloads:6396,upvotes:1072,downvotes:18,score:.9246},uploaded:"2020-08-14T18:31:11.526Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c82dfb89e2e5beb11c57c1d311e801f7d5dac978",key:"d60d",state:"Published",createdAt:"2020-08-14T18:31:11.526Z",sageScore:7,diffs:[{njs:10,offset:1.5,notes:155,bombs:0,obstacles:8,nps:.856,length:353,characteristic:"Standard",difficulty:"Easy",events:7757,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.026,paritySummary:{errors:29,warns:0,resets:0}},{njs:10,offset:1,notes:291,bombs:0,obstacles:8,nps:1.608,length:353,characteristic:"Standard",difficulty:"Normal",events:7757,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.026,paritySummary:{errors:3,warns:0,resets:0}},{njs:12,offset:.5,notes:377,bombs:0,obstacles:7,nps:2.056,length:357.5,characteristic:"Standard",difficulty:"Hard",events:7757,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.333,paritySummary:{errors:0,warns:0,resets:0}},{njs:14,offset:0,notes:565,bombs:0,obstacles:7,nps:3.082,length:357.5,characteristic:"Standard",difficulty:"Expert",events:7757,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.333,paritySummary:{errors:1,warns:0,resets:0}},{njs:17,offset:-.5,notes:765,bombs:0,obstacles:7,nps:4.173,length:357.5,characteristic:"Standard",difficulty:"ExpertPlus",events:7757,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.333,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c82dfb89e2e5beb11c57c1d311e801f7d5dac978.zip",coverURL:"https://cdn.beatsaver.com/c82dfb89e2e5beb11c57c1d311e801f7d5dac978.jpg",previewURL:"https://cdn.beatsaver.com/c82dfb89e2e5beb11c57c1d311e801f7d5dac978.mp3"}],createdAt:"2020-08-14T18:31:11.526Z",updatedAt:"2020-08-14T18:31:11.526Z",lastPublishedAt:"2020-08-14T18:31:11.526Z"},{id:"41e4",name:"Meant to Live - Switchfoot",description:"Easy, Normal, and Hard are all relatively easy, even for OST standards. Expert might have some tricky patterns, but the NPS is still well within OST standards so should still be manageable.\n\nhttps://youtu.be/zEK_j3aqn4g\n\nSo for my first song with fully English vocals, here's a classic from the early 2000's that you completely forgot about. I was actually sitting on this map for a while but decided to release it because I wanted a bit of variety.\n\nFollow me on Twitter u won't\nhttps://twitter.com/aggrogahu",uploader:{id:4284613,name:"aggrogahu",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fdad",avatar:"https://cdn.beatsaver.com/avatar/158363872649150464.png",type:"DISCORD"},metadata:{bpm:150,duration:200,songName:"Meant to Live",songSubName:"Switchfoot",songAuthorName:"aggrogahu",levelAuthorName:"aggrogahu"},stats:{plays:0,downloads:3605,upvotes:937,downvotes:13,score:.9246},uploaded:"2019-03-30T02:30:46Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d6675f644e47f84789a0376a746a2514e8e7b7ff",key:"41e4",state:"Published",createdAt:"2019-03-30T02:30:46Z",diffs:[{njs:10,offset:0,notes:155,bombs:0,obstacles:11,nps:.859,length:451.3,characteristic:"Standard",difficulty:"Easy",events:576,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.52,paritySummary:{errors:45,warns:4,resets:0}},{njs:11,offset:0,notes:262,bombs:0,obstacles:11,nps:1.451,length:451.3,characteristic:"Standard",difficulty:"Normal",events:576,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.52,paritySummary:{errors:60,warns:13,resets:0}},{njs:10,offset:0,notes:408,bombs:0,obstacles:46,nps:2.26,length:451.3,characteristic:"Standard",difficulty:"Hard",events:576,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.52,paritySummary:{errors:50,warns:29,resets:0}},{njs:12,offset:0,notes:630,bombs:0,obstacles:53,nps:3.49,length:451.3,characteristic:"Standard",difficulty:"Expert",events:576,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.52,paritySummary:{errors:41,warns:29,resets:0}}],downloadURL:"https://cdn.beatsaver.com/d6675f644e47f84789a0376a746a2514e8e7b7ff.zip",coverURL:"https://cdn.beatsaver.com/d6675f644e47f84789a0376a746a2514e8e7b7ff.jpg",previewURL:"https://cdn.beatsaver.com/d6675f644e47f84789a0376a746a2514e8e7b7ff.mp3"}],createdAt:"2019-03-30T02:30:46Z",updatedAt:"2019-03-30T02:30:46Z",lastPublishedAt:"2019-03-30T02:30:46Z"},{id:"7c0b",name:"[Bloq Busters Vol. 2] Au5 & Fractal - Smoke",description:"Expert+ Preview: https://www.youtube.com/watch?v=_mJXl15vv1c\n\nA sick song from their Secret Weapon EP! I hope I did it justice with this mapping.\n\nThis map is part of the Bloq Busters Vol. 2: Melodic Dubstep map pack comprised of maps from several mappers featuring artists such as Seven Lions, Jason Ross, Au5, Warriyo, and more! Grab it here: https://bsaber.com/bloq-busters-vol-2-melodic-dubstep/\n\nComments? Like it? Hate it? Let me know on Discord @Bloodcloak#5725!",uploader:{id:71661,name:"bloodcloak",uniqueSet:!0,hash:"5cff0b7698cc5a672c8551d3",avatar:"https://cdn.beatsaver.com/avatar/205707707187986442.png",type:"DISCORD"},metadata:{bpm:128,duration:302,songName:"Smoke",songSubName:"",songAuthorName:"Au5 & Fractal",levelAuthorName:"Bloodcloak"},stats:{plays:0,downloads:2132,upvotes:701,downvotes:5,score:.9245},uploaded:"2020-01-03T22:50:59.278Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0bc6562a0bde3a933d656a514c67eeec88a315df",key:"7c0b",state:"Published",createdAt:"2020-01-03T22:50:59.278Z",sageScore:4,diffs:[{njs:12,offset:.6,notes:687,bombs:0,obstacles:245,nps:2.351,length:623.5,characteristic:"Standard",difficulty:"Hard",events:4233,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:292.266,paritySummary:{errors:2,warns:2,resets:0}},{njs:16,offset:-.1,notes:1074,bombs:0,obstacles:135,nps:3.675,length:623.5,characteristic:"Standard",difficulty:"Expert",events:4233,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:292.266,paritySummary:{errors:3,warns:3,resets:0}},{njs:20,offset:.6,notes:1188,bombs:0,obstacles:122,nps:4.065,length:623.5,characteristic:"Standard",difficulty:"ExpertPlus",events:4227,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:292.266,paritySummary:{errors:1,warns:1,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0bc6562a0bde3a933d656a514c67eeec88a315df.zip",coverURL:"https://cdn.beatsaver.com/0bc6562a0bde3a933d656a514c67eeec88a315df.jpg",previewURL:"https://cdn.beatsaver.com/0bc6562a0bde3a933d656a514c67eeec88a315df.mp3"}],createdAt:"2020-01-03T22:50:59.278Z",updatedAt:"2020-01-03T22:50:59.278Z",lastPublishedAt:"2020-01-03T22:50:59.278Z"},{id:"5e05",name:"Dire Straits - Money For Nothing",description:"",uploader:{id:4285018,name:"majorpickle",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f792",avatar:"https://cdn.beatsaver.com/avatar/450358937657671680.png",type:"DISCORD"},metadata:{bpm:136,duration:243,songName:"Money For Nothing",songSubName:"",songAuthorName:"Dire Straits",levelAuthorName:"Majorpickle"},stats:{plays:0,downloads:2691,upvotes:1068,downvotes:18,score:.9245},uploaded:"2019-08-20T03:07:14.232Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b81b682921b291b731111f9a29d7bf9353ff1365",key:"5e05",state:"Published",createdAt:"2019-08-20T03:07:14.232Z",sageScore:6,diffs:[{njs:12,offset:0,notes:851,bombs:0,obstacles:60,nps:3.8,length:507.656,characteristic:"Standard",difficulty:"Expert",events:2256,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:223.966,paritySummary:{errors:39,warns:30,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b81b682921b291b731111f9a29d7bf9353ff1365.zip",coverURL:"https://cdn.beatsaver.com/b81b682921b291b731111f9a29d7bf9353ff1365.jpg",previewURL:"https://cdn.beatsaver.com/b81b682921b291b731111f9a29d7bf9353ff1365.mp3"}],createdAt:"2019-08-20T03:07:14.232Z",updatedAt:"2019-08-20T03:07:14.232Z",lastPublishedAt:"2019-08-20T03:07:14.232Z"},{id:"a83b",name:"BAD APPLE!! [Punk Goes Pop Vol.2] - RichaadEB ft. Cristina Vee",description:"BAD APPLE!! is a metal cover by RichaadEB featuring voice actor and singer, Cristina Vee. This song was originally composed by Jun'ya Ota & Masayoshi Minoshima with vocals by Nomico.",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:138,duration:301,songName:"BAD APPLE!!",songSubName:"ft. Cristina Vee",songAuthorName:"RichaadEB",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:5636,upvotes:1476,downvotes:35,score:.9242},uploaded:"2020-05-20T07:20:11.426Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"57d1004ac047bd554080c5bfdd6908743ebb9fd2",key:"a83b",state:"Published",createdAt:"2020-05-20T07:20:11.426Z",sageScore:3,diffs:[{njs:16,offset:0,notes:1649,bombs:0,obstacles:78,nps:5.644,length:672,characteristic:"Standard",difficulty:"ExpertPlus",events:9915,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:292.174,paritySummary:{errors:8,warns:13,resets:0}}],downloadURL:"https://cdn.beatsaver.com/57d1004ac047bd554080c5bfdd6908743ebb9fd2.zip",coverURL:"https://cdn.beatsaver.com/57d1004ac047bd554080c5bfdd6908743ebb9fd2.jpg",previewURL:"https://cdn.beatsaver.com/57d1004ac047bd554080c5bfdd6908743ebb9fd2.mp3"}],createdAt:"2020-05-20T07:20:11.426Z",updatedAt:"2020-05-20T07:20:11.426Z",lastPublishedAt:"2020-05-20T07:20:11.426Z"},{id:"8b81",name:"Stonebank - To The Top",description:"https://www.youtube.com/watch?v=2DwhNw_pGrg",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:187,songName:"To The Top",songSubName:"",songAuthorName:"Stonebank",levelAuthorName:"Rustic"},stats:{plays:0,downloads:1287,upvotes:897,downvotes:12,score:.9242},uploaded:"2020-02-28T15:53:21.930Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7afc56e020bb12f1e91dc99b1107df830299cc98",key:"8b81",state:"Published",createdAt:"2020-02-28T15:53:21.930Z",sageScore:5,diffs:[{njs:20,offset:1,notes:491,bombs:0,obstacles:2922,nps:2.942,length:356,characteristic:"Standard",difficulty:"Expert",events:5581,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:166.875,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/7afc56e020bb12f1e91dc99b1107df830299cc98.zip",coverURL:"https://cdn.beatsaver.com/7afc56e020bb12f1e91dc99b1107df830299cc98.jpg",previewURL:"https://cdn.beatsaver.com/7afc56e020bb12f1e91dc99b1107df830299cc98.mp3"}],createdAt:"2020-02-28T15:53:21.930Z",updatedAt:"2020-02-28T15:53:21.930Z",lastPublishedAt:"2020-02-28T15:53:21.930Z"},{id:"1c00",name:"Chop Suey - System of a Down",description:"4th map. Special thanks to Kolezan for doing the lighting and helping me out with the audio on this one. He did a great job. Also thanks to Crankor, TurtleSquared, and all my other play testers for multiple play tests and a lot of good feedback. Also this map would not have been possible without squeaksies' MediocreMapper!\nTIPS:\n\n(Expert/Expert+) In the final flow pattern in the last slow section of the song, the corner crouch is meant to make you do a sort of side lunge with that lunging side's saber swinging out wide behind you for balance. I have found that to be the smoothest flow, though it's not technically necessary.\n\n(Expert+ only) The \"climax\" point of each pattern in the ending flow is made to be an optional behind-the-back cross slash. You'll know it by the dotted cubes in that section. The backslash hand hits the dotted cubes. This move is fun but may take some practice to get down. (Hint: keep your eye on the top diagonal cube.)\n\nSwing those arms for the big hits.\n\nhttps://youtu.be/6NJh98lDJVo",uploader:{id:27595,name:"baxter395",uniqueSet:!0,hash:"5cff0b7598cc5a672c852f7b",avatar:"https://www.gravatar.com/avatar/5cff0b7598cc5a672c852f7b?d=retro",type:"SIMPLE"},metadata:{bpm:127,duration:204,songName:"Chop Suey",songSubName:"System of a Down",songAuthorName:"baxter395",levelAuthorName:"baxter395"},stats:{plays:0,downloads:12175,upvotes:8010,downvotes:385,score:.9242},uploaded:"2018-10-25T00:30:35Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1b6f9e844d81ff0f6ee6feed62331a3d229be2e8",key:"1c00",state:"Published",createdAt:"2018-10-25T00:30:35Z",sageScore:-2,diffs:[{njs:10,offset:0,notes:497,bombs:0,obstacles:11,nps:2.601,length:404.463,characteristic:"Standard",difficulty:"Normal",events:1156,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.085,paritySummary:{errors:75,warns:56,resets:0}},{njs:11,offset:0,notes:687,bombs:0,obstacles:34,nps:3.595,length:404.463,characteristic:"Standard",difficulty:"Hard",events:1156,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.085,paritySummary:{errors:57,warns:89,resets:0}},{njs:12,offset:0,notes:804,bombs:0,obstacles:62,nps:4.208,length:404.463,characteristic:"Standard",difficulty:"Expert",events:1156,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.085,paritySummary:{errors:64,warns:100,resets:0}},{njs:13,offset:0,notes:842,bombs:0,obstacles:54,nps:4.406,length:404.463,characteristic:"Standard",difficulty:"ExpertPlus",events:1156,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.085,paritySummary:{errors:58,warns:110,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1b6f9e844d81ff0f6ee6feed62331a3d229be2e8.zip",coverURL:"https://cdn.beatsaver.com/1b6f9e844d81ff0f6ee6feed62331a3d229be2e8.jpg",previewURL:"https://cdn.beatsaver.com/1b6f9e844d81ff0f6ee6feed62331a3d229be2e8.mp3"}],createdAt:"2018-10-25T00:30:35Z",updatedAt:"2018-10-25T00:30:35Z",lastPublishedAt:"2018-10-25T00:30:35Z"},{id:"b724",name:"Falling - Dropgun x Asketa & Natan Chaim",description:"reupload #1 - improved the difficulty spread to not have an extreme jump between the Expert and Expert+ slot\n\nOnly some of the lower diffs changed on here, the E+ slot (Rising) is still the same as I got very positive feedback on that diff which I'm very happy about <3\nThe diff spread should be better now, so it is hopefully more enjoyable for all skill levels whenever it gets ranked.\n\noriginal description:\nhaha lyrics go brrrr\njust a little bit though\n\nalso I lighted manually which I haven't done for an eternity, hope you don't go blind or something\n\nbig thank you to Skeelie for modding this :)\n\nTeuflum#5982 for any feedback on discord.",uploader:{id:68740,name:"Teuflum",uniqueSet:!0,hash:"5cff0b7498cc5a672c851a6b",avatar:"https://cdn.beatsaver.com/avatar/114706869460664326.png",type:"DISCORD"},metadata:{bpm:126,duration:194,songName:"Falling",songSubName:"",songAuthorName:"Dropgun x Asketa & Natan Chaim",levelAuthorName:"Teuflum"},stats:{plays:0,downloads:8962,upvotes:3035,downvotes:109,score:.9241},uploaded:"2020-06-28T11:22:49.373Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"2dddd6672560cb2c1d4c689ff31b5ea58ef1641e",key:"b724",state:"Published",createdAt:"2020-06-28T11:22:49.373Z",sageScore:7,diffs:[{njs:12,offset:.5,notes:454,bombs:0,obstacles:65,nps:2.432,length:392,characteristic:"Standard",difficulty:"Easy",events:9228,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:186.667,paritySummary:{errors:12,warns:2,resets:0},stars:1.35},{njs:14,offset:0,notes:672,bombs:12,obstacles:65,nps:3.6,length:392,characteristic:"Standard",difficulty:"Normal",events:9228,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:186.667,paritySummary:{errors:0,warns:0,resets:4},stars:2.28},{njs:17,offset:-.4,notes:973,bombs:20,obstacles:65,nps:5.213,length:392,characteristic:"Standard",difficulty:"Hard",events:9228,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:186.667,paritySummary:{errors:0,warns:0,resets:2},stars:4.51},{njs:20,offset:.325,notes:1297,bombs:16,obstacles:39,nps:6.948,length:392,characteristic:"Standard",difficulty:"Expert",events:9228,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:186.667,paritySummary:{errors:0,warns:0,resets:2},stars:5.65},{njs:22,offset:.1,notes:1483,bombs:16,obstacles:39,nps:7.945,length:392,characteristic:"Standard",difficulty:"ExpertPlus",events:9228,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:186.667,paritySummary:{errors:2,warns:0,resets:4},stars:7.83},{njs:69,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:9228,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/2dddd6672560cb2c1d4c689ff31b5ea58ef1641e.zip",coverURL:"https://cdn.beatsaver.com/2dddd6672560cb2c1d4c689ff31b5ea58ef1641e.jpg",previewURL:"https://cdn.beatsaver.com/2dddd6672560cb2c1d4c689ff31b5ea58ef1641e.mp3"}],createdAt:"2020-06-28T11:22:49.373Z",updatedAt:"2021-09-20T15:01:27.178739Z",lastPublishedAt:"2020-06-28T11:22:49.373Z"},{id:"7e92",name:"Adventure of a Lifetime - Coldplay",description:"This song is one that i really love. Even though its different from most of the maps i posted so far, i still mapped it anyway because i like it.\n\nAll difficulties included, Expert+ is sort of on the lower end of expert+ maps.\n\nThanks to Helen Carnate, Sorukun, and Kolezan for helping me playtest the map! \n\nHave fun going on the Adventure of a Lifetime!",uploader:{id:4284197,name:"timeweaver",uniqueSet:!0,hash:"5d47d586c5301900060b2f6c",avatar:"https://cdn.beatsaver.com/avatar/607399708121366529.png",type:"DISCORD"},metadata:{bpm:112,duration:264,songName:"Adventure of a Lifetime",songSubName:"",songAuthorName:"Coldplay",levelAuthorName:"Timeweaver"},stats:{plays:0,downloads:4599,upvotes:1352,downvotes:30,score:.9241},uploaded:"2020-01-15T05:33:28.055Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"cbfe28de7f63634096dd8ef34648753147f3f65d",key:"7e92",state:"Published",createdAt:"2020-01-15T05:33:28.055Z",sageScore:6,diffs:[{njs:10,offset:1,notes:301,bombs:0,obstacles:45,nps:1.232,length:456,characteristic:"Standard",difficulty:"Easy",events:4100,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:244.286,paritySummary:{errors:61,warns:34,resets:0}},{njs:10,offset:1,notes:467,bombs:0,obstacles:48,nps:1.91,length:456.5,characteristic:"Standard",difficulty:"Normal",events:4100,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:244.554,paritySummary:{errors:65,warns:20,resets:0}},{njs:12,offset:.5,notes:691,bombs:0,obstacles:41,nps:2.826,length:456.5,characteristic:"Standard",difficulty:"Hard",events:4100,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:244.554,paritySummary:{errors:14,warns:10,resets:0}},{njs:15,offset:0,notes:1069,bombs:0,obstacles:42,nps:4.241,length:470.5,characteristic:"Standard",difficulty:"Expert",events:4100,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:252.054,paritySummary:{errors:4,warns:4,resets:0}},{njs:16,offset:-.25,notes:1199,bombs:0,obstacles:18,nps:4.752,length:471,characteristic:"Standard",difficulty:"ExpertPlus",events:4100,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:252.321,paritySummary:{errors:5,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/cbfe28de7f63634096dd8ef34648753147f3f65d.zip",coverURL:"https://cdn.beatsaver.com/cbfe28de7f63634096dd8ef34648753147f3f65d.jpg",previewURL:"https://cdn.beatsaver.com/cbfe28de7f63634096dd8ef34648753147f3f65d.mp3"}],createdAt:"2020-01-15T05:33:28.055Z",updatedAt:"2020-01-15T05:33:28.055Z",lastPublishedAt:"2020-01-15T05:33:28.055Z"},{id:"6ed4",name:"Sayuri - Koukai no Uta [Boku no Hero Academia Ending 6]",description:"sayuri slaps\nmainstream anime mapper AYAYA\n\nBPM 180 | Length 1:54\nExpert+\nExpert\nHard\n\nThanks Monteblanco for testplaying\n\nhf\n\nDM any feedback on Discord\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:180,duration:115,songName:"Koukai no Uta",songSubName:"",songAuthorName:"Sayuri",levelAuthorName:"ETAN"},stats:{plays:0,downloads:11086,upvotes:1208,downvotes:24,score:.9241},uploaded:"2019-11-08T22:57:13.632Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"108f939f6a5a2c2f02e4e1e7c9a9bf46345681a4",key:"6ed4",state:"Published",createdAt:"2019-11-08T22:57:13.632Z",sageScore:5,diffs:[{njs:13,offset:0,notes:250,bombs:0,obstacles:0,nps:2.262,length:331.5,characteristic:"Standard",difficulty:"Hard",events:5351,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:110.5,paritySummary:{errors:0,warns:0,resets:0}},{njs:15,offset:.5,notes:365,bombs:0,obstacles:0,nps:3.303,length:331.5,characteristic:"Standard",difficulty:"Expert",events:5351,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:110.5,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:.25,notes:518,bombs:0,obstacles:0,nps:4.688,length:331.5,characteristic:"Standard",difficulty:"ExpertPlus",events:5351,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:110.5,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/108f939f6a5a2c2f02e4e1e7c9a9bf46345681a4.zip",coverURL:"https://cdn.beatsaver.com/108f939f6a5a2c2f02e4e1e7c9a9bf46345681a4.jpg",previewURL:"https://cdn.beatsaver.com/108f939f6a5a2c2f02e4e1e7c9a9bf46345681a4.mp3"}],createdAt:"2019-11-08T22:57:13.632Z",updatedAt:"2019-11-08T22:57:13.632Z",lastPublishedAt:"2019-11-08T22:57:13.632Z"},{id:"587c",name:"Cracks (Flux Pavilion Remix)",description:"*reuploaded due to an error with the Lightshow Difficulty and Beatsaver*\n\nAnother collab! This one is meant to be more geared towards playability, (and possibly even rankability) so I hope you like it.\n\nIt also has Chroma lighting courtesy of Aeroluna. He's awesome for doing the lights, go check out his stuff too!\n\nCracks (Flux Pavilion Remix) - Belle Humble, Freestylers | 140 BPM | Hard, Expert, Expert+ | Fully Mapped with Chroma Lighting by Aeroluna\n\nHere's a video of the lights with Chroma on: https://youtu.be/iwFcR5YmYwg",uploader:{id:17131,name:"tranquillizeme",uniqueSet:!0,hash:"5cff0b7798cc5a672c85609e",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c85609e?d=retro",type:"SIMPLE"},metadata:{bpm:140,duration:143,songName:"Cracks",songSubName:"(Flux Pavilion Remix)",songAuthorName:"Various Artists",levelAuthorName:"TranquillizeMe"},stats:{plays:0,downloads:1454,upvotes:1082,downvotes:19,score:.9241},uploaded:"2019-07-23T01:37:18.104Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"51835f468381d630b48c36da70d2c2ce700bb274",key:"587c",state:"Published",createdAt:"2019-07-23T01:37:18.104Z",sageScore:6,diffs:[{njs:13,offset:1,notes:364,bombs:224,obstacles:30,nps:2.705,length:314,characteristic:"Standard",difficulty:"Hard",events:11202,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:134.571,paritySummary:{errors:18,warns:16,resets:0}},{njs:16,offset:0,notes:506,bombs:228,obstacles:14,nps:3.76,length:314,characteristic:"Standard",difficulty:"Expert",events:11202,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:134.571,paritySummary:{errors:9,warns:8,resets:2}},{njs:18,offset:0,notes:778,bombs:52,obstacles:18,nps:5.781,length:314,characteristic:"Standard",difficulty:"ExpertPlus",events:11202,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:134.571,paritySummary:{errors:2,warns:0,resets:13}}],downloadURL:"https://cdn.beatsaver.com/51835f468381d630b48c36da70d2c2ce700bb274.zip",coverURL:"https://cdn.beatsaver.com/51835f468381d630b48c36da70d2c2ce700bb274.jpg",previewURL:"https://cdn.beatsaver.com/51835f468381d630b48c36da70d2c2ce700bb274.mp3"}],createdAt:"2019-07-23T01:37:18.104Z",updatedAt:"2019-07-23T01:37:18.104Z",lastPublishedAt:"2019-07-23T01:37:18.104Z"},{id:"d35b",name:"[FUTURE FUNK PACK] Remember Summer Days (MACROSS 82-99 Short Ver.)",description:"FUTURE FUNK MAP PACK\n2 songs uploaded everyday through August 10th - 14th!\n\nThese first two songs are originally sung by Anri, one of my favorite City Pop artist. \n\nThis version of Remember Summer Days is a short edit I made from MACROSS 82-99's bootleg version. The original song is waaay longer\n\nPlease look forward to the upcoming maps!\n\nDM any feedback on Discord\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:110,duration:171,songName:"Remember Summer Days",songSubName:"(MACROSS 82-99 Short Ver.)",songAuthorName:"Anri",levelAuthorName:"ETAN"},stats:{plays:0,downloads:4497,upvotes:775,downvotes:8,score:.9239},uploaded:"2020-08-10T17:48:45.792Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"bb49a02cd1760f45d8c5104fc8881e61ab00b29f",key:"d35b",state:"Published",createdAt:"2020-08-10T17:48:45.792Z",sageScore:8,diffs:[{njs:10,offset:1,notes:154,bombs:0,obstacles:11,nps:.941,length:300.062,characteristic:"Standard",difficulty:"Easy",events:3539,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.67,paritySummary:{errors:32,warns:2,resets:0}},{njs:10,offset:1,notes:220,bombs:0,obstacles:11,nps:1.344,length:300.062,characteristic:"Standard",difficulty:"Normal",events:3539,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.67,paritySummary:{errors:2,warns:4,resets:0}},{njs:12,offset:.5,notes:417,bombs:0,obstacles:10,nps:2.506,length:305.125,characteristic:"Standard",difficulty:"Hard",events:3539,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:166.432,paritySummary:{errors:0,warns:0,resets:0}},{njs:14,offset:0,notes:593,bombs:0,obstacles:10,nps:3.563,length:305.125,characteristic:"Standard",difficulty:"Expert",events:3539,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:166.432,paritySummary:{errors:0,warns:0,resets:0}},{njs:17,offset:.5,notes:752,bombs:0,obstacles:10,nps:4.518,length:305.125,characteristic:"Standard",difficulty:"ExpertPlus",events:3539,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:166.432,paritySummary:{errors:0,warns:1,resets:0}}],downloadURL:"https://cdn.beatsaver.com/bb49a02cd1760f45d8c5104fc8881e61ab00b29f.zip",coverURL:"https://cdn.beatsaver.com/bb49a02cd1760f45d8c5104fc8881e61ab00b29f.jpg",previewURL:"https://cdn.beatsaver.com/bb49a02cd1760f45d8c5104fc8881e61ab00b29f.mp3"}],createdAt:"2020-08-10T17:48:45.792Z",updatedAt:"2020-08-10T17:48:45.792Z",lastPublishedAt:"2020-08-10T17:48:45.792Z"},{id:"5d1f",name:"Weight of the World (JVNA Remix) - NieR: Automata",description:"145 BPM - 4:27 Runtime\n\nStandard\nHard - 675 Notes\nExpert - 885 Notes\nExpert+ - 1169 Notes\n\nOne Saber\nExpert - 644 Notes\nExpert+ - 847 Notes\n\nLawless\nEnding E (unnerfed) - 2109 Walls\nEnding E - 1500 Walls\n\nGameplay: Coming soon",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:145,duration:268,songName:"Weight of the World",songSubName:"NieR:Automata",songAuthorName:"JVNA",levelAuthorName:"Skyler Wallace & Excession"},stats:{plays:0,downloads:4937,upvotes:2801,downvotes:98,score:.9239},uploaded:"2019-08-15T23:12:42.493Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6b4e0f6a698973ca55754d057b40463063ae59d8",key:"5d1f",state:"Published",createdAt:"2019-08-15T23:12:42.493Z",sageScore:6,diffs:[{njs:13,offset:1,notes:675,bombs:6,obstacles:45,nps:2.559,length:637.5,characteristic:"Standard",difficulty:"Hard",events:12404,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:263.793,paritySummary:{errors:115,warns:44,resets:3}},{njs:15,offset:.25,notes:885,bombs:6,obstacles:49,nps:3.355,length:637.5,characteristic:"Standard",difficulty:"Expert",events:12404,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:263.793,paritySummary:{errors:67,warns:39,resets:5}},{njs:17,offset:0,notes:1169,bombs:5,obstacles:58,nps:4.432,length:637.5,characteristic:"Standard",difficulty:"ExpertPlus",events:12404,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:263.793,paritySummary:{errors:89,warns:78,resets:1}},{njs:13,offset:1,notes:644,bombs:6,obstacles:45,nps:2.441,length:637.5,characteristic:"OneSaber",difficulty:"Expert",events:12404,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:263.793,paritySummary:{errors:41,warns:47,resets:3}},{njs:15,offset:.25,notes:847,bombs:6,obstacles:49,nps:3.211,length:637.5,characteristic:"OneSaber",difficulty:"ExpertPlus",events:12404,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:263.793,paritySummary:{errors:59,warns:71,resets:0}},{njs:17,offset:0,notes:1169,bombs:5,obstacles:2108,nps:4.432,length:637.5,characteristic:"Lawless",difficulty:"Expert",events:12404,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:263.793,paritySummary:{errors:89,warns:78,resets:1}},{njs:17,offset:0,notes:1169,bombs:5,obstacles:1500,nps:4.432,length:637.5,characteristic:"Lawless",difficulty:"ExpertPlus",events:12404,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:263.793,paritySummary:{errors:89,warns:78,resets:1}}],downloadURL:"https://cdn.beatsaver.com/6b4e0f6a698973ca55754d057b40463063ae59d8.zip",coverURL:"https://cdn.beatsaver.com/6b4e0f6a698973ca55754d057b40463063ae59d8.jpg",previewURL:"https://cdn.beatsaver.com/6b4e0f6a698973ca55754d057b40463063ae59d8.mp3"}],createdAt:"2019-08-15T23:12:42.493Z",updatedAt:"2019-08-15T23:12:42.493Z",lastPublishedAt:"2019-08-15T23:12:42.493Z"},{id:"14aa",name:"Dummy! - Undertale OST (Toby Fox)",description:"Decided to make an Undertale map, original song by Toby Fox.",uploader:{id:14891,name:"elijoria",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fbf5",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84fbf5?d=retro",type:"SIMPLE"},metadata:{bpm:125,duration:146,songName:"Dummy!",songSubName:"Undertale OST",songAuthorName:"Toby Fox (Mapped By Elijoria)",levelAuthorName:"Elijoria"},stats:{plays:0,downloads:3830,upvotes:2082,downvotes:63,score:.9239},uploaded:"2018-09-11T23:43:18Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b9d323fb01bfdd9ece0702256416b44ce1026ec6",key:"14aa",state:"Published",createdAt:"2018-09-11T23:43:18Z",sageScore:4,diffs:[{njs:10,offset:0,notes:374,bombs:0,obstacles:49,nps:2.589,length:301,characteristic:"Standard",difficulty:"Normal",events:684,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:144.48,paritySummary:{errors:102,warns:50,resets:0}},{njs:10,offset:0,notes:515,bombs:0,obstacles:53,nps:3.565,length:301,characteristic:"Standard",difficulty:"Hard",events:684,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:144.48,paritySummary:{errors:89,warns:64,resets:0}},{njs:10,offset:0,notes:610,bombs:26,obstacles:53,nps:4.223,length:301,characteristic:"Standard",difficulty:"Expert",events:684,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:144.48,paritySummary:{errors:88,warns:67,resets:4}}],downloadURL:"https://cdn.beatsaver.com/b9d323fb01bfdd9ece0702256416b44ce1026ec6.zip",coverURL:"https://cdn.beatsaver.com/b9d323fb01bfdd9ece0702256416b44ce1026ec6.jpg",previewURL:"https://cdn.beatsaver.com/b9d323fb01bfdd9ece0702256416b44ce1026ec6.mp3"}],createdAt:"2018-09-11T23:43:18Z",updatedAt:"2018-09-11T23:43:18Z",lastPublishedAt:"2018-09-11T23:43:18Z"},{id:"acf",name:"EC2 - Prototyperaptor - Still Waiting",description:"Expert / Hard\r\nPart of the Electric City 2 song pack\r\nhttps://youtu.be/uCekFFk_nWA?t=4m29s",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:125,duration:286,songName:"EC2 - Still Waiting",songSubName:"Prototyperaptor",songAuthorName:"Rustic",levelAuthorName:"rustic"},stats:{plays:0,downloads:4651,upvotes:1935,downvotes:56,score:.9239},uploaded:"2018-07-20T22:07:52Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"32ae684f553e7fa90d1e5325bd54581c0afd37fa",key:"acf",state:"Published",createdAt:"2018-07-20T22:07:52Z",sageScore:5,diffs:[{njs:10,offset:0,notes:604,bombs:0,obstacles:19,nps:2.192,length:572,characteristic:"Standard",difficulty:"Hard",events:2545,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:274.56,paritySummary:{errors:7,warns:33,resets:0},stars:1.18},{njs:11,offset:0,notes:902,bombs:0,obstacles:35,nps:3.274,length:572,characteristic:"Standard",difficulty:"Expert",events:2545,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:274.56,paritySummary:{errors:19,warns:65,resets:0},stars:1.99}],downloadURL:"https://cdn.beatsaver.com/32ae684f553e7fa90d1e5325bd54581c0afd37fa.zip",coverURL:"https://cdn.beatsaver.com/32ae684f553e7fa90d1e5325bd54581c0afd37fa.jpg",previewURL:"https://cdn.beatsaver.com/32ae684f553e7fa90d1e5325bd54581c0afd37fa.mp3"}],createdAt:"2018-07-20T22:07:52Z",updatedAt:"2018-07-20T22:07:52Z",lastPublishedAt:"2018-07-20T22:07:52Z"},{id:"10842",name:"Technicolor - Madeon",description:"4th map by Canadian_Dragon in collaboration with Kry\r\nThis map is a friendly gift for a good friend of ours and has been map to their liking. Hope everyone else enjoys it aswell.\r\n\r\nRequires Chroma & Noodle Extension [Wall Map]",uploader:{id:4013,name:"canadian_dragon",uniqueSet:!0,hash:"5e0bb55364f9aa0006d6d0fa",avatar:"https://cdn.beatsaver.com/avatar/4013.jpg",type:"SIMPLE"},metadata:{bpm:127,duration:385,songName:"Technicolor",songSubName:"",songAuthorName:"Madeon",levelAuthorName:"Canadian_Dragon & Kry"},stats:{plays:0,downloads:1998,upvotes:682,downvotes:5,score:.9238},uploaded:"2020-11-02T01:52:46.653Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0488692d1d2fa080fe429ee15efc84da40bc78d2",key:"10842",state:"Published",createdAt:"2020-11-02T01:52:46.653Z",sageScore:4,diffs:[{njs:19,offset:0,notes:1382,bombs:0,obstacles:38787,nps:3.75,length:780,characteristic:"Standard",difficulty:"ExpertPlus",events:8054,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:368.504,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0488692d1d2fa080fe429ee15efc84da40bc78d2.zip",coverURL:"https://cdn.beatsaver.com/0488692d1d2fa080fe429ee15efc84da40bc78d2.jpg",previewURL:"https://cdn.beatsaver.com/0488692d1d2fa080fe429ee15efc84da40bc78d2.mp3"}],createdAt:"2020-11-02T01:52:46.653Z",updatedAt:"2020-11-02T01:52:46.653Z",lastPublishedAt:"2020-11-02T01:52:46.653Z"},{id:"142e8",name:"K/DA - MORE (ft. Madison Beer, (G)I-DLE, Lexie Liu, Jaira Burns, Seraphine)",description:"From the unofficial music pack (K/DA ALL OUT) on BSaber.com\nPack: https://bsaber.com/kda-all-out/\nTrailer: https://youtu.be/e1ry_H86zqg\nPreview (Expert+): https://youtu.be/C86ebbseC34\nLightshow: https://youtu.be/lxbch_lAEA8\n__________\nCredits🤍\nMapper: Sotarks\nLighter: Sotarks\nCurators: Pixelguy, JohnnyDee & joey\nSpecial Thanks: eliotttate & Belaya\nTrailer: Tuffiii\n__________\nCheck out K/DA🤍\nhttps://twitter.com/kda_music\nhttps://linktr.ee/kda_music\nProduced by Riot Games",uploader:{id:2523,name:"sotarks",uniqueSet:!0,hash:"5cff0b7698cc5a672c8541fd",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8541fd?d=retro",type:"SIMPLE"},metadata:{bpm:142,duration:219,songName:"MORE",songSubName:"",songAuthorName:"K/DA",levelAuthorName:"Sotarks"},stats:{plays:0,downloads:11653,upvotes:1408,downvotes:33,score:.9237},uploaded:"2021-02-17T18:04:39.306Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8c5be566e218b8cc59c21e947bc39c1ce1f98908",key:"142e8",state:"Published",createdAt:"2021-02-17T18:04:39.306Z",sageScore:7,diffs:[{njs:10,offset:-1.2813157,notes:245,bombs:0,obstacles:19,nps:1.191,length:487,characteristic:"Standard",difficulty:"Easy",events:2819,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.775,paritySummary:{errors:21,warns:0,resets:0}},{njs:12,offset:.274958,notes:363,bombs:2,obstacles:13,nps:1.764,length:487,characteristic:"Standard",difficulty:"Normal",events:2819,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.775,paritySummary:{errors:3,warns:0,resets:0}},{njs:14,offset:-.06,notes:618,bombs:13,obstacles:13,nps:3.003,length:487,characteristic:"Standard",difficulty:"Hard",events:2819,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.775,paritySummary:{errors:0,warns:0,resets:4}},{njs:16,offset:-.3,notes:863,bombs:12,obstacles:106,nps:4.194,length:487,characteristic:"Standard",difficulty:"Expert",events:2819,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.775,paritySummary:{errors:0,warns:0,resets:2}},{njs:18,offset:-.5,notes:1041,bombs:31,obstacles:271,nps:5.059,length:487,characteristic:"Standard",difficulty:"ExpertPlus",events:2821,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.775,paritySummary:{errors:1,warns:4,resets:5}}],downloadURL:"https://cdn.beatsaver.com/8c5be566e218b8cc59c21e947bc39c1ce1f98908.zip",coverURL:"https://cdn.beatsaver.com/8c5be566e218b8cc59c21e947bc39c1ce1f98908.jpg",previewURL:"https://cdn.beatsaver.com/8c5be566e218b8cc59c21e947bc39c1ce1f98908.mp3"}],createdAt:"2021-02-17T18:04:39.306Z",updatedAt:"2021-02-17T18:04:39.306Z",lastPublishedAt:"2021-02-17T18:04:39.306Z"},{id:"90c3",name:"Centuries - Fallout Boy (2020) [Mapped by Ab and Qwasyx]",description:"Phew, that took a while.\nHuge thanks to Qwasyx for lighting this map as well as making all the One Saber difficulties!\nAnother thanks to Fruhead for testing.\n\nI take requests! My Discord is Ab#8582.",uploader:{id:15368,name:"theab",uniqueSet:!0,hash:"5cff0b7698cc5a672c853a14",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c853a14?d=retro",type:"SIMPLE"},metadata:{bpm:176,duration:227,songName:"Centuries",songSubName:"",songAuthorName:"Fallout Boy",levelAuthorName:"Ab & Qwasyx"},stats:{plays:0,downloads:8958,upvotes:2447,downvotes:81,score:.9237},uploaded:"2020-03-16T21:06:46.074Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e3bb02f9ecd08e4c3472fea92e604bc415338f2a",key:"90c3",state:"Published",createdAt:"2020-03-16T21:06:46.074Z",sageScore:6,diffs:[{njs:10,offset:0,notes:231,bombs:0,obstacles:46,nps:1.065,length:636,characteristic:"Standard",difficulty:"Easy",events:14169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.818,paritySummary:{errors:84,warns:0,resets:0}},{njs:13,offset:-.6,notes:329,bombs:0,obstacles:4,nps:1.517,length:636,characteristic:"Standard",difficulty:"Normal",events:14169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.818,paritySummary:{errors:26,warns:8,resets:0}},{njs:14,offset:.8,notes:514,bombs:92,obstacles:82,nps:2.371,length:636,characteristic:"Standard",difficulty:"Hard",events:14169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.818,paritySummary:{errors:0,warns:0,resets:2}},{njs:16,offset:.4,notes:667,bombs:182,obstacles:11,nps:3.076,length:636,characteristic:"Standard",difficulty:"Expert",events:14167,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.818,paritySummary:{errors:1,warns:1,resets:8}},{njs:20,offset:-.2,notes:862,bombs:164,obstacles:2,nps:3.976,length:636,characteristic:"Standard",difficulty:"ExpertPlus",events:14169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.818,paritySummary:{errors:1,warns:1,resets:5}},{njs:10,offset:0,notes:146,bombs:64,obstacles:4,nps:.671,length:638,characteristic:"OneSaber",difficulty:"Easy",events:14169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.5,paritySummary:{errors:21,warns:15,resets:1}},{njs:13,offset:-.6,notes:276,bombs:144,obstacles:68,nps:1.269,length:638,characteristic:"OneSaber",difficulty:"Normal",events:14169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.5,paritySummary:{errors:4,warns:22,resets:2}},{njs:14,offset:.8,notes:529,bombs:8,obstacles:0,nps:2.43,length:638.5,characteristic:"OneSaber",difficulty:"Hard",events:14169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.67,paritySummary:{errors:8,warns:6,resets:1}},{njs:16,offset:.4,notes:548,bombs:96,obstacles:0,nps:2.522,length:637.5,characteristic:"OneSaber",difficulty:"Expert",events:14169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.33,paritySummary:{errors:2,warns:0,resets:5}},{njs:20,offset:-.2,notes:830,bombs:153,obstacles:0,nps:3.807,length:639.5,characteristic:"OneSaber",difficulty:"ExpertPlus",events:14169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.011,paritySummary:{errors:0,warns:2,resets:13}},{njs:20,offset:-.2,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"ExpertPlus",events:14169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e3bb02f9ecd08e4c3472fea92e604bc415338f2a.zip",coverURL:"https://cdn.beatsaver.com/e3bb02f9ecd08e4c3472fea92e604bc415338f2a.jpg",previewURL:"https://cdn.beatsaver.com/e3bb02f9ecd08e4c3472fea92e604bc415338f2a.mp3"}],createdAt:"2020-03-16T21:06:46.074Z",updatedAt:"2020-03-16T21:06:46.074Z",lastPublishedAt:"2020-03-16T21:06:46.074Z"},{id:"63ea",name:"Sabaton - Primo Victoria",description:"Old but great song by Sabaton. Hard to Expert+ are mapped.\n\nGenre: Power metal\nBPM: 124.175\nNPS: 5.51 / 3.87 / 3.06\nNJS: 16 / 13 / 11\n\nExpert+ playthrough: https://youtu.be/Z92uPY3met4",uploader:{id:1207,name:"wyxi",uniqueSet:!0,hash:"5d0abf96b8c469000699075f",avatar:"https://www.gravatar.com/avatar/5d0abf96b8c469000699075f?d=retro",type:"SIMPLE"},metadata:{bpm:124.175,duration:251,songName:"Primo Victoria",songSubName:"",songAuthorName:"Sabaton",levelAuthorName:"Wyxi"},stats:{plays:0,downloads:2832,upvotes:1838,downvotes:52,score:.9237},uploaded:"2019-09-16T19:33:52.506Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d18d33e15faab989cc67b7a1ce0b03950295764f",key:"63ea",state:"Published",createdAt:"2019-09-16T19:33:52.506Z",sageScore:6,diffs:[{njs:11,offset:1,notes:769,bombs:4,obstacles:13,nps:3.18,length:500.5,characteristic:"Standard",difficulty:"Hard",events:2822,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:241.836,paritySummary:{errors:10,warns:2,resets:2}},{njs:13,offset:.5,notes:972,bombs:8,obstacles:12,nps:4.019,length:500.5,characteristic:"Standard",difficulty:"Expert",events:2823,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:241.836,paritySummary:{errors:15,warns:11,resets:4}},{njs:16,offset:0,notes:1385,bombs:8,obstacles:11,nps:5.727,length:500.5,characteristic:"Standard",difficulty:"ExpertPlus",events:2824,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:241.836,paritySummary:{errors:20,warns:18,resets:4}}],downloadURL:"https://cdn.beatsaver.com/d18d33e15faab989cc67b7a1ce0b03950295764f.zip",coverURL:"https://cdn.beatsaver.com/d18d33e15faab989cc67b7a1ce0b03950295764f.jpg",previewURL:"https://cdn.beatsaver.com/d18d33e15faab989cc67b7a1ce0b03950295764f.mp3"}],createdAt:"2019-09-16T19:33:52.506Z",updatedAt:"2019-09-16T19:33:52.506Z",lastPublishedAt:"2019-09-16T19:33:52.506Z"},{id:"45eb",name:"Fun Tonight - MACROSS 82-99",description:'Future funk has a special place in my heart, Beat Saber could use some more of this genre.\r\nDifficulties: Expert, Expert+ (Both on the easier end of the spectrum)\r\n\r\n"DDR/Mystikmol" Difficulty Rating:\r\nE+ -- 12\r\nExpert -- 10',uploader:{id:4284569,name:"checkthepan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f3d5",avatar:"https://cdn.beatsaver.com/avatar/184355369189900290.png",type:"DISCORD"},metadata:{bpm:130,duration:164,songName:"Fun Tonight",songSubName:"MACROSS 82-99",songAuthorName:"Checkthepan",levelAuthorName:"checkthepan"},stats:{plays:0,downloads:1300,upvotes:710,downvotes:6,score:.9237},uploaded:"2019-04-14T19:22:02Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"608bf3c4cd341a7b70199f26d44aaff71550078d",key:"45eb",state:"Published",createdAt:"2019-04-14T19:22:02Z",sageScore:7,diffs:[{njs:12,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Standard",difficulty:"Easy",events:1545,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:14,offset:0,notes:613,bombs:0,obstacles:30,nps:3.795,length:350,characteristic:"Standard",difficulty:"Expert",events:1545,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:161.538,paritySummary:{errors:14,warns:19,resets:0}},{njs:16,offset:0,notes:693,bombs:0,obstacles:31,nps:4.29,length:350,characteristic:"Standard",difficulty:"ExpertPlus",events:1545,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:161.538,paritySummary:{errors:12,warns:28,resets:0}}],downloadURL:"https://cdn.beatsaver.com/608bf3c4cd341a7b70199f26d44aaff71550078d.zip",coverURL:"https://cdn.beatsaver.com/608bf3c4cd341a7b70199f26d44aaff71550078d.jpg",previewURL:"https://cdn.beatsaver.com/608bf3c4cd341a7b70199f26d44aaff71550078d.mp3"}],createdAt:"2019-04-14T19:22:02Z",updatedAt:"2019-04-14T19:22:02Z",lastPublishedAt:"2019-04-14T19:22:02Z"},{id:"443d",name:"PUSSY - Rammstein",description:"Another one!\r\n\r\nMaybe don't let your kids play this one until they are a bit older....",uploader:{id:27983,name:"heisenbergirl",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ec30",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ec30?d=retro",type:"SIMPLE"},metadata:{bpm:135,duration:240,songName:"PUSSY",songSubName:"Rammstein",songAuthorName:"Heisenberg",levelAuthorName:"heisenbergirl"},stats:{plays:0,downloads:1710,upvotes:1218,downvotes:25,score:.9237},uploaded:"2019-04-08T04:27:04Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"54f6e76446b3a96cc4707fb2d2aa8bd1efd0baf3",key:"443d",state:"Published",createdAt:"2019-04-08T04:27:04Z",sageScore:6,diffs:[{njs:14,offset:0,notes:711,bombs:0,obstacles:1,nps:3.1,length:516,characteristic:"Standard",difficulty:"Expert",events:12824,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:229.333,paritySummary:{errors:13,warns:24,resets:0}},{njs:16,offset:0,notes:967,bombs:12,obstacles:7,nps:4.217,length:516,characteristic:"Standard",difficulty:"ExpertPlus",events:12824,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:229.333,paritySummary:{errors:40,warns:52,resets:7}}],downloadURL:"https://cdn.beatsaver.com/54f6e76446b3a96cc4707fb2d2aa8bd1efd0baf3.zip",coverURL:"https://cdn.beatsaver.com/54f6e76446b3a96cc4707fb2d2aa8bd1efd0baf3.jpg",previewURL:"https://cdn.beatsaver.com/54f6e76446b3a96cc4707fb2d2aa8bd1efd0baf3.mp3"}],createdAt:"2019-04-08T04:27:04Z",updatedAt:"2019-04-08T04:27:04Z",lastPublishedAt:"2019-04-08T04:27:04Z"},{id:"1ad55",name:"Porter Robinson & Madeon - Shelter (Modchart)",description:"This is a modchart that i wanted to do for a long time, i saved this song becuase I love it.\r\nAnd today I'm proud to show you my new modchart!\r\nI made this map in a week and i really enjoyed the process!\r\n\r\nShowcase: https://www.youtube.com/watch?v=a4zSCDYRwAQ\r\n\r\nIf you have any feedback dont be shy and tell me on discord:\r\nTzurS11#1111",uploader:{id:4284455,name:"TzurS11",uniqueSet:!0,hash:"6040a8135ab13d0006093512",avatar:"https://cdn.beatsaver.com/avatar/474645781786263552.png",type:"DISCORD"},metadata:{bpm:200,duration:219,songName:"Shelter",songSubName:"",songAuthorName:"Porter Robinson & Madeon",levelAuthorName:"TzurS11"},stats:{plays:0,downloads:12349,upvotes:737,downvotes:7,score:.9236},uploaded:"2021-08-01T20:31:30.562Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"740c5f5d7b730285c8d13fad1107be4659eb2839",key:"1ad55",state:"Published",createdAt:"2021-08-01T20:31:30.562Z",sageScore:3,diffs:[{njs:19,offset:-.05,notes:623,bombs:4,obstacles:0,nps:3.146,length:660,characteristic:"Standard",difficulty:"Expert",events:81591,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:198,paritySummary:{errors:0,warns:0,resets:1}},{njs:19,offset:-.05,notes:623,bombs:4,obstacles:24892,nps:3.146,length:660,characteristic:"Standard",difficulty:"ExpertPlus",events:81591,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:198,paritySummary:{errors:0,warns:0,resets:1}}],downloadURL:"https://cdn.beatsaver.com/740c5f5d7b730285c8d13fad1107be4659eb2839.zip",coverURL:"https://cdn.beatsaver.com/740c5f5d7b730285c8d13fad1107be4659eb2839.jpg",previewURL:"https://cdn.beatsaver.com/740c5f5d7b730285c8d13fad1107be4659eb2839.mp3"}],createdAt:"2021-08-01T20:31:30.562Z",updatedAt:"2021-08-01T20:31:30.562Z",lastPublishedAt:"2021-08-01T20:31:30.562Z"},{id:"7326",name:"The Greatest Show - Mapped by TheAb",description:"This is the most time I've ever put into a map. Almost 14 hours have been put into it, and I really appreciate the light-show I've done. Truly hope you enjoy!\n\nExpert+: 4.55NPS\nExpert: 3.49NPS\nHard: 2.57NPS\nNormal: 1.61NPS\n12,601 Lighting events.\n\nOriginal Song: https://www.youtube.com/watch?v=NyVYXRD1Ans\n\nTwitter: https://twitter.com/TheAb03 / Discord: Ab#8582\nI take requests! DM Ab#8582 on Discord for more info.",uploader:{id:15368,name:"theab",uniqueSet:!0,hash:"5cff0b7698cc5a672c853a14",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c853a14?d=retro",type:"SIMPLE"},metadata:{bpm:158,duration:301,songName:"The Greatest Show",songSubName:"",songAuthorName:"Hugh Jackman, Keala Settle, Zac Efron, Zendaya & The Greatest Showman Ensemble",levelAuthorName:"Ab"},stats:{plays:0,downloads:3783,upvotes:1160,downvotes:23,score:.9235},uploaded:"2019-12-01T19:39:02.667Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f621c70d06e8f5405ffa428f7b742b123208a656",key:"7326",state:"Published",createdAt:"2019-12-01T19:39:02.667Z",sageScore:5,diffs:[{njs:10,offset:0,notes:489,bombs:36,obstacles:75,nps:1.672,length:770.149,characteristic:"Standard",difficulty:"Normal",events:12599,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:292.462,paritySummary:{errors:43,warns:13,resets:6}},{njs:12,offset:.5,notes:777,bombs:31,obstacles:96,nps:2.657,length:770.149,characteristic:"Standard",difficulty:"Hard",events:12599,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:292.462,paritySummary:{errors:1,warns:0,resets:8}},{njs:15,offset:.3,notes:1056,bombs:48,obstacles:100,nps:3.611,length:770.149,characteristic:"Standard",difficulty:"Expert",events:12986,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:292.462,paritySummary:{errors:3,warns:1,resets:9}},{njs:19,offset:0,notes:1376,bombs:34,obstacles:97,nps:4.705,length:770.149,characteristic:"Standard",difficulty:"ExpertPlus",events:12595,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:292.462,paritySummary:{errors:0,warns:0,resets:6}},{njs:19,offset:0,notes:1,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:12568,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:1,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f621c70d06e8f5405ffa428f7b742b123208a656.zip",coverURL:"https://cdn.beatsaver.com/f621c70d06e8f5405ffa428f7b742b123208a656.jpg",previewURL:"https://cdn.beatsaver.com/f621c70d06e8f5405ffa428f7b742b123208a656.mp3"}],createdAt:"2019-12-01T19:39:02.667Z",updatedAt:"2019-12-01T19:39:02.667Z",lastPublishedAt:"2019-12-01T19:39:02.667Z"},{id:"56c2",name:"On The Floor (ft. Pitbull) - Jennifer Lopez",description:"You can most certainly dance to this song, I hope you like it!\nSend me your thoughts on Discord: Teuflum#5982\n\nExpert+ preview: https://www.youtube.com/watch?v=TPU4mCQngNQ\n\nMany thanks to my playtesters Redmagi, techbutterfly and Helen Carnate!\n\nDM me your feedback on discord: Teuflum#5982",uploader:{id:68740,name:"Teuflum",uniqueSet:!0,hash:"5cff0b7498cc5a672c851a6b",avatar:"https://cdn.beatsaver.com/avatar/114706869460664326.png",type:"DISCORD"},metadata:{bpm:130,duration:231,songName:"On The Floor",songSubName:"(ft. Pitbull)",songAuthorName:"Jennifer Lopez",levelAuthorName:"Teuflum"},stats:{plays:0,downloads:8646,upvotes:1696,downvotes:46,score:.9235},uploaded:"2019-07-13T12:11:30.889Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"56d18c176906a23b15702d3eb33f8669322ee312",key:"56c2",state:"Published",createdAt:"2019-07-13T12:11:30.889Z",sageScore:7,diffs:[{njs:10,offset:1,notes:307,bombs:0,obstacles:28,nps:1.415,length:470,characteristic:"Standard",difficulty:"Easy",events:3081,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.923,paritySummary:{errors:87,warns:4,resets:0}},{njs:12,offset:1,notes:383,bombs:0,obstacles:30,nps:1.766,length:470,characteristic:"Standard",difficulty:"Normal",events:3081,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.923,paritySummary:{errors:75,warns:13,resets:0}},{njs:14,offset:1,notes:638,bombs:0,obstacles:32,nps:2.941,length:470,characteristic:"Standard",difficulty:"Hard",events:3081,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.923,paritySummary:{errors:29,warns:23,resets:0}},{njs:16,offset:.5,notes:838,bombs:0,obstacles:26,nps:3.863,length:470,characteristic:"Standard",difficulty:"Expert",events:3081,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.923,paritySummary:{errors:30,warns:36,resets:0}},{njs:17,offset:0,notes:949,bombs:0,obstacles:23,nps:4.375,length:470,characteristic:"Standard",difficulty:"ExpertPlus",events:3081,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.923,paritySummary:{errors:33,warns:43,resets:0}}],downloadURL:"https://cdn.beatsaver.com/56d18c176906a23b15702d3eb33f8669322ee312.zip",coverURL:"https://cdn.beatsaver.com/56d18c176906a23b15702d3eb33f8669322ee312.jpg",previewURL:"https://cdn.beatsaver.com/56d18c176906a23b15702d3eb33f8669322ee312.mp3"}],createdAt:"2019-07-13T12:11:30.889Z",updatedAt:"2019-07-13T12:11:30.889Z",lastPublishedAt:"2019-07-13T12:11:30.889Z"},{id:"492e",name:"[OLD] Centuries - Fallout Boy | 2019 version | Mapped and Lighted by Ab",description:"Alright! Another one.\nNormal is pretty much top-Easy, couldn't decide.\nAb#4940 if you're interested in collabs\n\nAlso lights could get laggy",uploader:{id:15368,name:"theab",uniqueSet:!0,hash:"5cff0b7698cc5a672c853a14",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c853a14?d=retro",type:"SIMPLE"},metadata:{bpm:176,duration:227,songName:"Centuries",songSubName:"Fallout Boy",songAuthorName:"Ab",levelAuthorName:"TheAb"},stats:{plays:0,downloads:4393,upvotes:2252,downvotes:72,score:.9235},uploaded:"2019-04-28T22:58:20Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"158e65b2e9861c626344049ec4a069d1523ad060",key:"492e",state:"Published",createdAt:"2019-04-28T22:58:20Z",sageScore:4,diffs:[{njs:11,offset:0,notes:289,bombs:42,obstacles:4,nps:1.333,length:635.75,characteristic:"Standard",difficulty:"Normal",events:22890,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.733,paritySummary:{errors:79,warns:35,resets:2}},{njs:12,offset:0,notes:527,bombs:85,obstacles:5,nps:2.425,length:637.5,characteristic:"Standard",difficulty:"Hard",events:1,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.33,paritySummary:{errors:62,warns:51,resets:9}},{njs:12,offset:0,notes:762,bombs:158,obstacles:7,nps:3.506,length:637.5,characteristic:"Standard",difficulty:"Expert",events:22890,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.33,paritySummary:{errors:54,warns:44,resets:5}},{njs:18,offset:0,notes:1145,bombs:186,obstacles:0,nps:5.267,length:637.625,characteristic:"Standard",difficulty:"ExpertPlus",events:22890,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.372,paritySummary:{errors:68,warns:90,resets:6}}],downloadURL:"https://cdn.beatsaver.com/158e65b2e9861c626344049ec4a069d1523ad060.zip",coverURL:"https://cdn.beatsaver.com/158e65b2e9861c626344049ec4a069d1523ad060.jpg",previewURL:"https://cdn.beatsaver.com/158e65b2e9861c626344049ec4a069d1523ad060.mp3"}],createdAt:"2019-04-28T22:58:20Z",updatedAt:"2019-04-28T22:58:20Z",lastPublishedAt:"2019-04-28T22:58:20Z"},{id:"8215",name:"David Guetta, Brooks & Loote - Better When You're Gone",description:"First map of my Future House pack. I remember that I started this a long time ago, even before I had my VR; about 5 months ago going into September.\n\nVideo: https://youtu.be/NDDn7-Lzrlo\n\nEasy: Notes: 130 NPS: 1.22 NJS: 10\nNormal: Notes: 164 NPS: 1.65 NJS: 12\nHard: Notes: 267 NPS: 2.64 NJS: 14\nExpert: Notes: 398 NPS: 3.94 NJS: 16\nExpert+: Notes: 483 NPS: 4.76 NJS: 18\n\nCheck out my lightshows here: https://www.youtube.com/playlist?list=PLwl6dYq72JOYu1BnKl5WATa4Dh__ZJmuN",uploader:{id:14808,name:"halcyon12",uniqueSet:!0,hash:"5cff0b7698cc5a672c8547ad",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8547ad?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:106,songName:"Better When You're Gone",songSubName:"(Ft. Loote)",songAuthorName:"David Guetta, Brooks",levelAuthorName:"Halcyon12"},stats:{plays:0,downloads:2743,upvotes:977,downvotes:16,score:.9233},uploaded:"2020-01-27T23:27:20.606Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"048b444b7011388e63e4b7bab1e8f96b4b51fa3d",key:"8215",state:"Published",createdAt:"2020-01-27T23:27:20.606Z",sageScore:6,diffs:[{njs:10,offset:1,notes:130,bombs:0,obstacles:0,nps:1.29,length:215,characteristic:"Standard",difficulty:"Easy",events:2063,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:100.781,paritySummary:{errors:54,warns:2,resets:0}},{njs:12,offset:.5,notes:164,bombs:0,obstacles:7,nps:1.652,length:211.75,characteristic:"Standard",difficulty:"Normal",events:2063,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:99.258,paritySummary:{errors:16,warns:6,resets:0}},{njs:14,offset:0,notes:267,bombs:0,obstacles:6,nps:2.643,length:215.5,characteristic:"Standard",difficulty:"Hard",events:2063,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:101.016,paritySummary:{errors:2,warns:2,resets:0}},{njs:16,offset:-.25,notes:398,bombs:0,obstacles:5,nps:3.94,length:215.5,characteristic:"Standard",difficulty:"Expert",events:2060,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:101.016,paritySummary:{errors:1,warns:0,resets:0}},{njs:18,offset:-.5,notes:483,bombs:4,obstacles:6,nps:4.765,length:216.25,characteristic:"Standard",difficulty:"ExpertPlus",events:2063,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:101.367,paritySummary:{errors:13,warns:18,resets:6}}],downloadURL:"https://cdn.beatsaver.com/048b444b7011388e63e4b7bab1e8f96b4b51fa3d.zip",coverURL:"https://cdn.beatsaver.com/048b444b7011388e63e4b7bab1e8f96b4b51fa3d.jpg",previewURL:"https://cdn.beatsaver.com/048b444b7011388e63e4b7bab1e8f96b4b51fa3d.mp3"}],createdAt:"2020-01-27T23:27:20.606Z",updatedAt:"2020-01-27T23:27:20.606Z",lastPublishedAt:"2020-01-27T23:27:20.606Z"},{id:"6352",name:"Paladin - EnV",description:'Map creators:\r\nYume - Notes / Walls\r\nRexxxzi - Lights\r\n\r\nThis is "High Tier Expert" difficulty\r\nWe hope you\'ll enjoy the map!',uploader:{id:37025,name:"yume",uniqueSet:!0,hash:"5cff0b7698cc5a672c853e8a",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c853e8a?d=retro",type:"SIMPLE"},metadata:{bpm:130,duration:242,songName:"Paladin",songSubName:"",songAuthorName:"EnV",levelAuthorName:"Yume ft. Rexxz Lights"},stats:{plays:0,downloads:1187,upvotes:1079,downvotes:20,score:.9233},uploaded:"2019-09-14T12:32:01.763Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"583598b60c0ef891738d3b07c564cadff6500c63",key:"6352",state:"Published",createdAt:"2019-09-14T12:32:01.763Z",sageScore:7,diffs:[{njs:12,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Standard",difficulty:"Easy",events:9642,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:1065,bombs:0,obstacles:7902,nps:4.615,length:500,characteristic:"Standard",difficulty:"Expert",events:9524,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:230.769,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:1065,bombs:0,obstacles:7923,nps:4.615,length:500,characteristic:"Standard",difficulty:"ExpertPlus",events:9524,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:230.769,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/583598b60c0ef891738d3b07c564cadff6500c63.zip",coverURL:"https://cdn.beatsaver.com/583598b60c0ef891738d3b07c564cadff6500c63.jpg",previewURL:"https://cdn.beatsaver.com/583598b60c0ef891738d3b07c564cadff6500c63.mp3"}],createdAt:"2019-09-14T12:32:01.763Z",updatedAt:"2019-09-14T12:32:01.763Z",lastPublishedAt:"2019-09-14T12:32:01.763Z"},{id:"2c14",name:"CHVRCHES - The Mother We Share",description:"I noticed CHVRCHES' most popular song didn't have a map, so I gave it a shot. Check out my other maps, too!\r\n\r\nPreview: https://youtu.be/bGnUqfGrglY\r\nNormal / Hard / Expert\r\n\r\nhttps://www.twitch.tv/Syntheseizure",uploader:{id:31265,name:"syntheseizure",uniqueSet:!0,hash:"5cff0b7698cc5a672c8546bd",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8546bd?d=retro",type:"SIMPLE"},metadata:{bpm:87,duration:192,songName:"The Mother We Share",songSubName:"CHVRCHES",songAuthorName:"Syntheseizure",levelAuthorName:"Syntheseizure"},stats:{plays:0,downloads:1880,upvotes:1056,downvotes:19,score:.9233},uploaded:"2019-01-08T20:34:12Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"4f96ae058a970508dad582e0ea60d5e6ad9d38b5",key:"2c14",state:"Published",createdAt:"2019-01-08T20:34:12Z",sageScore:4,diffs:[{njs:10,offset:0,notes:373,bombs:0,obstacles:2,nps:2.053,length:263.5,characteristic:"Standard",difficulty:"Normal",events:710,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.724,paritySummary:{errors:36,warns:7,resets:0}},{njs:10,offset:0,notes:480,bombs:0,obstacles:6,nps:2.641,length:263.5,characteristic:"Standard",difficulty:"Hard",events:710,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.724,paritySummary:{errors:20,warns:12,resets:0}},{njs:10,offset:0,notes:683,bombs:0,obstacles:12,nps:3.758,length:263.5,characteristic:"Standard",difficulty:"Expert",events:708,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.724,paritySummary:{errors:21,warns:7,resets:0}}],downloadURL:"https://cdn.beatsaver.com/4f96ae058a970508dad582e0ea60d5e6ad9d38b5.zip",coverURL:"https://cdn.beatsaver.com/4f96ae058a970508dad582e0ea60d5e6ad9d38b5.jpg",previewURL:"https://cdn.beatsaver.com/4f96ae058a970508dad582e0ea60d5e6ad9d38b5.mp3"}],createdAt:"2019-01-08T20:34:12Z",updatedAt:"2019-01-08T20:34:12Z",lastPublishedAt:"2019-01-08T20:34:12Z"},{id:"2293",name:"My Soul,Your Beats",description:"Over 10 hours of work went into this to make it as good as it could be\r\nI consider this a new beginning, all previous maps of mine pale in comparison",uploader:{id:47724,name:"dafrandle",uniqueSet:!0,hash:"5cff0b7598cc5a672c8527e9",avatar:"https://www.gravatar.com/avatar/5cff0b7598cc5a672c8527e9?d=retro",type:"SIMPLE"},metadata:{bpm:145,duration:276,songName:"My Soul,Your Beats",songSubName:"Lia",songAuthorName:"dafrandle",levelAuthorName:"dafrandle"},stats:{plays:0,downloads:3582,upvotes:1440,downvotes:35,score:.9233},uploaded:"2018-11-27T23:47:18Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"abc11caed9ca86fda3dacc12dd0bcca51041ebe0",key:"2293",state:"Published",createdAt:"2018-11-27T23:47:18Z",sageScore:6,diffs:[{njs:9,offset:0,notes:505,bombs:0,obstacles:3,nps:1.9,length:642.375,characteristic:"Standard",difficulty:"Normal",events:3955,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:265.81,paritySummary:{errors:77,warns:13,resets:0}},{njs:10,offset:0,notes:768,bombs:0,obstacles:26,nps:2.889,length:642.375,characteristic:"Standard",difficulty:"Hard",events:3955,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:265.81,paritySummary:{errors:64,warns:24,resets:0}},{njs:11,offset:0,notes:1120,bombs:62,obstacles:29,nps:4.214,length:642.375,characteristic:"Standard",difficulty:"Expert",events:3955,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:265.81,paritySummary:{errors:89,warns:40,resets:5}}],downloadURL:"https://cdn.beatsaver.com/abc11caed9ca86fda3dacc12dd0bcca51041ebe0.zip",coverURL:"https://cdn.beatsaver.com/abc11caed9ca86fda3dacc12dd0bcca51041ebe0.jpg",previewURL:"https://cdn.beatsaver.com/abc11caed9ca86fda3dacc12dd0bcca51041ebe0.mp3"}],createdAt:"2018-11-27T23:47:18Z",updatedAt:"2018-11-27T23:47:18Z",lastPublishedAt:"2018-11-27T23:47:18Z"},{id:"1a0ba",name:"[Electro Swing Pack] Wolfgang Lohr & Maskarade - Hit The Road Jack",description:"Nixie Presents: Electro Swing Pack!\n\n10 electro swing songs with expert and expert+ diffs to make your booty swing!\n\nGet The Pack: \nhttps://bsaber.com/electro-swing-pack/\n\nMap Gameplay:\nhttps://youtu.be/0ObNR9n_dDs\n\nComplete Pack Playthrough:\nhttps://youtu.be/yj9rw4MEh7s\n\nHeyya! After looking for some dancey electro swing maps, I noticed that there barely are any!\nSo I took matters into my own hands, learning mapping basically from scratch,\nscrapping my first failed attempts and then finally making a map that was good.\nI found it so fun that I ended up making 9 more maps,\nand fine tuned them with the help of the testplayers in BSMG,\nas well as the lovely curators from the bsaber discord.\n\nHuge thanks in particular to:\nMonstor, Bearly, Noxn, Bullet, Vaser888, Tocxx, Jafdy, Storm Knight and Pixelguy!\n\nIf you want to talk to me, here is my Discord:\nNixie.Korten#6944",uploader:{id:4286374,name:"nixiekorten",uniqueSet:!0,hash:"6096752e12772e0006e2f7e6",avatar:"https://cdn.beatsaver.com/avatar/840550221690699776.png",type:"DISCORD"},metadata:{bpm:124,duration:159,songName:"Hit The Road Jack",songSubName:"",songAuthorName:"Wolfgang Lohr & Maskarade",levelAuthorName:"Nixie.Korten"},stats:{plays:0,downloads:14063,upvotes:841,downvotes:11,score:.9232},uploaded:"2021-07-08T15:26:18.072Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"75f10751d58f6f1ab0bc36e94039a144256adccb",key:"1a0ba",state:"Published",createdAt:"2021-07-08T15:26:18.072Z",sageScore:4,diffs:[{njs:16,offset:-.25,notes:475,bombs:0,obstacles:0,nps:3.089,length:317.75,characteristic:"Standard",difficulty:"Expert",events:1846,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:153.75,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:.25,notes:750,bombs:0,obstacles:0,nps:4.878,length:317.75,characteristic:"Standard",difficulty:"ExpertPlus",events:1846,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:153.75,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/75f10751d58f6f1ab0bc36e94039a144256adccb.zip",coverURL:"https://cdn.beatsaver.com/75f10751d58f6f1ab0bc36e94039a144256adccb.jpg",previewURL:"https://cdn.beatsaver.com/75f10751d58f6f1ab0bc36e94039a144256adccb.mp3"}],createdAt:"2021-07-08T15:26:18.072Z",updatedAt:"2021-07-08T15:26:18.072Z",lastPublishedAt:"2021-07-08T15:26:18.072Z"},{id:"924a",name:'JoJo ~Sono Chi no Sadame~ [JoJo\'s Bizarre Adventure Opening] - Hiroaki "TOMMY" Tominaga',description:'Not many people know this but my full name is actually Joetastic Joestar ;)\n\n"JoJo ~Sono Chi no Sadame~" is the first opening of JoJo\'s Bizarre Adventure: Phantom Blood by Hiroaki "TOMMY" Tominaga.\n\nMap Preview: https://youtu.be/WPprA9AS35A',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:146,duration:263,songName:"JoJo ~Sono Chi no Sadame~",songSubName:"",songAuthorName:'Hiroaki "TOMMY" Tominaga',levelAuthorName:"Joetastic"},stats:{plays:0,downloads:6854,upvotes:1594,downvotes:42,score:.9232},uploaded:"2020-03-21T18:09:50.603Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"eb2b28402e27f784a64f99d338696a2bdd59fe2c",key:"924a",state:"Published",createdAt:"2020-03-21T18:09:50.603Z",sageScore:5,diffs:[{njs:16,offset:0,notes:1305,bombs:0,obstacles:16,nps:5.053,length:628.5,characteristic:"Standard",difficulty:"ExpertPlus",events:4918,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:258.288,paritySummary:{errors:30,warns:38,resets:0}}],downloadURL:"https://cdn.beatsaver.com/eb2b28402e27f784a64f99d338696a2bdd59fe2c.zip",coverURL:"https://cdn.beatsaver.com/eb2b28402e27f784a64f99d338696a2bdd59fe2c.jpg",previewURL:"https://cdn.beatsaver.com/eb2b28402e27f784a64f99d338696a2bdd59fe2c.mp3"}],createdAt:"2020-03-21T18:09:50.603Z",updatedAt:"2020-03-21T18:09:50.603Z",lastPublishedAt:"2020-03-21T18:09:50.603Z"},{id:"aa5c",name:"MOMOLAND - BAAM (Remaster)",description:"Expert+ Preview: https://www.youtube.com/watch?v=5PUSZT6jUaY\n\nMan, I have been doing this for a year now. I feel old. Well enjoy this remake of the first map I uploaded!\n\nComments? Like it? Hate it? Let me know on Discord @Bloodcloak#5725 ! Or drop by the Kpop discord at: https://discord.gg/c9uHGYP",uploader:{id:71661,name:"bloodcloak",uniqueSet:!0,hash:"5cff0b7698cc5a672c8551d3",avatar:"https://cdn.beatsaver.com/avatar/205707707187986442.png",type:"DISCORD"},metadata:{bpm:127,duration:209,songName:"BAAM",songSubName:"Remastered Map",songAuthorName:"MOMOLAND",levelAuthorName:"Bloodcloak"},stats:{plays:0,downloads:8638,upvotes:1222,downvotes:26,score:.9231},uploaded:"2020-05-25T19:34:51.367Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"72746e0a89246d11a8fe7f3a23113f4605980a09",key:"aa5c",state:"Published",createdAt:"2020-05-25T19:34:51.367Z",sageScore:5,diffs:[{njs:12,offset:.4,notes:551,bombs:0,obstacles:148,nps:2.706,length:431,characteristic:"Standard",difficulty:"Hard",events:2998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:203.622,paritySummary:{errors:4,warns:0,resets:0}},{njs:16,offset:-.2,notes:823,bombs:0,obstacles:120,nps:4.041,length:431.063,characteristic:"Standard",difficulty:"Expert",events:2998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:203.652,paritySummary:{errors:6,warns:2,resets:0}},{njs:18,offset:-.4,notes:885,bombs:0,obstacles:111,nps:4.346,length:431,characteristic:"Standard",difficulty:"ExpertPlus",events:2998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:203.622,paritySummary:{errors:3,warns:7,resets:0}}],downloadURL:"https://cdn.beatsaver.com/72746e0a89246d11a8fe7f3a23113f4605980a09.zip",coverURL:"https://cdn.beatsaver.com/72746e0a89246d11a8fe7f3a23113f4605980a09.jpg",previewURL:"https://cdn.beatsaver.com/72746e0a89246d11a8fe7f3a23113f4605980a09.mp3"}],createdAt:"2020-05-25T19:34:51.367Z",updatedAt:"2020-05-25T19:34:51.367Z",lastPublishedAt:"2020-05-25T19:34:51.367Z"},{id:"33dc",name:"CeeLo Green ft. Jack Black - Kung Fu Fighting",description:"I only realised this yesterday, but I've managed to make a map of this Chinese inspired classic just in time for the Lunar new year. So happy Chinese new year everybody and I hope you enjoy it!\r\nTime spent mapping: 8:49\r\n\r\nVideo Preview: https://www.youtube.com/watch?v=73jUl1rH0Fo\r\nBeastSaber: https://bsaber.com/members/stumi/",uploader:{id:4785,name:"stumi",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f720",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro",type:"SIMPLE"},metadata:{bpm:110,duration:140,songName:"Kung Fu Fighting",songSubName:"CeeLo Green ft.Jack Black",songAuthorName:"Stumi",levelAuthorName:"stumi"},stats:{plays:0,downloads:7920,upvotes:1959,downvotes:59,score:.9231},uploaded:"2019-02-05T21:06:09Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b653e83bdae8028e77e84f751d23d619bc55f6f7",key:"33dc",state:"Published",createdAt:"2019-02-05T21:06:09Z",sageScore:6,diffs:[{njs:10,offset:0,notes:154,bombs:0,obstacles:26,nps:1.26,length:224,characteristic:"Standard",difficulty:"Easy",events:1344,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:122.182,paritySummary:{errors:16,warns:18,resets:0}},{njs:10,offset:0,notes:197,bombs:0,obstacles:24,nps:1.612,length:224,characteristic:"Standard",difficulty:"Normal",events:1344,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:122.182,paritySummary:{errors:17,warns:32,resets:0}},{njs:11,offset:0,notes:351,bombs:0,obstacles:13,nps:2.873,length:224,characteristic:"Standard",difficulty:"Hard",events:1344,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:122.182,paritySummary:{errors:29,warns:29,resets:0}},{njs:14,offset:0,notes:502,bombs:0,obstacles:17,nps:4.109,length:224,characteristic:"Standard",difficulty:"Expert",events:1346,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:122.182,paritySummary:{errors:32,warns:40,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b653e83bdae8028e77e84f751d23d619bc55f6f7.zip",coverURL:"https://cdn.beatsaver.com/b653e83bdae8028e77e84f751d23d619bc55f6f7.jpg",previewURL:"https://cdn.beatsaver.com/b653e83bdae8028e77e84f751d23d619bc55f6f7.mp3"}],createdAt:"2019-02-05T21:06:09Z",updatedAt:"2019-02-05T21:06:09Z",lastPublishedAt:"2019-02-05T21:06:09Z"},{id:"24e",name:"Maculate - Get Schwifty (Andromulus Remix)",description:"Finished version! This track has 4 difficulties: Easy, Normal, Hard and Expert. So everyone can now get schwifty, regardless of skill level. \r\n\r\nThis is my first finished track, all feedback is welcome!",uploader:{id:53049,name:"enclose",uniqueSet:!1,hash:"5cff0b7398cc5a672c84ed3b",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ed3b?d=retro",type:"SIMPLE"},metadata:{bpm:200,duration:279,songName:"Get Schwifty (Andromulus Remix)",songSubName:"",songAuthorName:"Maculate",levelAuthorName:"enclose"},stats:{plays:0,downloads:5744,upvotes:4485,downvotes:191,score:.9231},uploaded:"2018-05-26T15:22:35Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"33d5c4fff97822eef1f02fc53bb0561f23489efe",key:"24e",state:"Published",createdAt:"2018-05-26T15:22:35Z",sageScore:6,diffs:[{njs:10,offset:0,notes:411,bombs:0,obstacles:77,nps:1.527,length:897,characteristic:"Standard",difficulty:"Easy",events:1673,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:269.1,paritySummary:{errors:120,warns:53,resets:0}},{njs:10,offset:0,notes:518,bombs:0,obstacles:120,nps:1.925,length:897,characteristic:"Standard",difficulty:"Normal",events:1754,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:269.1,paritySummary:{errors:123,warns:64,resets:0}},{njs:10,offset:0,notes:629,bombs:0,obstacles:131,nps:2.337,length:897,characteristic:"Standard",difficulty:"Hard",events:1890,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:269.1,paritySummary:{errors:119,warns:77,resets:0}},{njs:10,offset:0,notes:684,bombs:0,obstacles:220,nps:2.542,length:897,characteristic:"Standard",difficulty:"Expert",events:1905,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:269.1,paritySummary:{errors:112,warns:75,resets:0}}],downloadURL:"https://cdn.beatsaver.com/33d5c4fff97822eef1f02fc53bb0561f23489efe.zip",coverURL:"https://cdn.beatsaver.com/33d5c4fff97822eef1f02fc53bb0561f23489efe.jpg",previewURL:"https://cdn.beatsaver.com/33d5c4fff97822eef1f02fc53bb0561f23489efe.mp3"}],createdAt:"2018-05-26T15:22:35Z",updatedAt:"2018-05-26T15:22:35Z",lastPublishedAt:"2018-05-26T15:22:35Z"},{id:"13bea",name:"The Wall - (Buunshin Remix) [WALL MAP + CHROMA]",description:"Just wanna say that Rustic has inspired me, and has made me want to start mapping a while back, and with that, it has brought me many opportunities, and many friends.\n\nPrograms used\nScuffedWalls: https://github.com/thelightdesigner/ScuffedWalls\nbeatwalls: https://github.com/spookyGh0st/beatwalls\n\nNoodleExtensions: https://github.com/Aeroluna/NoodleExtensions/releases\n\nPreview: https://youtu.be/lFxGmGO2kww",uploader:{id:4284667,name:"tall_chilis_boi",uniqueSet:!0,hash:"5dec6d85fffaa6000679dc23",avatar:"https://cdn.beatsaver.com/avatar/427307106970894336.png",type:"DISCORD"},metadata:{bpm:172,duration:270,songName:"The Wall",songSubName:"(Buunshin Remix)",songAuthorName:"ABIS & Signal & Tasha Baxter",levelAuthorName:"Tall_Chilis_Boi"},stats:{plays:0,downloads:2353,upvotes:1376,downvotes:33,score:.9229},uploaded:"2021-02-08T08:27:12.773Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9192703d277e652e3dc367bc87c68107967c6898",key:"13bea",state:"Published",createdAt:"2021-02-08T08:27:12.773Z",sageScore:4,diffs:[{njs:20,offset:-.5,notes:768,bombs:0,obstacles:14814,nps:2.991,length:736,characteristic:"Standard",difficulty:"Expert",events:15872,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:256.744,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9192703d277e652e3dc367bc87c68107967c6898.zip",coverURL:"https://cdn.beatsaver.com/9192703d277e652e3dc367bc87c68107967c6898.jpg",previewURL:"https://cdn.beatsaver.com/9192703d277e652e3dc367bc87c68107967c6898.mp3"}],createdAt:"2021-02-08T08:27:12.773Z",updatedAt:"2021-02-08T08:27:12.773Z",lastPublishedAt:"2021-02-08T08:27:12.773Z"},{id:"9b89",name:"Stronger",description:"A wall map for this masterpiece of a song.\n----------------------------------------------\nPlease give feedback @Reddek#5864\nAnd thanks for playing!",uploader:{id:4233941,name:"reddek",uniqueSet:!0,hash:"5dbfb4426dea0b0006bd328d",avatar:"https://cdn.beatsaver.com/avatar/177436487086768129.png",type:"DISCORD"},metadata:{bpm:160,duration:207,songName:"Stronger",songSubName:"",songAuthorName:"TheFatRat, Slaydit & Anjulie",levelAuthorName:"Reddek"},stats:{plays:0,downloads:1299,upvotes:938,downvotes:15,score:.9229},uploaded:"2020-04-16T06:37:29.656Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e48afe3d1a2b94f5396f63e32972651495caf034",key:"9b89",state:"Published",createdAt:"2020-04-16T06:37:29.656Z",sageScore:4,diffs:[{njs:18,offset:0,notes:892,bombs:168,obstacles:2648,nps:4.471,length:532,characteristic:"Standard",difficulty:"ExpertPlus",events:3423,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:199.5,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e48afe3d1a2b94f5396f63e32972651495caf034.zip",coverURL:"https://cdn.beatsaver.com/e48afe3d1a2b94f5396f63e32972651495caf034.jpg",previewURL:"https://cdn.beatsaver.com/e48afe3d1a2b94f5396f63e32972651495caf034.mp3"}],createdAt:"2020-04-16T06:37:29.656Z",updatedAt:"2020-04-16T06:37:29.656Z",lastPublishedAt:"2020-04-16T06:37:29.656Z"},{id:"613b",name:"Seraphim On The Ring - Mitchie M ft. Hatsune Miku, Kagamine Rin, KAITO",description:'"Seraphim On The Ring" is a song by Mitchie M about pro wrestling match which Miku and Rin play against Meiko and Luka. The ringside commentator is KAITO and the referee is Len.',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:175,duration:223,songName:"Seraphim On The Ring",songSubName:"",songAuthorName:"Mitchie M ft. Hatsune Miku, Kagamine Rin, KAITO",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:2013,upvotes:992,downvotes:17,score:.9229},uploaded:"2019-09-04T09:20:18.405Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"605da022c1e9688e122688e3abf3ddc8321299a8",key:"613b",state:"Published",createdAt:"2019-09-04T09:20:18.405Z",sageScore:5,diffs:[{njs:12,offset:0,notes:679,bombs:0,obstacles:33,nps:3.215,length:616,characteristic:"Standard",difficulty:"Hard",events:5807,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:211.2,paritySummary:{errors:54,warns:41,resets:0}},{njs:14,offset:0,notes:913,bombs:0,obstacles:27,nps:4.323,length:616,characteristic:"Standard",difficulty:"Expert",events:5807,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:211.2,paritySummary:{errors:20,warns:21,resets:0}},{njs:16,offset:0,notes:1038,bombs:0,obstacles:30,nps:4.915,length:616,characteristic:"Standard",difficulty:"ExpertPlus",events:5807,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:211.2,paritySummary:{errors:33,warns:43,resets:0}}],downloadURL:"https://cdn.beatsaver.com/605da022c1e9688e122688e3abf3ddc8321299a8.zip",coverURL:"https://cdn.beatsaver.com/605da022c1e9688e122688e3abf3ddc8321299a8.jpg",previewURL:"https://cdn.beatsaver.com/605da022c1e9688e122688e3abf3ddc8321299a8.mp3"}],createdAt:"2019-09-04T09:20:18.405Z",updatedAt:"2019-09-04T09:20:18.405Z",lastPublishedAt:"2019-09-04T09:20:18.405Z"},{id:"199e",name:"Super Mario 64 - Dire, Dire Docks (Wisp X Remix)",description:'Normal/Expert/Expert+ | BPM: 130 | Length: 3:23 | Notes: 376/688/1020\r\n\r\nI was just wondering how "Dire, Dire Docks" would look like in Beat Saber..\r\nThis is the result!\r\n\r\nLighting done with "Lightmap V2"\r\n\r\n12th Map.\r\n\r\nPreview:\r\nhttps://www.youtube.com/watch?v=dRprfDRvJJY\r\nSong:\r\nhttps://www.youtube.com/watch?v=56eIZKyhM6c',uploader:{id:4285825,name:"fefeland",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f3bb",avatar:"https://cdn.beatsaver.com/avatar/119360573191225344.png",type:"DISCORD"},metadata:{bpm:130,duration:203,songName:"Dire, Dire Docks (Wisp X Remix)",songSubName:"Super Mario 64",songAuthorName:"FEFELAND",levelAuthorName:"fefeland"},stats:{plays:0,downloads:2005,upvotes:1351,downvotes:32,score:.9228},uploaded:"2018-10-10T20:02:06Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b8d647a30f15e33d77808f9a143f02e3af6016b4",key:"199e",state:"Published",createdAt:"2018-10-10T20:02:06Z",sageScore:5,diffs:[{njs:8,offset:0,notes:376,bombs:0,obstacles:50,nps:1.958,length:416,characteristic:"Standard",difficulty:"Normal",events:831,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:72,warns:22,resets:0}},{njs:12,offset:0,notes:688,bombs:0,obstacles:51,nps:3.583,length:416,characteristic:"Standard",difficulty:"Expert",events:831,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:46,warns:44,resets:0}},{njs:15,offset:0,notes:1020,bombs:0,obstacles:48,nps:5.313,length:416,characteristic:"Standard",difficulty:"ExpertPlus",events:831,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:36,warns:32,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b8d647a30f15e33d77808f9a143f02e3af6016b4.zip",coverURL:"https://cdn.beatsaver.com/b8d647a30f15e33d77808f9a143f02e3af6016b4.jpg",previewURL:"https://cdn.beatsaver.com/b8d647a30f15e33d77808f9a143f02e3af6016b4.mp3"}],createdAt:"2018-10-10T20:02:06Z",updatedAt:"2018-10-10T20:02:06Z",lastPublishedAt:"2018-10-10T20:02:06Z"},{id:"65bb",name:"TWICE - Feel Special",description:"New Twice map by Aggrogahu and myself. I hope you enjoy it!\n\nKikaeaeon: Expert/Expert+\nAggrogahu: Hard/Normal",uploader:{id:4285107,name:"kikaeaeon",uniqueSet:!0,hash:"5cff0b7498cc5a672c85109b",avatar:"https://cdn.beatsaver.com/avatar/103715469822816256.png",type:"DISCORD"},metadata:{bpm:129,duration:208,songName:"Feel Special",songSubName:"",songAuthorName:"TWICE",levelAuthorName:"KikaeAeon & Aggrogahu"},stats:{plays:0,downloads:5121,upvotes:1156,downvotes:24,score:.9226},uploaded:"2019-09-25T05:14:20.078Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"4644faf2fbb084c248d7e0f8d3592829ec7e19d0",key:"65bb",state:"Published",createdAt:"2019-09-25T05:14:20.078Z",sageScore:4,diffs:[{njs:10,offset:1,notes:351,bombs:0,obstacles:17,nps:1.747,length:432,characteristic:"Standard",difficulty:"Normal",events:1268,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.93,paritySummary:{errors:58,warns:30,resets:0}},{njs:10,offset:1,notes:552,bombs:0,obstacles:17,nps:2.747,length:432,characteristic:"Standard",difficulty:"Hard",events:1268,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.93,paritySummary:{errors:51,warns:36,resets:0}},{njs:12,offset:0,notes:762,bombs:0,obstacles:16,nps:3.792,length:432,characteristic:"Standard",difficulty:"Expert",events:1266,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.93,paritySummary:{errors:16,warns:18,resets:0}},{njs:16,offset:0,notes:952,bombs:0,obstacles:36,nps:4.738,length:432,characteristic:"Standard",difficulty:"ExpertPlus",events:1266,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.93,paritySummary:{errors:9,warns:9,resets:0}}],downloadURL:"https://cdn.beatsaver.com/4644faf2fbb084c248d7e0f8d3592829ec7e19d0.zip",coverURL:"https://cdn.beatsaver.com/4644faf2fbb084c248d7e0f8d3592829ec7e19d0.jpg",previewURL:"https://cdn.beatsaver.com/4644faf2fbb084c248d7e0f8d3592829ec7e19d0.mp3"}],createdAt:"2019-09-25T05:14:20.078Z",updatedAt:"2019-09-25T05:14:20.078Z",lastPublishedAt:"2019-09-25T05:14:20.078Z"},{id:"48ff",name:"Sewayaki Kisune no Senko-san OP - Koyoi MofuMofu!!",description:"Twitter: https://twitter.com/Dack731",uploader:{id:4285250,name:"dack",uniqueSet:!0,hash:"5cff0b7598cc5a672c852c6f",avatar:"https://cdn.beatsaver.com/avatar/297344689798119424.png",type:"DISCORD"},metadata:{bpm:103,duration:91,songName:"Koyoi MofuMofu",songSubName:"Agasa.K",songAuthorName:"Dack",levelAuthorName:"Dack"},stats:{plays:0,downloads:2294,upvotes:1317,downvotes:31,score:.9225},uploaded:"2019-04-28T12:14:58Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"52cba6c4432bca35081296a7e98be638f3f69c65",key:"48ff",state:"Published",createdAt:"2019-04-28T12:14:58Z",sageScore:2,diffs:[{njs:12,offset:0,notes:177,bombs:0,obstacles:0,nps:2.074,length:146.5,characteristic:"Standard",difficulty:"Normal",events:146,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.34,paritySummary:{errors:10,warns:5,resets:0}},{njs:13,offset:0,notes:256,bombs:0,obstacles:0,nps:3,length:146.5,characteristic:"Standard",difficulty:"Hard",events:146,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.34,paritySummary:{errors:13,warns:13,resets:0}},{njs:14,offset:0,notes:300,bombs:0,obstacles:0,nps:3.515,length:146.5,characteristic:"Standard",difficulty:"Expert",events:146,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.34,paritySummary:{errors:6,warns:7,resets:0}},{njs:15,offset:0,notes:315,bombs:0,obstacles:0,nps:3.691,length:146.5,characteristic:"Standard",difficulty:"ExpertPlus",events:146,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.34,paritySummary:{errors:7,warns:8,resets:0}}],downloadURL:"https://cdn.beatsaver.com/52cba6c4432bca35081296a7e98be638f3f69c65.zip",coverURL:"https://cdn.beatsaver.com/52cba6c4432bca35081296a7e98be638f3f69c65.jpg",previewURL:"https://cdn.beatsaver.com/52cba6c4432bca35081296a7e98be638f3f69c65.mp3"}],createdAt:"2019-04-28T12:14:58Z",updatedAt:"2019-04-28T12:14:58Z",lastPublishedAt:"2019-04-28T12:14:58Z"},{id:"27f6",name:'We All Lift Together - Keith Power (From "Warframe")',description:"Welcome to Fortuna. Explore the frigid landscape of Venus populated with new Corpus threats, subterranean mysteries and an ecosystem on the brink of destruction.\r\nPlaying movie (Hard) : https://youtu.be/M1s6G4ib5Ew",uploader:{id:43083,name:"trgsonic",uniqueSet:!0,hash:"5cff0b7598cc5a672c852c78",avatar:"https://www.gravatar.com/avatar/5cff0b7598cc5a672c852c78?d=retro",type:"SIMPLE"},metadata:{bpm:134,duration:155,songName:"We All Lift Together",songSubName:"",songAuthorName:"Keith Power",levelAuthorName:"TRGsonic"},stats:{plays:0,downloads:1436,upvotes:736,downvotes:8,score:.9224},uploaded:"2018-12-25T14:00:28Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"050d447ebe73685cdb5515867dd7f065e0001fb7",key:"27f6",state:"Published",createdAt:"2018-12-25T14:00:28Z",sageScore:6,diffs:[{njs:10,offset:0,notes:197,bombs:0,obstacles:24,nps:1.375,length:320,characteristic:"Standard",difficulty:"Easy",events:144,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:143.284,paritySummary:{errors:37,warns:23,resets:0}},{njs:10.01,offset:0,notes:304,bombs:6,obstacles:23,nps:2.122,length:320,characteristic:"Standard",difficulty:"Normal",events:144,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:143.284,paritySummary:{errors:30,warns:21,resets:0}},{njs:10.05,offset:0,notes:360,bombs:8,obstacles:24,nps:2.513,length:320,characteristic:"Standard",difficulty:"Hard",events:144,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:143.284,paritySummary:{errors:34,warns:29,resets:0}}],downloadURL:"https://cdn.beatsaver.com/050d447ebe73685cdb5515867dd7f065e0001fb7.zip",coverURL:"https://cdn.beatsaver.com/050d447ebe73685cdb5515867dd7f065e0001fb7.jpg",previewURL:"https://cdn.beatsaver.com/050d447ebe73685cdb5515867dd7f065e0001fb7.mp3"}],createdAt:"2018-12-25T14:00:28Z",updatedAt:"2018-12-25T14:00:28Z",lastPublishedAt:"2018-12-25T14:00:28Z"},{id:"7b5f",name:"My Stick! - Bad Lip Reading (Standard, 90 degree)",description:"Happy New Year 2020! I am a huge fan of the Bad Lip Reading Star Wars songs. I probably account for half of the 100s of millions of views they have received on youtube! If you're not familiar with them, go check them out! This newest one - My Stick! - just came out a few days ago and as soon as I heard it, I wanted to map it. So here it is - Easy, Normal, Hard, Expert, and Expert 90 degree difficulties available. \n\nBig thanks to my playtesters Maybeemae, MajorPickle, and Brentastic! You guys really help put the polish on these maps!\n\nhttps://www.youtube.com/watch?v=372GmcbFwCI",uploader:{id:78593,name:"techbutterfly",uniqueSet:!0,hash:"5cff0b7798cc5a672c8566f7",avatar:"https://cdn.beatsaver.com/avatar/527111497617506304.png",type:"DISCORD"},metadata:{bpm:126,duration:205,songName:"My Stick",songSubName:"",songAuthorName:"Bad Lip Reading",levelAuthorName:"TechButterfly"},stats:{plays:0,downloads:2769,upvotes:1048,downvotes:20,score:.9223},uploaded:"2020-01-01T01:33:52.347Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"4837ebdf91168a5e26eb5beebda03ebef31e6841",key:"7b5f",state:"Published",createdAt:"2020-01-01T01:33:52.347Z",sageScore:4,diffs:[{njs:8,offset:0,notes:173,bombs:14,obstacles:38,nps:.881,length:412.5,characteristic:"Standard",difficulty:"Easy",events:795,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:196.429,paritySummary:{errors:47,warns:21,resets:5}},{njs:10,offset:0,notes:292,bombs:22,obstacles:38,nps:1.458,length:420.5,characteristic:"Standard",difficulty:"Normal",events:795,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.238,paritySummary:{errors:48,warns:72,resets:10}},{njs:13,offset:0,notes:572,bombs:22,obstacles:38,nps:2.857,length:420.5,characteristic:"Standard",difficulty:"Hard",events:795,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.238,paritySummary:{errors:33,warns:84,resets:10}},{njs:13,offset:0,notes:683,bombs:22,obstacles:38,nps:3.411,length:420.5,characteristic:"Standard",difficulty:"Expert",events:795,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.238,paritySummary:{errors:31,warns:31,resets:9}},{njs:13,offset:0,notes:577,bombs:22,obstacles:7,nps:2.882,length:420.5,characteristic:"90Degree",difficulty:"Expert",events:1050,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.238,paritySummary:{errors:34,warns:85,resets:10}}],downloadURL:"https://cdn.beatsaver.com/4837ebdf91168a5e26eb5beebda03ebef31e6841.zip",coverURL:"https://cdn.beatsaver.com/4837ebdf91168a5e26eb5beebda03ebef31e6841.jpg",previewURL:"https://cdn.beatsaver.com/4837ebdf91168a5e26eb5beebda03ebef31e6841.mp3"}],createdAt:"2020-01-01T01:33:52.347Z",updatedAt:"2020-01-01T01:33:52.347Z",lastPublishedAt:"2020-01-01T01:33:52.347Z"},{id:"9137",name:"Uno - Little Big",description:"https://www.youtube.com/watch?v=8hiHXbvsT8o",uploader:{id:4285760,name:"okdisplay",uniqueSet:!0,hash:"5cff0b7398cc5a672c84eda2",avatar:"https://cdn.beatsaver.com/avatar/404020982676717570.png",type:"DISCORD"},metadata:{bpm:142,duration:163,songName:"UNO",songSubName:"",songAuthorName:"Little Big",levelAuthorName:"OkDisplay"},stats:{plays:0,downloads:1734,upvotes:997,downvotes:18,score:.9223},uploaded:"2020-03-18T02:49:03.418Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"359433e3d701cc06b47ac0d7fbb9b077cd970c01",key:"9137",state:"Published",createdAt:"2020-03-18T02:49:03.418Z",sageScore:4,diffs:[{njs:15,offset:0,notes:706,bombs:0,obstacles:0,nps:4.54,length:368,characteristic:"Standard",difficulty:"Expert",events:1500,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:155.493,paritySummary:{errors:13,warns:14,resets:0}},{njs:17,offset:0,notes:705,bombs:9,obstacles:23,nps:4.534,length:368,characteristic:"Standard",difficulty:"ExpertPlus",events:1464,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:155.493,paritySummary:{errors:11,warns:8,resets:0}}],downloadURL:"https://cdn.beatsaver.com/359433e3d701cc06b47ac0d7fbb9b077cd970c01.zip",coverURL:"https://cdn.beatsaver.com/359433e3d701cc06b47ac0d7fbb9b077cd970c01.jpg",previewURL:"https://cdn.beatsaver.com/359433e3d701cc06b47ac0d7fbb9b077cd970c01.mp3"}],createdAt:"2020-03-18T02:49:03.418Z",updatedAt:"2020-03-18T02:49:03.418Z",lastPublishedAt:"2020-03-18T02:49:03.418Z"},{id:"7310",name:"The Struts - Body Talks ft. Kesha",description:"There is a significant lack of The Struts maps out there, so figured I'd get the ball rolling with this one. \n\nThe expert+ map was made by the incredible ConnorJC. He has a great mapping style and regularly uploads charts in the expert to expert+ range. You can check him out here:\nhttps://www.youtube.com/channel/UC_XqKPpfBiWEYZ-dhcKRPBw\nhttps://bsaber.com/members/connorjc/\n\nAll other difficulties are included as well\n\nEnjoy!",uploader:{id:4785,name:"stumi",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f720",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro",type:"SIMPLE"},metadata:{bpm:186,duration:176,songName:"Body Talks",songSubName:"Ft. Kesha",songAuthorName:"The Struts",levelAuthorName:"Stumi & ConnorJC"},stats:{plays:0,downloads:1554,upvotes:760,downvotes:9,score:.9223},uploaded:"2019-12-01T13:43:45.996Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ed72bd798a0d05592ff63a5ad844cdff01a76800",key:"7310",state:"Published",createdAt:"2019-12-01T13:43:45.996Z",sageScore:6,diffs:[{njs:12,offset:0,notes:130,bombs:0,obstacles:54,nps:.766,length:526,characteristic:"Standard",difficulty:"Easy",events:2193,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:169.677,paritySummary:{errors:26,warns:14,resets:0}},{njs:12,offset:0,notes:218,bombs:4,obstacles:60,nps:1.285,length:526,characteristic:"Standard",difficulty:"Normal",events:2193,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:169.677,paritySummary:{errors:37,warns:26,resets:0}},{njs:14,offset:.8,notes:446,bombs:7,obstacles:65,nps:2.614,length:529,characteristic:"Standard",difficulty:"Hard",events:2193,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:170.645,paritySummary:{errors:20,warns:10,resets:5}},{njs:16,offset:.4,notes:704,bombs:22,obstacles:67,nps:4.115,length:530.333,characteristic:"Standard",difficulty:"Expert",events:2193,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:171.075,paritySummary:{errors:5,warns:7,resets:1}},{njs:19,offset:.25,notes:777,bombs:6,obstacles:25,nps:4.566,length:527.5,characteristic:"Standard",difficulty:"ExpertPlus",events:2193,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:170.161,paritySummary:{errors:7,warns:8,resets:2}}],downloadURL:"https://cdn.beatsaver.com/ed72bd798a0d05592ff63a5ad844cdff01a76800.zip",coverURL:"https://cdn.beatsaver.com/ed72bd798a0d05592ff63a5ad844cdff01a76800.jpg",previewURL:"https://cdn.beatsaver.com/ed72bd798a0d05592ff63a5ad844cdff01a76800.mp3"}],createdAt:"2019-12-01T13:43:45.996Z",updatedAt:"2019-12-01T13:43:45.996Z",lastPublishedAt:"2019-12-01T13:43:45.996Z"},{id:"38ec",name:"The Bad Touch - Bloodhound Gang - BT90",description:'This map is part of a 90s songpack. Search "BT90" to find all the songs in the songpack.\r\nMap is created by Heisenberg_IRL. Check out https://www.twitch.tv/heisenberg_irl\r\nLights are made by XypherOrion. Check out https://www.twitch.tv/xypherorion\r\n\r\nSpecial thanks to Fafurion for feedback and playtesting',uploader:{id:27983,name:"heisenbergirl",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ec30",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ec30?d=retro",type:"SIMPLE"},metadata:{bpm:123,duration:234,songName:"The Bad Touch",songSubName:"Bloodhound Gang [BT90]",songAuthorName:"Heisenberg & XypherOrion",levelAuthorName:"heisenbergirl"},stats:{plays:0,downloads:5177,upvotes:2043,downvotes:65,score:.9223},uploaded:"2019-02-23T13:21:25Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d5e0ebff74ee79f517bbb580f3c55e389b09bfa0",key:"38ec",state:"Published",createdAt:"2019-02-23T13:21:25Z",sageScore:6,diffs:[{njs:14,offset:0,notes:809,bombs:0,obstacles:12,nps:3.694,length:449,characteristic:"Standard",difficulty:"Expert",events:2108,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.024,paritySummary:{errors:55,warns:110,resets:0}},{njs:16,offset:0,notes:1062,bombs:2,obstacles:0,nps:4.849,length:449,characteristic:"Standard",difficulty:"ExpertPlus",events:2108,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.024,paritySummary:{errors:113,warns:137,resets:2}}],downloadURL:"https://cdn.beatsaver.com/d5e0ebff74ee79f517bbb580f3c55e389b09bfa0.zip",coverURL:"https://cdn.beatsaver.com/d5e0ebff74ee79f517bbb580f3c55e389b09bfa0.jpg",previewURL:"https://cdn.beatsaver.com/d5e0ebff74ee79f517bbb580f3c55e389b09bfa0.mp3"}],createdAt:"2019-02-23T13:21:25Z",updatedAt:"2019-02-23T13:21:25Z",lastPublishedAt:"2019-02-23T13:21:25Z"},{id:"abbf",name:"PSYQUI feat. Marpril - Girly Cupid [Noodle Extensions]",description:"Expert Preview: https://www.youtube.com/watch?v=oD8JbrtlhZc\n\nSubmission #47 | 2nd place in the Building Blocks 2020 mapping contest. I hope you enjoy my first dive into Noodle Extensions and Chroma. This was a blast to make!\n\nComments? Like it? Hate it? Let me know on Discord @Bloodcloak#5725 !",uploader:{id:71661,name:"bloodcloak",uniqueSet:!0,hash:"5cff0b7698cc5a672c8551d3",avatar:"https://cdn.beatsaver.com/avatar/205707707187986442.png",type:"DISCORD"},metadata:{bpm:133,duration:244,songName:"Girly Cupid",songSubName:"feat. Marpril",songAuthorName:"PSYQUI",levelAuthorName:"Bloodcloak"},stats:{plays:0,downloads:4637,upvotes:1327,downvotes:32,score:.9222},uploaded:"2020-05-29T01:13:29.257Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"09083ec4540755cac095737c4af6af2910c4e856",key:"abbf",state:"Published",createdAt:"2020-05-29T01:13:29.257Z",sageScore:3,diffs:[{njs:18,offset:-.2,notes:764,bombs:0,obstacles:36331,nps:3.232,length:524,characteristic:"Standard",difficulty:"Expert",events:3539,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:236.391,paritySummary:{errors:28,warns:16,resets:0}}],downloadURL:"https://cdn.beatsaver.com/09083ec4540755cac095737c4af6af2910c4e856.zip",coverURL:"https://cdn.beatsaver.com/09083ec4540755cac095737c4af6af2910c4e856.jpg",previewURL:"https://cdn.beatsaver.com/09083ec4540755cac095737c4af6af2910c4e856.mp3"}],createdAt:"2020-05-29T01:13:29.257Z",updatedAt:"2020-05-29T01:13:29.257Z",lastPublishedAt:"2020-05-29T01:13:29.257Z"},{id:"1f90",name:"RIOT - Overkill",description:"",uploader:{id:408,name:"nuketime",uniqueSet:!0,hash:"5cff0b7498cc5a672c8507f7",avatar:"https://cdn.beatsaver.com/avatar/175811186007343104.png",type:"DISCORD"},metadata:{bpm:174,duration:308,songName:"Overkill",songSubName:"RIOT",songAuthorName:"Nuketime",levelAuthorName:"Nuketime"},stats:{plays:0,downloads:7566,upvotes:8186,downvotes:415,score:.9222},uploaded:"2018-11-10T20:57:38Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"2fddb136bda7f9e29b4cb6621d6d8e0f8a43b126",key:"1f90",state:"Published",createdAt:"2018-11-10T20:57:38Z",sageScore:5,diffs:[{njs:17,offset:0,notes:1812,bombs:108,obstacles:132,nps:6.121,length:858.5,characteristic:"Standard",difficulty:"ExpertPlus",events:3602,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:296.034,paritySummary:{errors:85,warns:90,resets:0},stars:7.32}],downloadURL:"https://cdn.beatsaver.com/2fddb136bda7f9e29b4cb6621d6d8e0f8a43b126.zip",coverURL:"https://cdn.beatsaver.com/2fddb136bda7f9e29b4cb6621d6d8e0f8a43b126.jpg",previewURL:"https://cdn.beatsaver.com/2fddb136bda7f9e29b4cb6621d6d8e0f8a43b126.mp3"}],createdAt:"2018-11-10T20:57:38Z",updatedAt:"2018-11-10T20:57:38Z",lastPublishedAt:"2018-11-10T20:57:38Z"},{id:"58e",name:"History Maker - Dean Fujioka",description:"Expert / Hard / Normal | Get your Beat Saber -- on ICE!!! The lighting for this is top notch ;)\r\n\r\nVideo: https://youtu.be/ZS8YwPvKLgw\r\n\r\nThis map is best practice compliant: https://bit.ly/2LjbURw",uploader:{id:44595,name:"awfulnaut",uniqueSet:!0,hash:"5cff0b7398cc5a672c84edac",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84edac?d=retro",type:"SIMPLE"},metadata:{bpm:201,duration:187,songName:"History Maker",songSubName:"Dean Fujioka",songAuthorName:"Awfulnaut",levelAuthorName:"awfulnaut"},stats:{plays:0,downloads:2623,upvotes:1327,downvotes:32,score:.9222},uploaded:"2018-06-17T19:41:50Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"998f9b0a3e8b85ad697e8a7aa2c8b7d1f70936ce",key:"58e",state:"Published",createdAt:"2018-06-17T19:41:50Z",sageScore:6,diffs:[{njs:10,offset:0,notes:513,bombs:12,obstacles:27,nps:2.836,length:606,characteristic:"Standard",difficulty:"Normal",events:1153,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.896,paritySummary:{errors:86,warns:4,resets:0},stars:1.77},{njs:10,offset:0,notes:566,bombs:0,obstacles:27,nps:3.129,length:606,characteristic:"Standard",difficulty:"Hard",events:1153,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.896,paritySummary:{errors:47,warns:48,resets:0}},{njs:10,offset:0,notes:566,bombs:0,obstacles:27,nps:3.129,length:606,characteristic:"Standard",difficulty:"Expert",events:1153,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.896,paritySummary:{errors:43,warns:35,resets:0}}],downloadURL:"https://cdn.beatsaver.com/998f9b0a3e8b85ad697e8a7aa2c8b7d1f70936ce.zip",coverURL:"https://cdn.beatsaver.com/998f9b0a3e8b85ad697e8a7aa2c8b7d1f70936ce.jpg",previewURL:"https://cdn.beatsaver.com/998f9b0a3e8b85ad697e8a7aa2c8b7d1f70936ce.mp3"}],createdAt:"2018-06-17T19:41:50Z",updatedAt:"2018-06-17T19:41:50Z",lastPublishedAt:"2018-06-17T19:41:50Z"},{id:"14bd",name:"Starship - We Built This City",description:"Collab map between BennyDaBeast, Rustic and GreatYazer\r\nExper / Hard / Normal\r\nhttps://www.youtube.com/watch?v=KnLnUBIbfbM\r\nhttps://streamable.com/s8xvc",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:143,duration:298,songName:"We Built this City",songSubName:"Starship",songAuthorName:"GreatYazer, Rustic, BennyDaBeast",levelAuthorName:"rustic"},stats:{plays:0,downloads:9482,upvotes:3568,downvotes:145,score:.9221},uploaded:"2018-09-12T19:05:18Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"477fac9561e8931c7efaf49faa065611348f159d",key:"14bd",state:"Published",createdAt:"2018-09-12T19:05:18Z",sageScore:5,diffs:[{njs:10,offset:0,notes:472,bombs:26,obstacles:32,nps:1.64,length:686,characteristic:"Standard",difficulty:"Normal",events:1843,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:287.832,paritySummary:{errors:64,warns:56,resets:0},stars:1.03},{njs:10,offset:0,notes:759,bombs:26,obstacles:34,nps:2.633,length:687,characteristic:"Standard",difficulty:"Hard",events:1843,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:288.252,paritySummary:{errors:69,warns:90,resets:0},stars:1.66},{njs:11,offset:0,notes:967,bombs:26,obstacles:36,nps:3.355,length:687,characteristic:"Standard",difficulty:"Expert",events:1843,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:288.252,paritySummary:{errors:71,warns:126,resets:0}}],downloadURL:"https://cdn.beatsaver.com/477fac9561e8931c7efaf49faa065611348f159d.zip",coverURL:"https://cdn.beatsaver.com/477fac9561e8931c7efaf49faa065611348f159d.jpg",previewURL:"https://cdn.beatsaver.com/477fac9561e8931c7efaf49faa065611348f159d.mp3"}],createdAt:"2018-09-12T19:05:18Z",updatedAt:"2018-09-12T19:05:18Z",lastPublishedAt:"2018-09-12T19:05:18Z"},{id:"10e6",name:"We Wont Be Alone",description:"And here it is! \r\n\r\nAnother highly requested map!\r\n\r\nEnjoy to your hearts content!\r\n\r\n(P.s Thanks to everyone who supports me in my mapping endeavors and appreciate my work! it means a lot to me!)",uploader:{id:4289111,name:"blackblazon",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ef34",avatar:"https://cdn.beatsaver.com/avatar/127162370538733568.png",type:"DISCORD"},metadata:{bpm:175,duration:236,songName:"We Wont Be Alone",songSubName:"Feint",songAuthorName:"BlackBlazon",levelAuthorName:"blackblazon"},stats:{plays:0,downloads:1611,upvotes:1677,downvotes:48,score:.9221},uploaded:"2018-08-20T13:09:23Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"fdb563492b79e57464424f73aa95ccc719f44576",key:"10e6",state:"Published",createdAt:"2018-08-20T13:09:23Z",sageScore:5,diffs:[{njs:10,offset:0,notes:1017,bombs:0,obstacles:0,nps:4.461,length:665,characteristic:"Standard",difficulty:"Expert",events:1043,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:228,paritySummary:{errors:15,warns:5,resets:0}},{njs:15,offset:0,notes:1017,bombs:0,obstacles:0,nps:4.461,length:665,characteristic:"Standard",difficulty:"ExpertPlus",events:1043,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:228,paritySummary:{errors:15,warns:5,resets:0}}],downloadURL:"https://cdn.beatsaver.com/fdb563492b79e57464424f73aa95ccc719f44576.zip",coverURL:"https://cdn.beatsaver.com/fdb563492b79e57464424f73aa95ccc719f44576.jpg",previewURL:"https://cdn.beatsaver.com/fdb563492b79e57464424f73aa95ccc719f44576.mp3"}],createdAt:"2018-08-20T13:09:23Z",updatedAt:"2018-08-20T13:09:23Z",lastPublishedAt:"2018-08-20T13:09:23Z"},{id:"1a0b6",name:"[Electro Swing Pack] The Electric Swing Circus - Empires",description:"Nixie Presents: Electro Swing Pack!\n\n10 electro swing songs with expert and expert+ diffs to make your booty swing!\n\nGet The Pack: \nhttps://bsaber.com/electro-swing-pack/\n\nMap Gameplay:\nhttps://youtu.be/WJy6_2cTPYg\n\nComplete Pack Playthrough:\nhttps://youtu.be/yj9rw4MEh7s\n\nHeyya! After looking for some dancey electro swing maps, I noticed that there barely are any!\nSo I took matters into my own hands, learning mapping basically from scratch,\nscrapping my first failed attempts and then finally making a map that was good.\nI found it so fun that I ended up making 9 more maps,\nand fine tuned them with the help of the testplayers in BSMG,\nas well as the lovely curators from the bsaber discord.\n\nHuge thanks in particular to:\nMonstor, Bearly, Noxn, Bullet, Vaser888, Tocxx, Jafdy, Storm Knight and Pixelguy!\n\nIf you want to talk to me, here is my Discord:\nNixie.Korten#6944",uploader:{id:4286374,name:"nixiekorten",uniqueSet:!0,hash:"6096752e12772e0006e2f7e6",avatar:"https://cdn.beatsaver.com/avatar/840550221690699776.png",type:"DISCORD"},metadata:{bpm:120,duration:173,songName:"Empires",songSubName:"",songAuthorName:"The Electric Swing Circus",levelAuthorName:"Nixie.Korten"},stats:{plays:0,downloads:12715,upvotes:577,downvotes:3,score:.922},uploaded:"2021-07-08T15:24:55.769Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"cecc89118b3a75ea7d65ceff5949b3ef19fea716",key:"1a0b6",state:"Published",createdAt:"2021-07-08T15:24:55.769Z",sageScore:4,diffs:[{njs:16,offset:-.5,notes:522,bombs:0,obstacles:24,nps:3.173,length:329,characteristic:"Standard",difficulty:"Expert",events:2051,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:164.5,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:.25,notes:823,bombs:0,obstacles:0,nps:5.003,length:329,characteristic:"Standard",difficulty:"ExpertPlus",events:2051,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:164.5,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/cecc89118b3a75ea7d65ceff5949b3ef19fea716.zip",coverURL:"https://cdn.beatsaver.com/cecc89118b3a75ea7d65ceff5949b3ef19fea716.jpg",previewURL:"https://cdn.beatsaver.com/cecc89118b3a75ea7d65ceff5949b3ef19fea716.mp3"}],createdAt:"2021-07-08T15:24:55.769Z",updatedAt:"2021-07-08T15:24:55.769Z",lastPublishedAt:"2021-07-08T15:24:55.769Z"},{id:"97ec",name:"TheFatRat ft. Laura Brehm - MAYDAY (Nightcore Mix)",description:"#214\n\nYoutube Preview : https://youtu.be/YuAvugqwLiA",uploader:{id:4284588,name:"rigid",uniqueSet:!0,hash:"5cff0b7598cc5a672c852224",avatar:"https://cdn.beatsaver.com/avatar/295613108947386368.png",type:"DISCORD"},metadata:{bpm:173,duration:217,songName:"MAYDAY (Nightcore Mix)",songSubName:"",songAuthorName:"TheFatRat ft. Laura Brehm",levelAuthorName:"Rigid"},stats:{plays:0,downloads:1384,upvotes:782,downvotes:10,score:.922},uploaded:"2020-04-06T03:03:12.881Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"596010af1d16182372e2145d3b1687ecfed46387",key:"97ec",state:"Published",createdAt:"2020-04-06T03:03:12.881Z",sageScore:4,diffs:[{njs:16,offset:0,notes:751,bombs:30,obstacles:128,nps:3.599,length:600,characteristic:"Standard",difficulty:"Expert",events:2311,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:208.092,paritySummary:{errors:0,warns:0,resets:5}}],downloadURL:"https://cdn.beatsaver.com/596010af1d16182372e2145d3b1687ecfed46387.zip",coverURL:"https://cdn.beatsaver.com/596010af1d16182372e2145d3b1687ecfed46387.jpg",previewURL:"https://cdn.beatsaver.com/596010af1d16182372e2145d3b1687ecfed46387.mp3"}],createdAt:"2020-04-06T03:03:12.881Z",updatedAt:"2020-04-06T03:03:12.881Z",lastPublishedAt:"2020-04-06T03:03:12.881Z"},{id:"33c2",name:"Drive By - Train",description:'Another non weeb song, "Drive by" by Train, one of my favorite songs from the early days. Brought it from Itunes a long time ago so it\'s the highest quality file you can get :)',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:122,duration:196,songName:"Drive By",songSubName:"Train",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:3897,upvotes:1087,downvotes:22,score:.922},uploaded:"2019-02-05T09:08:27Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5d3f6821934945c581882c067ef44d7e8c086423",key:"33c2",state:"Published",createdAt:"2019-02-05T09:08:27Z",sageScore:6,diffs:[{njs:15,offset:0,notes:895,bombs:0,obstacles:6,nps:4.795,length:379.5,characteristic:"Standard",difficulty:"Expert",events:1734,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:186.639,paritySummary:{errors:67,warns:85,resets:0}}],downloadURL:"https://cdn.beatsaver.com/5d3f6821934945c581882c067ef44d7e8c086423.zip",coverURL:"https://cdn.beatsaver.com/5d3f6821934945c581882c067ef44d7e8c086423.jpg",previewURL:"https://cdn.beatsaver.com/5d3f6821934945c581882c067ef44d7e8c086423.mp3"}],createdAt:"2019-02-05T09:08:27Z",updatedAt:"2019-02-05T09:08:27Z",lastPublishedAt:"2019-02-05T09:08:27Z"},{id:"edf",name:"VORACITY",description:"enjoy :)",uploader:{id:4285521,name:"ejiejidayo",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fc58",avatar:"https://cdn.beatsaver.com/avatar/224894241279574016.png",type:"DISCORD"},metadata:{bpm:200,duration:221,songName:"VORACITY",songSubName:"OVERLOAD III OP",songAuthorName:"ejiejidayo",levelAuthorName:"ejiejidayo"},stats:{plays:0,downloads:4278,upvotes:3077,downvotes:119,score:.922},uploaded:"2018-08-10T09:36:58Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7e096457e053dc0ee70fb5d08ed10332e5d5b75b",key:"edf",state:"Published",createdAt:"2018-08-10T09:36:58Z",sageScore:4,diffs:[{njs:10,offset:0,notes:778,bombs:37,obstacles:10,nps:3.723,length:696.5,characteristic:"Standard",difficulty:"Expert",events:827,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:208.95,paritySummary:{errors:117,warns:85,resets:3}}],downloadURL:"https://cdn.beatsaver.com/7e096457e053dc0ee70fb5d08ed10332e5d5b75b.zip",coverURL:"https://cdn.beatsaver.com/7e096457e053dc0ee70fb5d08ed10332e5d5b75b.jpg",previewURL:"https://cdn.beatsaver.com/7e096457e053dc0ee70fb5d08ed10332e5d5b75b.mp3"}],createdAt:"2018-08-10T09:36:58Z",updatedAt:"2018-08-10T09:36:58Z",lastPublishedAt:"2018-08-10T09:36:58Z"},{id:"4f55",name:"Setting Sail, Coming Home (Bastion OST) - Darren Korb",description:"I remade my first map. Now with 75% less mid notes, and 300% more difficulty options! Disclaimer: Easy difficulty is actually Normal.\nSetting Sail, Coming Home is the credits theme for the game Bastion by Supergiant Games. It features vocals by Ashley Barrett and Darren Korb, who sing the verses of Zia and Zulf, respectively. As there are two vocalists in this song, I made two Normal difficulties, which each follow a different vocalist. The Hard and Expert difficulties follow both at the same time. Expert is mostly just a bit more fleshed out Hard, it's not too much more difficult.\nDefinitely check out this game if you haven't played it already.\nThanks to the playtesters Fruhead and CyanSnow on the modding Discord for testing this one.\nSee it played here:\nZia: https://youtu.be/WCcH3Sd6n-Y\nZulf: https://youtu.be/vcu_FX3c3t0\nHard: https://youtu.be/zUvWu9XglNA\nExpert: https://youtu.be/s2E2uvX5lJ4",uploader:{id:12233,name:"wolfb",uniqueSet:!0,hash:"5cff0b7698cc5a672c854e4f",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c854e4f?d=retro",type:"SIMPLE"},metadata:{bpm:120,duration:164,songName:"Setting Sail, Coming Home",songSubName:"Darren Korb",songAuthorName:"Wolfb",levelAuthorName:"wolfb"},stats:{plays:0,downloads:1272,upvotes:666,downvotes:6,score:.9219},uploaded:"2019-05-27T11:55:36Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"df2178c8d5cfa459861c263934e6a598b15a5452",key:"4f55",state:"Published",createdAt:"2019-05-27T11:55:36Z",sageScore:5,diffs:[{njs:10,offset:0,notes:251,bombs:0,obstacles:11,nps:1.569,length:320,characteristic:"Standard",difficulty:"Easy",events:1099,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:160,paritySummary:{errors:27,warns:5,resets:0}},{njs:10,offset:0,notes:242,bombs:0,obstacles:11,nps:1.513,length:320,characteristic:"Standard",difficulty:"Normal",events:1099,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:160,paritySummary:{errors:26,warns:7,resets:0}},{njs:12,offset:0,notes:368,bombs:0,obstacles:11,nps:2.3,length:320,characteristic:"Standard",difficulty:"Hard",events:1102,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:160,paritySummary:{errors:27,warns:36,resets:0}},{njs:14,offset:0,notes:444,bombs:0,obstacles:11,nps:2.775,length:320,characteristic:"Standard",difficulty:"Expert",events:1104,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:160,paritySummary:{errors:17,warns:37,resets:0}}],downloadURL:"https://cdn.beatsaver.com/df2178c8d5cfa459861c263934e6a598b15a5452.zip",coverURL:"https://cdn.beatsaver.com/df2178c8d5cfa459861c263934e6a598b15a5452.jpg",previewURL:"https://cdn.beatsaver.com/df2178c8d5cfa459861c263934e6a598b15a5452.mp3"}],createdAt:"2019-05-27T11:55:36Z",updatedAt:"2019-05-27T11:55:36Z",lastPublishedAt:"2019-05-27T11:55:36Z"},{id:"1f03",name:"Monster - Skillet (Kole Edit)",description:"2018-11-08: Reupload because of ranking! Scoreboards are unaffected.\r\n\r\nMonster by hard rock band Skillet was a request I got and I found it worthy and fun to make into a Beat Saber map, so here it is!\r\nSong has been edited and re-arranged to be tighter and not too repetitive.\r\n\r\nPreview:\r\nhttps://youtu.be/avTEevEonOA\r\n\r\nBPM: 135\r\nDuration: 1:52\r\nEasy, Normal, Hard and Expert difficulties.\r\n\r\nEasy: 247, 8 obstacles, 4 mines\r\nNormal: 300 notes, 8 obstacles, 8 mines\r\nHard: 423 notes, 8 obstacles, 8 mines\r\nExpert: 437 notes, 8 obstacles, 8 mines\r\n\r\nThanks to Edzo, RaZn, VenclaireVR, squeaksies and Todokete for playtesting!\r\n\r\nEnjoy!",uploader:{id:4285318,name:"kolezan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fcbb",avatar:"https://cdn.beatsaver.com/avatar/220513618763055106.png",type:"DISCORD"},metadata:{bpm:135,duration:112,songName:"Monster",songSubName:"Skillet",songAuthorName:"Kolezan",levelAuthorName:"Kolezan"},stats:{plays:0,downloads:8892,upvotes:4266,downvotes:185,score:.9219},uploaded:"2018-11-08T21:27:23Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5730ecc93a6bc9147bda83f7975791a03ba5b90b",key:"1f03",state:"Published",createdAt:"2018-11-08T21:27:23Z",sageScore:4,diffs:[{njs:10.5,offset:0,notes:247,bombs:4,obstacles:8,nps:2.365,length:235,characteristic:"Standard",difficulty:"Easy",events:627,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:104.444,paritySummary:{errors:47,warns:7,resets:2}},{njs:10.5,offset:0,notes:300,bombs:8,obstacles:8,nps:2.872,length:235,characteristic:"Standard",difficulty:"Normal",events:627,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:104.444,paritySummary:{errors:32,warns:20,resets:0}},{njs:11,offset:0,notes:423,bombs:8,obstacles:8,nps:4.05,length:235,characteristic:"Standard",difficulty:"Hard",events:627,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:104.444,paritySummary:{errors:77,warns:51,resets:0}},{njs:11,offset:0,notes:437,bombs:8,obstacles:8,nps:4.184,length:235,characteristic:"Standard",difficulty:"Expert",events:627,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:104.444,paritySummary:{errors:71,warns:71,resets:0}}],downloadURL:"https://cdn.beatsaver.com/5730ecc93a6bc9147bda83f7975791a03ba5b90b.zip",coverURL:"https://cdn.beatsaver.com/5730ecc93a6bc9147bda83f7975791a03ba5b90b.jpg",previewURL:"https://cdn.beatsaver.com/5730ecc93a6bc9147bda83f7975791a03ba5b90b.mp3"}],createdAt:"2018-11-08T21:27:23Z",updatedAt:"2018-11-08T21:27:23Z",lastPublishedAt:"2018-11-08T21:27:23Z"},{id:"15c6",name:"Ghostbusters - Ray Parker Jr",description:"",uploader:{id:4285018,name:"majorpickle",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f792",avatar:"https://cdn.beatsaver.com/avatar/450358937657671680.png",type:"DISCORD"},metadata:{bpm:115.22,duration:246,songName:"Ghostbusters",songSubName:"",songAuthorName:"Ray Parker Jr.",levelAuthorName:"Majorpickle"},stats:{plays:0,downloads:7046,upvotes:1877,downvotes:58,score:.9219},uploaded:"2018-09-19T02:38:07Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"cc424123372e316bd2fc9439bf0972aded811d04",state:"Published",createdAt:"2021-08-27T12:04:43.371828Z",sageScore:5,diffs:[{njs:10,offset:0,notes:651,bombs:15,obstacles:80,nps:2.828,length:442,characteristic:"Standard",difficulty:"Normal",events:3704,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:230.168,paritySummary:{errors:25,warns:25,resets:4}},{njs:11,offset:0,notes:933,bombs:15,obstacles:80,nps:4.035,length:444.031,characteristic:"Standard",difficulty:"Hard",events:3704,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.226,paritySummary:{errors:54,warns:62,resets:4}},{njs:15,offset:0,notes:933,bombs:15,obstacles:80,nps:4.035,length:444.031,characteristic:"Standard",difficulty:"Expert",events:3704,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.226,paritySummary:{errors:54,warns:62,resets:4}},{njs:13,offset:0,notes:921,bombs:15,obstacles:72,nps:3.983,length:444.031,characteristic:"360Degree",difficulty:"Expert",events:2719,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.226,paritySummary:{errors:51,warns:50,resets:6}}],downloadURL:"https://cdn.beatsaver.com/cc424123372e316bd2fc9439bf0972aded811d04.zip",coverURL:"https://cdn.beatsaver.com/cc424123372e316bd2fc9439bf0972aded811d04.jpg",previewURL:"https://cdn.beatsaver.com/cc424123372e316bd2fc9439bf0972aded811d04.mp3"}],createdAt:"2018-09-19T02:38:07Z",updatedAt:"2021-08-27T12:05:13.876602Z",lastPublishedAt:"2021-08-27T12:04:50.582582Z"},{id:"19e23",name:"Home Free - Sea Shanty Medley",description:"Home Free medleys are amazing. This one was kind of a chat request. Cinema included.",uploader:{id:4287802,name:"origintt",uniqueSet:!0,hash:"5ef66418cb25920006b50ff3",avatar:"https://cdn.beatsaver.com/avatar/414156328072773632.png",type:"DISCORD"},metadata:{bpm:99,duration:236,songName:"Sea Shanty Medley",songSubName:"",songAuthorName:"Home Free",levelAuthorName:"OriginTT"},stats:{plays:0,downloads:6705,upvotes:603,downvotes:4,score:.9218},uploaded:"2021-07-04T19:18:25.991Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1fb8f1cd4a7e05c0a2463e36522298f0b24353ad",key:"19e23",state:"Published",createdAt:"2021-07-04T19:18:25.991Z",sageScore:5,diffs:[{njs:19,offset:0,notes:990,bombs:0,obstacles:20,nps:4.341,length:376.316,characteristic:"Standard",difficulty:"ExpertPlus",events:1464,chroma:!1,me:!1,ne:!1,cinema:!0,seconds:228.07,paritySummary:{errors:5,warns:8,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1fb8f1cd4a7e05c0a2463e36522298f0b24353ad.zip",coverURL:"https://cdn.beatsaver.com/1fb8f1cd4a7e05c0a2463e36522298f0b24353ad.jpg",previewURL:"https://cdn.beatsaver.com/1fb8f1cd4a7e05c0a2463e36522298f0b24353ad.mp3"}],createdAt:"2021-07-04T19:18:25.991Z",updatedAt:"2021-07-04T19:18:25.991Z",lastPublishedAt:"2021-07-04T19:18:25.991Z"},{id:"744f",name:"Fantastic Dreamer (TV Size) [Konosuba! Opening] - Machico",description:"This map was converted from one of my old maps.\n\nFeel free to DM me on discord @Joetastic#2501",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:185,duration:91,songName:"Fantastic Dreamer (TV Size)",songSubName:"",songAuthorName:"Machico",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:4444,upvotes:1290,downvotes:31,score:.9218},uploaded:"2019-12-07T07:21:35.291Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c86360baf99485e61e18a80d48470c38f0faf4d3",key:"744f",state:"Published",createdAt:"2019-12-07T07:21:35.291Z",sageScore:3,diffs:[{njs:11,offset:0,notes:256,bombs:0,obstacles:0,nps:2.99,length:264,characteristic:"Standard",difficulty:"Hard",events:1956,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.622,paritySummary:{errors:20,warns:16,resets:0}},{njs:13,offset:0,notes:371,bombs:0,obstacles:2,nps:4.333,length:264,characteristic:"Standard",difficulty:"Expert",events:1956,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.622,paritySummary:{errors:15,warns:25,resets:0}},{njs:15,offset:0,notes:490,bombs:0,obstacles:4,nps:5.723,length:264,characteristic:"Standard",difficulty:"ExpertPlus",events:1956,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.622,paritySummary:{errors:20,warns:24,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c86360baf99485e61e18a80d48470c38f0faf4d3.zip",coverURL:"https://cdn.beatsaver.com/c86360baf99485e61e18a80d48470c38f0faf4d3.jpg",previewURL:"https://cdn.beatsaver.com/c86360baf99485e61e18a80d48470c38f0faf4d3.mp3"}],createdAt:"2019-12-07T07:21:35.291Z",updatedAt:"2019-12-07T07:21:35.291Z",lastPublishedAt:"2019-12-07T07:21:35.291Z"},{id:"4a3f",name:"[Anniversary] I Remember - Tristam [Heisenberg]",description:"Part of the Anniversary Song Pack",uploader:{id:37070,name:"anniversaryteam",uniqueSet:!0,hash:"5cff0b7798cc5a672c8565a3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro",type:"SIMPLE"},metadata:{bpm:110,duration:231,songName:"I Remember",songSubName:"Tristam",songAuthorName:"Heisenberg",levelAuthorName:"AnniversaryTeam"},stats:{plays:0,downloads:3832,upvotes:2835,downvotes:107,score:.9218},uploaded:"2019-05-03T14:09:51Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"349ef04192948a8404ab7942d2813be3e37cd8fd",key:"4a3f",state:"Published",createdAt:"2019-05-03T14:09:51Z",sageScore:8,diffs:[{njs:11,offset:0,notes:237,bombs:0,obstacles:4,nps:1.137,length:382,characteristic:"Standard",difficulty:"Easy",events:8143,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:208.364,paritySummary:{errors:13,warns:24,resets:0}},{njs:12,offset:0,notes:362,bombs:0,obstacles:6,nps:1.737,length:382,characteristic:"Standard",difficulty:"Normal",events:8143,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:208.364,paritySummary:{errors:50,warns:35,resets:0}},{njs:13,offset:0,notes:465,bombs:0,obstacles:6,nps:2.232,length:382,characteristic:"Standard",difficulty:"Hard",events:8143,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:208.364,paritySummary:{errors:24,warns:36,resets:0}},{njs:14,offset:0,notes:627,bombs:0,obstacles:16,nps:3.009,length:382,characteristic:"Standard",difficulty:"Expert",events:8143,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:208.364,paritySummary:{errors:15,warns:26,resets:0}},{njs:16,offset:0,notes:853,bombs:0,obstacles:17,nps:4.094,length:382,characteristic:"Standard",difficulty:"ExpertPlus",events:8153,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:208.364,paritySummary:{errors:43,warns:111,resets:0}}],downloadURL:"https://cdn.beatsaver.com/349ef04192948a8404ab7942d2813be3e37cd8fd.zip",coverURL:"https://cdn.beatsaver.com/349ef04192948a8404ab7942d2813be3e37cd8fd.jpg",previewURL:"https://cdn.beatsaver.com/349ef04192948a8404ab7942d2813be3e37cd8fd.mp3"}],createdAt:"2019-05-03T14:09:51Z",updatedAt:"2019-05-03T14:09:51Z",lastPublishedAt:"2019-05-03T14:09:51Z"},{id:"17ac",name:"Holiday - Green Day",description:"Preview: https://www.youtube.com/watch?v=3eya5H-dYCc\nAlways enjoy making green day songs! We need more of them on beat saber!\nExpert - Hard - Normal\n\nhttps://twitter.com/TheDownyCat\nhttps://www.twitch.tv/downycat\nhttps://streamlabs.com/downycat/tip",uploader:{id:4285982,name:"downycat",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ede5",avatar:"https://cdn.beatsaver.com/avatar/173538829888782336.png",type:"DISCORD"},metadata:{bpm:146,duration:233,songName:"Holiday",songSubName:"Green Day",songAuthorName:"DownyCat",levelAuthorName:"downycat"},stats:{plays:0,downloads:4708,upvotes:2355,downvotes:82,score:.9218},uploaded:"2018-09-28T14:34:41Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"403efd4b7ec08f129f45f0859323f2d0ee052b34",key:"17ac",state:"Published",createdAt:"2018-09-28T14:34:41Z",sageScore:5,diffs:[{njs:10,offset:0,notes:477,bombs:0,obstacles:42,nps:2.161,length:539,characteristic:"Standard",difficulty:"Normal",events:1703,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.507,paritySummary:{errors:45,warns:16,resets:0}},{njs:10,offset:0,notes:857,bombs:0,obstacles:2,nps:3.872,length:540.313,characteristic:"Standard",difficulty:"Hard",events:1703,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:222.046,paritySummary:{errors:40,warns:78,resets:0}},{njs:10,offset:0,notes:1075,bombs:14,obstacles:2,nps:4.747,length:552.875,characteristic:"Standard",difficulty:"Expert",events:1703,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:227.209,paritySummary:{errors:44,warns:69,resets:0}}],downloadURL:"https://cdn.beatsaver.com/403efd4b7ec08f129f45f0859323f2d0ee052b34.zip",coverURL:"https://cdn.beatsaver.com/403efd4b7ec08f129f45f0859323f2d0ee052b34.jpg",previewURL:"https://cdn.beatsaver.com/403efd4b7ec08f129f45f0859323f2d0ee052b34.mp3"}],createdAt:"2018-09-28T14:34:41Z",updatedAt:"2018-09-28T14:34:41Z",lastPublishedAt:"2018-09-28T14:34:41Z"},{id:"5c83",name:"The Kids Arent Alright - The Offspring",description:"Shoutouts to twitch.tv/bearlyj and twitch.tv/whipstickgostop for playtesting!",uploader:{id:4285077,name:"ris",uniqueSet:!0,hash:"5cff0b7598cc5a672c8535df",avatar:"https://cdn.beatsaver.com/avatar/191597992061435904.png",type:"DISCORD"},metadata:{bpm:194,duration:183,songName:"The Kids Arent Alright",songSubName:"",songAuthorName:"The Offspring",levelAuthorName:"Ris"},stats:{plays:0,downloads:5715,upvotes:2235,downvotes:76,score:.9217},uploaded:"2019-08-12T23:40:01.490Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"20986d8f9b32820de9a1953bf11db91abd27db27",key:"5c83",state:"Published",createdAt:"2019-08-12T23:40:01.490Z",sageScore:4,diffs:[{njs:10,offset:1,notes:328,bombs:2,obstacles:3,nps:1.848,length:573.809,characteristic:"Standard",difficulty:"Normal",events:396,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:177.467,paritySummary:{errors:44,warns:50,resets:0}},{njs:12,offset:1,notes:553,bombs:8,obstacles:3,nps:3.116,length:573.809,characteristic:"Standard",difficulty:"Hard",events:396,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:177.467,paritySummary:{errors:70,warns:70,resets:0}},{njs:16,offset:1,notes:909,bombs:8,obstacles:3,nps:5.122,length:573.809,characteristic:"Standard",difficulty:"Expert",events:396,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:177.467,paritySummary:{errors:61,warns:70,resets:0}}],downloadURL:"https://cdn.beatsaver.com/20986d8f9b32820de9a1953bf11db91abd27db27.zip",coverURL:"https://cdn.beatsaver.com/20986d8f9b32820de9a1953bf11db91abd27db27.jpg",previewURL:"https://cdn.beatsaver.com/20986d8f9b32820de9a1953bf11db91abd27db27.mp3"}],createdAt:"2019-08-12T23:40:01.490Z",updatedAt:"2019-08-12T23:40:01.490Z",lastPublishedAt:"2019-08-12T23:40:01.490Z"},{id:"4a45",name:"[Anniversary] Nothing Stopping Me (ft. Kat Nestel) - Vicetone [BennyDaBeast]",description:"Part of the Anniversary Song Pack",uploader:{id:37070,name:"anniversaryteam",uniqueSet:!0,hash:"5cff0b7798cc5a672c8565a3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro",type:"SIMPLE"},metadata:{bpm:127,duration:223,songName:"Nothing Stopping Me (ft. Kat Nestel)",songSubName:"Vicetone",songAuthorName:"BennyDaBeast",levelAuthorName:"AnniversaryTeam"},stats:{plays:0,downloads:3386,upvotes:2390,downvotes:84,score:.9217},uploaded:"2019-05-03T14:10:40Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"01e9554069556f1756cbfcf9ac233b68d98b19c8",key:"4a45",state:"Published",createdAt:"2019-05-03T14:10:40Z",sageScore:7,diffs:[{njs:10,offset:0,notes:403,bombs:104,obstacles:22,nps:1.568,length:544,characteristic:"Standard",difficulty:"Easy",events:2514,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:257.008,paritySummary:{errors:61,warns:32,resets:16}},{njs:10,offset:0,notes:481,bombs:104,obstacles:22,nps:1.872,length:544,characteristic:"Standard",difficulty:"Normal",events:2514,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:257.008,paritySummary:{errors:71,warns:49,resets:20}},{njs:12,offset:0,notes:647,bombs:104,obstacles:22,nps:2.517,length:544,characteristic:"Standard",difficulty:"Hard",events:2514,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:257.008,paritySummary:{errors:105,warns:80,resets:18}},{njs:12,offset:0,notes:693,bombs:104,obstacles:22,nps:3.274,length:448,characteristic:"Standard",difficulty:"Expert",events:2514,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:211.654,paritySummary:{errors:65,warns:109,resets:20}},{njs:15,offset:0,notes:914,bombs:96,obstacles:34,nps:4.318,length:448,characteristic:"Standard",difficulty:"ExpertPlus",events:2514,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:211.654,paritySummary:{errors:94,warns:128,resets:20}}],downloadURL:"https://cdn.beatsaver.com/01e9554069556f1756cbfcf9ac233b68d98b19c8.zip",coverURL:"https://cdn.beatsaver.com/01e9554069556f1756cbfcf9ac233b68d98b19c8.jpg",previewURL:"https://cdn.beatsaver.com/01e9554069556f1756cbfcf9ac233b68d98b19c8.mp3"}],createdAt:"2019-05-03T14:10:40Z",updatedAt:"2019-05-03T14:10:40Z",lastPublishedAt:"2019-05-03T14:10:40Z"},{id:"485a",name:"Lost in the Rhythm - Jamie Berry ft. Octavia Rose",description:"Got me twistin' and turnin' around in my Jimmy Choos\r\n\r\nOnce again get a variety of maps from the Funrankable team: Lighting and Ex+ by LittleAsi, Ex+ by Ryger, with Ex+, Expert, and Normal by baxter395. Enjoy each difficulty for a variety of novel styles.\r\n\r\nIf you enjoy our maps, please support the Funrankable Collective by contributing to our Patreon:\r\nhttps://www.patreon.com/funrankable\r\n\r\nThanks to these hip cats for playtesting and feedback: RedMagi, Qwasix",uploader:{id:37517,name:"funrankable",uniqueSet:!0,hash:"5cff0b7798cc5a672c8561ac",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8561ac?d=retro",type:"SIMPLE"},metadata:{bpm:121,duration:185,songName:"Lost in the Rhythm",songSubName:"Jamie Berry ft. Octavia Rose",songAuthorName:"Funrankable",levelAuthorName:"Funrankable"},stats:{plays:0,downloads:2942,upvotes:2309,downvotes:80,score:.9217},uploaded:"2019-04-25T19:03:46Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f819a2f44993ed7ea1630e103a106b2d1f7808ac",key:"485a",state:"Published",createdAt:"2019-04-25T19:03:46Z",sageScore:7,diffs:[{njs:11,offset:1,notes:350,bombs:0,obstacles:12,nps:2.028,length:348,characteristic:"Standard",difficulty:"Easy",events:7779,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:172.562,paritySummary:{errors:48,warns:44,resets:0}},{njs:12,offset:1,notes:673,bombs:32,obstacles:6,nps:3.9,length:348,characteristic:"Standard",difficulty:"Normal",events:7779,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:172.562,paritySummary:{errors:39,warns:20,resets:9}},{njs:14,offset:0,notes:785,bombs:207,obstacles:10,nps:4.549,length:348,characteristic:"Standard",difficulty:"Hard",events:7779,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:172.562,paritySummary:{errors:37,warns:22,resets:11}},{njs:14,offset:0,notes:899,bombs:0,obstacles:4,nps:5.008,length:362,characteristic:"Standard",difficulty:"Expert",events:7794,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:179.504,paritySummary:{errors:38,warns:35,resets:0}},{njs:16,offset:0,notes:786,bombs:5,obstacles:79,nps:4.355,length:364,characteristic:"Standard",difficulty:"ExpertPlus",events:7779,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.496,paritySummary:{errors:63,warns:97,resets:4}},{njs:12,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:7779,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f819a2f44993ed7ea1630e103a106b2d1f7808ac.zip",coverURL:"https://cdn.beatsaver.com/f819a2f44993ed7ea1630e103a106b2d1f7808ac.jpg",previewURL:"https://cdn.beatsaver.com/f819a2f44993ed7ea1630e103a106b2d1f7808ac.mp3"}],createdAt:"2019-04-25T19:03:46Z",updatedAt:"2019-04-25T19:03:46Z",lastPublishedAt:"2019-04-25T19:03:46Z"},{id:"19ca",name:"Bubble Pop - Hyuna",description:"Made for Nichole!\r\nCheck her out on twitch: https://www.twitch.tv/lovingwaifuu\r\n\r\nSee it in action: https://www.youtube.com/watch?v=U2-JYSybh9Y\r\n\r\nThank you to my playtesters:\r\n\r\nQTpop (https://www.twitch.tv/qtpop)\r\nDuovr (https://www.twitch.tv/duovr)\r\nXypherorion (https://www.twitch.tv/Xypherorion)\r\n\r\nI stream playing and making maps for beat saber: https://www.twitch.tv/fafurion",uploader:{id:38202,name:"fafurion",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f945",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f945?d=retro",type:"SIMPLE"},metadata:{bpm:146,duration:214,songName:"Bubble Pop",songSubName:"Hyuna",songAuthorName:"Fafurion",levelAuthorName:"fafurion"},stats:{plays:0,downloads:8139,upvotes:2698,downvotes:100,score:.9217},uploaded:"2018-10-12T03:28:19Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"e8ed13a78cd1e566f754d0cb47d4b5cde8918abe",key:"19ca",state:"Published",createdAt:"2018-10-12T03:28:19Z",sageScore:6,diffs:[{njs:10,offset:0,notes:355,bombs:0,obstacles:2,nps:1.695,length:509.719,characteristic:"Standard",difficulty:"Easy",events:1211,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.473,paritySummary:{errors:15,warns:2,resets:0},stars:.91},{njs:10,offset:0,notes:497,bombs:0,obstacles:2,nps:2.373,length:509.719,characteristic:"Standard",difficulty:"Normal",events:1211,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.473,paritySummary:{errors:28,warns:3,resets:0}},{njs:10,offset:0,notes:677,bombs:0,obstacles:87,nps:3.232,length:509.719,characteristic:"Standard",difficulty:"Hard",events:1211,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.473,paritySummary:{errors:51,warns:47,resets:0},stars:2.17},{njs:13,offset:0,notes:791,bombs:0,obstacles:118,nps:3.776,length:509.719,characteristic:"Standard",difficulty:"Expert",events:1211,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.473,paritySummary:{errors:70,warns:64,resets:0},stars:2.8}],downloadURL:"https://cdn.beatsaver.com/e8ed13a78cd1e566f754d0cb47d4b5cde8918abe.zip",coverURL:"https://cdn.beatsaver.com/e8ed13a78cd1e566f754d0cb47d4b5cde8918abe.jpg",previewURL:"https://cdn.beatsaver.com/e8ed13a78cd1e566f754d0cb47d4b5cde8918abe.mp3"}],createdAt:"2018-10-12T03:28:19Z",updatedAt:"2018-10-12T03:28:19Z",lastPublishedAt:"2018-10-12T03:28:19Z"},{id:"3a4",name:"Boulevard of Broken Dreams - Green Day",description:"Expert - Hard - Normal\n1000+ Notes on Expert\nLighting Events\n\nhttps://twitter.com/TheDownyCat\nhttps://www.twitch.tv/downycat\nhttps://streamlabs.com/downycat/tip",uploader:{id:4285982,name:"downycat",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ede5",avatar:"https://cdn.beatsaver.com/avatar/173538829888782336.png",type:"DISCORD"},metadata:{bpm:167,duration:266,songName:"Boulevard of Broken Dreams",songSubName:"Green Day",songAuthorName:"DownyCat",levelAuthorName:"downycat"},stats:{plays:0,downloads:6999,upvotes:6552,downvotes:321,score:.9216},uploaded:"2018-06-04T08:30:49Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"fa36428f6eed2648dade2fe320156adfaabe07b5",key:"3a4",state:"Published",createdAt:"2018-06-04T08:30:49Z",sageScore:5,diffs:[{njs:10,offset:0,notes:474,bombs:0,obstacles:0,nps:1.932,length:683,characteristic:"Standard",difficulty:"Normal",events:1076,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:245.389,paritySummary:{errors:182,warns:9,resets:0}},{njs:10,offset:0,notes:747,bombs:0,obstacles:0,nps:3.044,length:683,characteristic:"Standard",difficulty:"Hard",events:1076,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:245.389,paritySummary:{errors:97,warns:30,resets:0}},{njs:10,offset:0,notes:1049,bombs:0,obstacles:0,nps:4.275,length:683,characteristic:"Standard",difficulty:"Expert",events:1076,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:245.389,paritySummary:{errors:91,warns:73,resets:0}}],downloadURL:"https://cdn.beatsaver.com/fa36428f6eed2648dade2fe320156adfaabe07b5.zip",coverURL:"https://cdn.beatsaver.com/fa36428f6eed2648dade2fe320156adfaabe07b5.jpg",previewURL:"https://cdn.beatsaver.com/fa36428f6eed2648dade2fe320156adfaabe07b5.mp3"}],createdAt:"2018-06-04T08:30:49Z",updatedAt:"2018-06-04T08:30:49Z",lastPublishedAt:"2018-06-04T08:30:49Z"},{id:"10fe4",name:"We Like To Party (on the train tracks)",description:"Don't play on the tracks.\n\n\n\n\n\n\n\n\n\n\n\n\n(account definitely isn't a Mawntee alt account no sir)",uploader:{id:1602,name:"chief-queef",uniqueSet:!0,hash:"5f9a4d2a030219000627c2bf",avatar:"https://cdn.beatsaver.com/avatar/1602.jpg",type:"SIMPLE"},metadata:{bpm:136,duration:34,songName:"We Like To Party",songSubName:"",songAuthorName:"CHURCH OF LEL",levelAuthorName:"Chief Queef"},stats:{plays:0,downloads:2345,upvotes:1022,downvotes:20,score:.9215},uploaded:"2020-11-15T18:12:41.227Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d004ad1ee631ae38ba7f0d336a039da8beb0b552",key:"10fe4",state:"Published",createdAt:"2020-11-15T18:12:41.227Z",sageScore:5,diffs:[{njs:69,offset:0,notes:781,bombs:0,obstacles:0,nps:23.922,length:73.984,characteristic:"Lawless",difficulty:"Easy",events:939,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:32.64,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/d004ad1ee631ae38ba7f0d336a039da8beb0b552.zip",coverURL:"https://cdn.beatsaver.com/d004ad1ee631ae38ba7f0d336a039da8beb0b552.jpg",previewURL:"https://cdn.beatsaver.com/d004ad1ee631ae38ba7f0d336a039da8beb0b552.mp3"}],createdAt:"2020-11-15T18:12:41.227Z",updatedAt:"2020-11-15T18:12:41.227Z",lastPublishedAt:"2020-11-15T18:12:41.227Z"},{id:"a72f",name:"The World of Tune - Onoken feat. GaQdan",description:"88-2",uploader:{id:4285521,name:"ejiejidayo",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fc58",avatar:"https://cdn.beatsaver.com/avatar/224894241279574016.png",type:"DISCORD"},metadata:{bpm:108,duration:217,songName:"The World of Tune",songSubName:"Tones and Souls",songAuthorName:"Onoken feat. GaQdan",levelAuthorName:"ejiejidayo"},stats:{plays:0,downloads:814,upvotes:597,downvotes:4,score:.9215},uploaded:"2020-05-17T11:49:56.405Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"750910ebc1b4e958ed2266ba31786ba52569c6a5",key:"a72f",state:"Published",createdAt:"2020-05-17T11:49:56.405Z",sageScore:6,diffs:[{njs:13,offset:-.3,notes:400,bombs:0,obstacles:65,nps:1.893,length:380.393,characteristic:"Standard",difficulty:"Hard",events:1813,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:211.329,paritySummary:{errors:0,warns:0,resets:0}},{njs:15,offset:-.6,notes:761,bombs:0,obstacles:56,nps:3.601,length:380.393,characteristic:"Standard",difficulty:"Expert",events:1813,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:211.329,paritySummary:{errors:5,warns:5,resets:0}},{njs:17,offset:.2,notes:948,bombs:0,obstacles:57,nps:4.486,length:380.393,characteristic:"Standard",difficulty:"ExpertPlus",events:1813,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:211.329,paritySummary:{errors:3,warns:3,resets:0}}],downloadURL:"https://cdn.beatsaver.com/750910ebc1b4e958ed2266ba31786ba52569c6a5.zip",coverURL:"https://cdn.beatsaver.com/750910ebc1b4e958ed2266ba31786ba52569c6a5.jpg",previewURL:"https://cdn.beatsaver.com/750910ebc1b4e958ed2266ba31786ba52569c6a5.mp3"}],createdAt:"2020-05-17T11:49:56.405Z",updatedAt:"2020-05-17T11:49:56.405Z",lastPublishedAt:"2020-05-17T11:49:56.405Z"},{id:"3b6c",name:"Happatai - YATTA!",description:"edited: fixed a mistake in the Hard mode\r\n\r\nG-R-EE-N LEAVES! Japanese YMCA tbh\r\nIf you know this song, you a legend\r\n\r\nYoutube Preview: coming soon\r\n\r\nBPM 133\r\nHard, Expert\r\n\r\nHave fun!\r\n\r\ncontact me on discord\r\nDiscord: ETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:133,duration:237,songName:"YATTA!",songSubName:"Happatai",songAuthorName:"ETAN",levelAuthorName:"ETAN"},stats:{plays:0,downloads:1630,upvotes:874,downvotes:14,score:.9215},uploaded:"2019-03-04T07:04:15Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9a7a73b32c7ffbc48a352963eb7298a918269458",key:"3b6c",state:"Published",createdAt:"2019-03-04T07:04:15Z",sageScore:6,diffs:[{njs:12,offset:0,notes:729,bombs:14,obstacles:8,nps:3.192,length:506.25,characteristic:"Standard",difficulty:"Hard",events:1354,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:228.383,paritySummary:{errors:83,warns:23,resets:2}},{njs:12,offset:0,notes:833,bombs:14,obstacles:8,nps:3.647,length:506.25,characteristic:"Standard",difficulty:"Expert",events:1354,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:228.383,paritySummary:{errors:75,warns:27,resets:2}}],downloadURL:"https://cdn.beatsaver.com/9a7a73b32c7ffbc48a352963eb7298a918269458.zip",coverURL:"https://cdn.beatsaver.com/9a7a73b32c7ffbc48a352963eb7298a918269458.jpg",previewURL:"https://cdn.beatsaver.com/9a7a73b32c7ffbc48a352963eb7298a918269458.mp3"}],createdAt:"2019-03-04T07:04:15Z",updatedAt:"2019-03-04T07:04:15Z",lastPublishedAt:"2019-03-04T07:04:15Z"},{id:"d411",name:"[FUTURE FUNK PACK] SUPER RISER! (Short Ver.) - Nanidato",description:'FUTURE FUNK MAP PACK\n2 songs uploaded everyday through August 10th - 14th!\n\n"SUPER RISER!" by Nanidato was sampled from Chieri Ito\'s "Merry Christmas" \n\nThis version of "SUPER RISER!" is a short edit I made to reduce the repetitive sections of the song near the end\n\nPlease look forward to the upcoming maps!\n\nDM any feedback on Discord\nETAN#8341',uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:141,duration:155,songName:"SUPER RISER!",songSubName:"(Short Ver.)",songAuthorName:"Nanidato",levelAuthorName:"ETAN"},stats:{plays:0,downloads:3828,upvotes:766,downvotes:10,score:.9214},uploaded:"2020-08-11T17:47:02.338Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c6b7136536ef5647374198769b3211b2b2e4ee17",key:"d411",state:"Published",createdAt:"2020-08-11T17:47:02.338Z",sageScore:7,diffs:[{njs:10,offset:0,notes:158,bombs:0,obstacles:14,nps:1.066,length:347.5,characteristic:"Standard",difficulty:"Easy",events:8420,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:147.872,paritySummary:{errors:57,warns:10,resets:0}},{njs:11,offset:1,notes:218,bombs:0,obstacles:14,nps:1.454,length:351.5,characteristic:"Standard",difficulty:"Normal",events:8420,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:149.574,paritySummary:{errors:14,warns:2,resets:0}},{njs:13,offset:1,notes:398,bombs:0,obstacles:16,nps:2.654,length:351.5,characteristic:"Standard",difficulty:"Hard",events:8420,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:149.574,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:.1,notes:578,bombs:0,obstacles:16,nps:3.854,length:351.5,characteristic:"Standard",difficulty:"Expert",events:8420,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:149.574,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:-.4,notes:781,bombs:0,obstacles:15,nps:5.207,length:351.5,characteristic:"Standard",difficulty:"ExpertPlus",events:8420,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:149.574,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c6b7136536ef5647374198769b3211b2b2e4ee17.zip",coverURL:"https://cdn.beatsaver.com/c6b7136536ef5647374198769b3211b2b2e4ee17.jpg",previewURL:"https://cdn.beatsaver.com/c6b7136536ef5647374198769b3211b2b2e4ee17.mp3"}],createdAt:"2020-08-11T17:47:02.338Z",updatedAt:"2020-08-11T17:47:02.338Z",lastPublishedAt:"2020-08-11T17:47:02.338Z"},{id:"6e6e",name:"The Pretender - Foo Fighters",description:"Shoutout to twitch.tv/whipstickgostop for playtesting!",uploader:{id:4285077,name:"ris",uniqueSet:!0,hash:"5cff0b7598cc5a672c8535df",avatar:"https://cdn.beatsaver.com/avatar/191597992061435904.png",type:"DISCORD"},metadata:{bpm:173,duration:271,songName:"The Pretender",songSubName:"",songAuthorName:"Foo Fighters",levelAuthorName:"Ris"},stats:{plays:0,downloads:6031,upvotes:2032,downvotes:67,score:.9213},uploaded:"2019-11-05T23:48:37.168Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"aa64d183dbdfd111f578e3ab80beeca2f61d13eb",key:"6e6e",state:"Published",createdAt:"2019-11-05T23:48:37.168Z",sageScore:2,diffs:[{njs:10,offset:0,notes:427,bombs:0,obstacles:6,nps:1.612,length:764,characteristic:"Standard",difficulty:"Normal",events:471,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:264.971,paritySummary:{errors:70,warns:44,resets:0}},{njs:12,offset:0,notes:641,bombs:0,obstacles:6,nps:2.418,length:764.5,characteristic:"Standard",difficulty:"Hard",events:471,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:265.145,paritySummary:{errors:78,warns:64,resets:0}},{njs:16,offset:.7,notes:958,bombs:4,obstacles:6,nps:3.613,length:764.5,characteristic:"Standard",difficulty:"Expert",events:471,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:265.145,paritySummary:{errors:64,warns:63,resets:2}}],downloadURL:"https://cdn.beatsaver.com/aa64d183dbdfd111f578e3ab80beeca2f61d13eb.zip",coverURL:"https://cdn.beatsaver.com/aa64d183dbdfd111f578e3ab80beeca2f61d13eb.jpg",previewURL:"https://cdn.beatsaver.com/aa64d183dbdfd111f578e3ab80beeca2f61d13eb.mp3"}],createdAt:"2019-11-05T23:48:37.168Z",updatedAt:"2019-11-05T23:48:37.168Z",lastPublishedAt:"2019-11-05T23:48:37.168Z"},{id:"68c5",name:"Sky Fracture VIP (ft. Miss Lina) - Getsix",description:"Ever wondered how one song would look like when mapped by several different mappers in their own mapping style? Then this map is for you! A big collaboration project started by Sykes19, it features a total of 17 maps and 6 unique lightshows, made by 15 mappers and 5 lighters. Special thanks to Getsix for making a Beat Saber edit of his song Sky Fracture VIP ft. Miss Lina!\n\nMapping Extensions mod required for some difficulties (see below).\nChromaLite mod highly recommended for Chroma colored lights.\nSongCore mod highly recommended for custom colors.\n\nStandard:\n1. techbutterfly (794 notes)\n2. Helen Carnate (833 notes)\n3. Bloodcloak (845 notes)\n4. Teuflum (1327 notes)\n5. Skyler Wallace (1329 notes)\n6. Raxan (1444 notes [found in No Arrows])\n7. LEh4nnes (1725 notes [found in No Arrows])\n\nLawless:\n1. Aeroluna (1355 notes)\n2. EncodeRed (1390 notes)\n3. xScaramouche (1585 notes)\n4. CyanSnow (1361 notes [Mapping Extensions])\n5. spooky ghost & Skyler Wallace (633 notes [Mapping Extensions])\n\nOne Saber:\n1. Skyler Wallace (775 notes)\n2. Kolezan (793 notes)\n3. 219278 (968 notes)\n4. 219278 (1104 notes)\n5. thelitlewiseowl (1347 notes)\n\nLightshows:\n1. Halcyon12 (17,993 lighting events)\n2. 219278 - (23,157 lighting events)\n3. Skeelie (26,500 lighting events)\n4. Aeroluna (29,982 lighting events)\n5. spooky ghost (27,387 lighting events, 26,047 walls [Mapping Extensions])\n6. 125K Lightshow (125,038 lighting events [found in No Arrows])",uploader:{id:37070,name:"anniversaryteam",uniqueSet:!0,hash:"5cff0b7798cc5a672c8565a3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro",type:"SIMPLE"},metadata:{bpm:176,duration:219,songName:"Sky Fracture VIP",songSubName:"ft. Miss Lina",songAuthorName:"Getsix",levelAuthorName:"Various Mappers"},stats:{plays:0,downloads:4504,upvotes:2272,downvotes:79,score:.9213},uploaded:"2019-10-09T06:45:54.603Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"499e94f2ffb162dba02d4e499163a9cde3b925e5",key:"68c5",state:"Published",createdAt:"2019-10-09T06:45:54.603Z",sageScore:7,diffs:[{njs:16,offset:1,notes:794,bombs:0,obstacles:122,nps:2.019,length:1153.797,characteristic:"Standard",difficulty:"Easy",events:23157,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:393.34,paritySummary:{errors:49,warns:43,resets:0}},{njs:15,offset:1,notes:833,bombs:34,obstacles:10,nps:3.858,length:633.356,characteristic:"Standard",difficulty:"Normal",events:29982,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.917,paritySummary:{errors:62,warns:52,resets:2}},{njs:16,offset:.75,notes:845,bombs:24,obstacles:64,nps:3.913,length:633.419,characteristic:"Standard",difficulty:"Hard",events:26500,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.938,paritySummary:{errors:12,warns:4,resets:8}},{njs:19,offset:0,notes:1327,bombs:84,obstacles:74,nps:6.146,length:633.356,characteristic:"Standard",difficulty:"Expert",events:17993,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.917,paritySummary:{errors:18,warns:19,resets:11}},{njs:20,offset:0,notes:1329,bombs:29,obstacles:153,nps:6.155,length:633.356,characteristic:"Standard",difficulty:"ExpertPlus",events:27387,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.917,paritySummary:{errors:90,warns:100,resets:10}},{njs:16,offset:.75,notes:775,bombs:25,obstacles:215,nps:3.589,length:633.356,characteristic:"OneSaber",difficulty:"Easy",events:17993,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.917,paritySummary:{errors:37,warns:62,resets:2}},{njs:16,offset:.75,notes:793,bombs:72,obstacles:54,nps:3.673,length:633.356,characteristic:"OneSaber",difficulty:"Normal",events:26500,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.917,paritySummary:{errors:32,warns:94,resets:3}},{njs:17,offset:.25,notes:968,bombs:0,obstacles:58,nps:4.483,length:633.356,characteristic:"OneSaber",difficulty:"Hard",events:23157,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.917,paritySummary:{errors:8,warns:4,resets:0}},{njs:17,offset:.25,notes:1104,bombs:0,obstacles:58,nps:5.113,length:633.356,characteristic:"OneSaber",difficulty:"Expert",events:23157,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.917,paritySummary:{errors:27,warns:23,resets:0}},{njs:19,offset:.125,notes:1347,bombs:26,obstacles:22,nps:6.236,length:633.656,characteristic:"OneSaber",difficulty:"ExpertPlus",events:27387,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.019,paritySummary:{errors:38,warns:85,resets:3}},{njs:22,offset:0,notes:1444,bombs:0,obstacles:37,nps:6.688,length:633.356,characteristic:"NoArrows",difficulty:"Hard",events:29982,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.917,paritySummary:{errors:9,warns:20,resets:0}},{njs:22,offset:0,notes:1725,bombs:118,obstacles:104,nps:7.989,length:633.356,characteristic:"NoArrows",difficulty:"Expert",events:17993,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.917,paritySummary:{errors:10,warns:4,resets:13}},{njs:100,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"NoArrows",difficulty:"ExpertPlus",events:125018,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:17993,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Normal",events:23157,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Hard",events:26500,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Expert",events:29982,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:20,offset:0,notes:0,bombs:0,obstacles:26047,nps:0,length:0,characteristic:"Lightshow",difficulty:"ExpertPlus",events:27387,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:20,offset:0,notes:1355,bombs:18,obstacles:0,nps:6.276,length:633.356,characteristic:"Lawless",difficulty:"Easy",events:29982,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.917,paritySummary:{errors:26,warns:28,resets:0}},{njs:17,offset:1,notes:1390,bombs:46,obstacles:65,nps:6.437,length:633.419,characteristic:"Lawless",difficulty:"Normal",events:23157,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.938,paritySummary:{errors:32,warns:18,resets:0}},{njs:19,offset:0,notes:1585,bombs:46,obstacles:25,nps:7.341,length:633.356,characteristic:"Lawless",difficulty:"Hard",events:17993,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.917,paritySummary:{errors:16,warns:14,resets:0}},{njs:21,offset:0,notes:1361,bombs:46,obstacles:1,nps:6.303,length:633.356,characteristic:"Lawless",difficulty:"Expert",events:26083,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:215.917,paritySummary:{errors:0,warns:0,resets:0}},{njs:20,offset:0,notes:633,bombs:0,obstacles:26047,nps:3.077,length:603.356,characteristic:"Lawless",difficulty:"ExpertPlus",events:27387,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:205.69,paritySummary:{errors:64,warns:39,resets:0}}],downloadURL:"https://cdn.beatsaver.com/499e94f2ffb162dba02d4e499163a9cde3b925e5.zip",coverURL:"https://cdn.beatsaver.com/499e94f2ffb162dba02d4e499163a9cde3b925e5.jpg",previewURL:"https://cdn.beatsaver.com/499e94f2ffb162dba02d4e499163a9cde3b925e5.mp3"}],createdAt:"2019-10-09T06:45:54.603Z",updatedAt:"2019-10-09T06:45:54.603Z",lastPublishedAt:"2019-10-09T06:45:54.603Z"},{id:"612d",name:"[Anniversary] Overkill - RIOT [Heisenberg & Skyler Wallace]",description:"Part of the Anniversary Song Pack",uploader:{id:37070,name:"anniversaryteam",uniqueSet:!0,hash:"5cff0b7798cc5a672c8565a3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro",type:"SIMPLE"},metadata:{bpm:174,duration:310,songName:"Overkill",songSubName:"",songAuthorName:"RIOT",levelAuthorName:"Heisenberg & Skyler Wallace"},stats:{plays:0,downloads:2777,upvotes:1933,downvotes:62,score:.9213},uploaded:"2019-09-04T02:20:01.432Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8af36a369b051a4a82348dccd2051ee64530d12d",key:"612d",state:"Published",createdAt:"2019-09-04T02:20:01.432Z",sageScore:6,diffs:[{njs:15,offset:.75,notes:826,bombs:664,obstacles:25,nps:2.79,length:858.5,characteristic:"Standard",difficulty:"Hard",events:12607,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:296.035,paritySummary:{errors:58,warns:88,resets:16}},{njs:17,offset:.25,notes:1114,bombs:668,obstacles:27,nps:3.763,length:858.5,characteristic:"Standard",difficulty:"Expert",events:12190,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:296.034,paritySummary:{errors:60,warns:107,resets:16}},{njs:19,offset:.25,notes:1925,bombs:462,obstacles:1e3,nps:6.503,length:858.5,characteristic:"Standard",difficulty:"ExpertPlus",events:12513,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:296.035,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/8af36a369b051a4a82348dccd2051ee64530d12d.zip",coverURL:"https://cdn.beatsaver.com/8af36a369b051a4a82348dccd2051ee64530d12d.jpg",previewURL:"https://cdn.beatsaver.com/8af36a369b051a4a82348dccd2051ee64530d12d.mp3"}],createdAt:"2019-09-04T02:20:01.432Z",updatedAt:"2019-09-04T02:20:01.432Z",lastPublishedAt:"2019-09-04T02:20:01.432Z"},{id:"5222",name:"To see the future [Sword Art Online Alternative: Gun Gale Online Ending]",description:"Preview:\r\nhttps://www.youtube.com/watch?v=DEp-eEgl1_w\r\n\r\nMAPPING EXTENSIONS REQUIRED for walls and such\r\nThis took forever but it was SOOO worth it\r\n\r\nThanks to Sehria_K for playtesting!\r\n\r\nSAO Alternative: GGO ED by LLENN (Tomori Kusunoki)\r\n\r\nPlease enjoy\r\ngimme feedback on Discord\r\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:137,duration:256,songName:"To see the future",songSubName:"Tomori Kusunoki",songAuthorName:"ETAN",levelAuthorName:"ETAN"},stats:{plays:0,downloads:3227,upvotes:940,downvotes:17,score:.9212},uploaded:"2019-06-07T21:47:12Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7e33f5491f94b5b3590864629579ed59f3f8fc90",key:"5222",state:"Published",createdAt:"2019-06-07T21:47:12Z",sageScore:6,diffs:[{njs:13,offset:0,notes:622,bombs:111,obstacles:692,nps:2.479,length:573,characteristic:"Standard",difficulty:"Hard",events:3793,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:250.949,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:0,notes:924,bombs:92,obstacles:692,nps:3.68,length:573.25,characteristic:"Standard",difficulty:"Expert",events:3793,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:251.058,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/7e33f5491f94b5b3590864629579ed59f3f8fc90.zip",coverURL:"https://cdn.beatsaver.com/7e33f5491f94b5b3590864629579ed59f3f8fc90.jpg",previewURL:"https://cdn.beatsaver.com/7e33f5491f94b5b3590864629579ed59f3f8fc90.mp3"}],createdAt:"2019-06-07T21:47:12Z",updatedAt:"2019-06-07T21:47:12Z",lastPublishedAt:"2019-06-07T21:47:12Z"},{id:"2ece",name:"#CookieJar - Red Velvet",description:"I love Nichole (LovingWaifuu) I made this chart for her\r\nFollow her twitch: https://www.twitch.tv/lovingwaifuu\r\nAlso follow me on twitch: https://www.twitch.tv/rinkusenpai\r\nThank you Redmagi and Don for the testplays!\r\nEdit: I fixed some weird stuff that happened with copy/paste and my stupidity, sorry about leaderboards",uploader:{id:16388,name:"rinkusenpai",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f6cc",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f6cc?d=retro",type:"SIMPLE"},metadata:{bpm:159,duration:214,songName:"#Cookie Jar",songSubName:"Red Velvet",songAuthorName:"RinkuSenpai",levelAuthorName:"rinkusenpai"},stats:{plays:0,downloads:2705,upvotes:1202,downvotes:28,score:.9212},uploaded:"2019-01-19T01:42:07Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ae11541d849b9126469c79f5ab61b088def692c1",key:"2ece",state:"Published",createdAt:"2019-01-19T01:42:07Z",sageScore:5,diffs:[{njs:12,offset:0,notes:821,bombs:0,obstacles:20,nps:4.029,length:540,characteristic:"Standard",difficulty:"Expert",events:2173,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:203.774,paritySummary:{errors:43,warns:50,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ae11541d849b9126469c79f5ab61b088def692c1.zip",coverURL:"https://cdn.beatsaver.com/ae11541d849b9126469c79f5ab61b088def692c1.jpg",previewURL:"https://cdn.beatsaver.com/ae11541d849b9126469c79f5ab61b088def692c1.mp3"}],createdAt:"2019-01-19T01:42:07Z",updatedAt:"2019-01-19T01:42:07Z",lastPublishedAt:"2019-01-19T01:42:07Z"},{id:"83b",name:"Otter Pop (feat. Hollis) - Shawn Wasabi",description:"Difficulties: Expert+ Only\r\nMore Benny Originals: https://beatsaver.com/searchhtml.php?q=bennydabeast",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:93,duration:170,songName:"Otter Pop (feat. Hollis)",songSubName:"Shawn Wasabi",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:3164,upvotes:2048,downvotes:68,score:.9212},uploaded:"2018-07-06T21:44:56Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c7e15a9eaeaae0fe9dd8e4ad62cfd849e3cc6cc7",key:"83b",state:"Published",createdAt:"2018-07-06T21:44:56Z",sageScore:5,diffs:[{njs:10,offset:0,notes:706,bombs:2,obstacles:36,nps:4.275,length:256,characteristic:"Standard",difficulty:"ExpertPlus",events:235,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:165.161,paritySummary:{errors:89,warns:89,resets:1}}],downloadURL:"https://cdn.beatsaver.com/c7e15a9eaeaae0fe9dd8e4ad62cfd849e3cc6cc7.zip",coverURL:"https://cdn.beatsaver.com/c7e15a9eaeaae0fe9dd8e4ad62cfd849e3cc6cc7.jpg",previewURL:"https://cdn.beatsaver.com/c7e15a9eaeaae0fe9dd8e4ad62cfd849e3cc6cc7.mp3"}],createdAt:"2018-07-06T21:44:56Z",updatedAt:"2018-07-06T21:44:56Z",lastPublishedAt:"2018-07-06T21:44:56Z"},{id:"dd1d",name:"yasuoP - Electric Angel/えれくとりっく・えんじぇぅ - Kagamine Rin Kagamine Ren - ArrangeCover 【Wall Map】(Fixed)",description:"Fixed\n\n【Preview】\nhttps://youtu.be/RI2jxRwj6WY",uploader:{id:4285467,name:"fefy",uniqueSet:!0,hash:"5cff0b7798cc5a672c856908",avatar:"https://cdn.beatsaver.com/avatar/380656936460484620.png",type:"DISCORD"},metadata:{bpm:150,duration:192,songName:"えれくとりっく・えんじぇぅ",songSubName:"鏡音リン・鏡音レンアレンジカバー",songAuthorName:"ヤスオ",levelAuthorName:"Fefy〈ふぇふぃー〉"},stats:{plays:0,downloads:1627,upvotes:963,downvotes:18,score:.9211},uploaded:"2020-08-24T09:58:50.214Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"bba2b6d3af3dc614c65c4b87b6a50f118ed181a8",key:"dd1d",state:"Published",createdAt:"2020-08-24T09:58:50.214Z",sageScore:3,diffs:[{njs:16,offset:0,notes:639,bombs:0,obstacles:39988,nps:3.41,length:468.5,characteristic:"Standard",difficulty:"Hard",events:5,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:187.4,paritySummary:{errors:14,warns:15,resets:0}}],downloadURL:"https://cdn.beatsaver.com/bba2b6d3af3dc614c65c4b87b6a50f118ed181a8.zip",coverURL:"https://cdn.beatsaver.com/bba2b6d3af3dc614c65c4b87b6a50f118ed181a8.jpg",previewURL:"https://cdn.beatsaver.com/bba2b6d3af3dc614c65c4b87b6a50f118ed181a8.mp3"}],createdAt:"2020-08-24T09:58:50.214Z",updatedAt:"2020-08-24T09:58:50.214Z",lastPublishedAt:"2020-08-24T09:58:50.214Z"},{id:"86e9",name:"Best Day Of My Life - American Authors",description:'"Best Day of My Life" is a song by American pop rock band American Authors. The song was written by band members Zac Barnett, Dave Rublin, Matt Sanchez, and James Adam Shelley, along with producers Aaron Accetta and Shep Goodman. "Best Day of My Life" was originally recorded for release as a single by Mercury Records and Island Records on March 19, 2013.',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:100,duration:194,songName:"Best Day Of My Life",songSubName:"",songAuthorName:"American Authors",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:2731,upvotes:863,downvotes:14,score:.9211},uploaded:"2020-02-14T16:59:24.776Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6b253cbb5a2a81c2575e0778614bf009d7954834",key:"86e9",state:"Published",createdAt:"2020-02-14T16:59:24.776Z",sageScore:9,diffs:[{njs:8,offset:.4,notes:194,bombs:0,obstacles:4,nps:1.017,length:318,characteristic:"Standard",difficulty:"Easy",events:3091,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:190.8,paritySummary:{errors:28,warns:5,resets:0}},{njs:10,offset:.2,notes:399,bombs:0,obstacles:4,nps:2.091,length:318,characteristic:"Standard",difficulty:"Normal",events:3091,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:190.8,paritySummary:{errors:25,warns:24,resets:0}},{njs:12,offset:0,notes:634,bombs:0,obstacles:4,nps:3.323,length:318,characteristic:"Standard",difficulty:"Hard",events:3091,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:190.8,paritySummary:{errors:4,warns:5,resets:0}},{njs:14,offset:0,notes:837,bombs:0,obstacles:11,nps:4.387,length:318,characteristic:"Standard",difficulty:"Expert",events:3091,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:190.8,paritySummary:{errors:20,warns:20,resets:0}},{njs:16,offset:.4,notes:948,bombs:0,obstacles:11,nps:4.969,length:318,characteristic:"Standard",difficulty:"ExpertPlus",events:3095,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:190.8,paritySummary:{errors:15,warns:15,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6b253cbb5a2a81c2575e0778614bf009d7954834.zip",coverURL:"https://cdn.beatsaver.com/6b253cbb5a2a81c2575e0778614bf009d7954834.jpg",previewURL:"https://cdn.beatsaver.com/6b253cbb5a2a81c2575e0778614bf009d7954834.mp3"}],createdAt:"2020-02-14T16:59:24.776Z",updatedAt:"2020-02-14T16:59:24.776Z",lastPublishedAt:"2020-02-14T16:59:24.776Z"},{id:"5335",name:"David Guetta, Martin Garrix & Brooks - Like I Do",description:"This map - trust me - is sensational..\nCheck out my lightshows here: https://www.youtube.com/playlist?list=PLwl6dYq72JOYu1BnKl5WATa4Dh__ZJmuN",uploader:{id:14808,name:"halcyon12",uniqueSet:!0,hash:"5cff0b7698cc5a672c8547ad",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8547ad?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:99,songName:"Like I Do",songSubName:"",songAuthorName:"David Guetta, Martin Garrix, Brooks",levelAuthorName:"Halcyon12"},stats:{plays:0,downloads:2486,upvotes:1153,downvotes:26,score:.9211},uploaded:"2019-06-16T19:05:31.814Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"59e1b8fa392e26bbcc528dcea08b80699efdbeb6",key:"5335",state:"Published",createdAt:"2019-06-16T19:05:31.814Z",sageScore:3,diffs:[{njs:11,offset:1,notes:171,bombs:0,obstacles:1,nps:1.91,length:191,characteristic:"Standard",difficulty:"Normal",events:4711,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:89.531,paritySummary:{errors:16,warns:3,resets:0}},{njs:13,offset:1,notes:234,bombs:0,obstacles:3,nps:2.6,length:192,characteristic:"Standard",difficulty:"Hard",events:4711,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:90,paritySummary:{errors:7,warns:0,resets:0}},{njs:15,offset:0,notes:305,bombs:4,obstacles:7,nps:3.407,length:191,characteristic:"Standard",difficulty:"Expert",events:4711,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:89.531,paritySummary:{errors:9,warns:6,resets:0}},{njs:17,offset:0,notes:397,bombs:12,obstacles:10,nps:4.411,length:192,characteristic:"Standard",difficulty:"ExpertPlus",events:4764,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:90,paritySummary:{errors:3,warns:2,resets:3}}],downloadURL:"https://cdn.beatsaver.com/59e1b8fa392e26bbcc528dcea08b80699efdbeb6.zip",coverURL:"https://cdn.beatsaver.com/59e1b8fa392e26bbcc528dcea08b80699efdbeb6.jpg",previewURL:"https://cdn.beatsaver.com/59e1b8fa392e26bbcc528dcea08b80699efdbeb6.mp3"}],createdAt:"2019-06-16T19:05:31.814Z",updatedAt:"2019-06-16T19:05:31.814Z",lastPublishedAt:"2019-06-16T19:05:31.814Z"},{id:"e44",name:"Big Girl (You Are Beautiful) - MIKA",description:"Prepare yourself for some big moves!\r\nPlaythrough : https://youtu.be/hzGaITR-648",uploader:{id:13320,name:"novashaft",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ee55",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee55?d=retro",type:"SIMPLE"},metadata:{bpm:116,duration:241,songName:"Big Girl (You Are Beatiful)",songSubName:"MIKA",songAuthorName:"NovaShaft",levelAuthorName:"novashaft"},stats:{plays:0,downloads:3095,upvotes:1222,downvotes:29,score:.9211},uploaded:"2018-08-07T12:02:28Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6c4f86a126cd7465ec536837f3e73874e07068ef",key:"e44",state:"Published",createdAt:"2018-08-07T12:02:28Z",sageScore:5,diffs:[{njs:10,offset:0,notes:855,bombs:0,obstacles:18,nps:3.723,length:444,characteristic:"Standard",difficulty:"Expert",events:645,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:229.655,paritySummary:{errors:56,warns:63,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6c4f86a126cd7465ec536837f3e73874e07068ef.zip",coverURL:"https://cdn.beatsaver.com/6c4f86a126cd7465ec536837f3e73874e07068ef.jpg",previewURL:"https://cdn.beatsaver.com/6c4f86a126cd7465ec536837f3e73874e07068ef.mp3"}],createdAt:"2018-08-07T12:02:28Z",updatedAt:"2018-08-07T12:02:28Z",lastPublishedAt:"2018-08-07T12:02:28Z"},{id:"6bfa",name:"Approaching Nirvana - Alone",description:"https://www.youtube.com/watch?v=lZvGn7RUC7c",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:170,songName:"Alone",songSubName:"",songAuthorName:"Approaching Nirvana",levelAuthorName:"Rustic"},stats:{plays:0,downloads:1796,upvotes:1032,downvotes:21,score:.921},uploaded:"2019-10-24T19:54:05.671Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ccf70e940a4ec45c70a8f3ae7be18a2ea771461d",key:"6bfa",state:"Published",createdAt:"2019-10-24T19:54:05.671Z",sageScore:6,diffs:[{njs:18,offset:0,notes:416,bombs:0,obstacles:1689,nps:2.558,length:347,characteristic:"Standard",difficulty:"Expert",events:3383,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:162.656,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ccf70e940a4ec45c70a8f3ae7be18a2ea771461d.zip",coverURL:"https://cdn.beatsaver.com/ccf70e940a4ec45c70a8f3ae7be18a2ea771461d.jpg",previewURL:"https://cdn.beatsaver.com/ccf70e940a4ec45c70a8f3ae7be18a2ea771461d.mp3"}],createdAt:"2019-10-24T19:54:05.671Z",updatedAt:"2019-10-24T19:54:05.671Z",lastPublishedAt:"2019-10-24T19:54:05.671Z"},{id:"6330",name:"dj-Jo - The Legend of Zelda Ocarina of Time Title Theme Remix",description:"Ocarina of Time is one of my favorites games for the N64. Hope you guys enjoy it as much as I did",uploader:{id:4285107,name:"kikaeaeon",uniqueSet:!0,hash:"5cff0b7498cc5a672c85109b",avatar:"https://cdn.beatsaver.com/avatar/103715469822816256.png",type:"DISCORD"},metadata:{bpm:165,duration:249,songName:"The Legend of Zelda Ocarina of Time Title Theme Remix",songSubName:"",songAuthorName:"dj-Jo",levelAuthorName:"KikaeAeon"},stats:{plays:0,downloads:2252,upvotes:670,downvotes:7,score:.9209},uploaded:"2019-09-13T19:15:16.984Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"35dffa3cbcaca2261d3bdd7306df9503fd9adc0f",key:"6330",state:"Published",createdAt:"2019-09-13T19:15:16.984Z",sageScore:6,diffs:[{njs:14,offset:0,notes:745,bombs:0,obstacles:28,nps:3.242,length:632,characteristic:"Standard",difficulty:"Expert",events:890,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:229.818,paritySummary:{errors:18,warns:7,resets:0}},{njs:16,offset:0,notes:955,bombs:0,obstacles:30,nps:4.155,length:632,characteristic:"Standard",difficulty:"ExpertPlus",events:1030,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:229.818,paritySummary:{errors:21,warns:17,resets:0}}],downloadURL:"https://cdn.beatsaver.com/35dffa3cbcaca2261d3bdd7306df9503fd9adc0f.zip",coverURL:"https://cdn.beatsaver.com/35dffa3cbcaca2261d3bdd7306df9503fd9adc0f.jpg",previewURL:"https://cdn.beatsaver.com/35dffa3cbcaca2261d3bdd7306df9503fd9adc0f.mp3"}],createdAt:"2019-09-13T19:15:16.984Z",updatedAt:"2019-09-13T19:15:16.984Z",lastPublishedAt:"2019-09-13T19:15:16.984Z"},{id:"217",name:"Beat it - Michael Jackson",description:"Easy/Normal/Hard/Expert - Obstacles and mines purely for dance moves! 100% Expert Playthrough: https://bit.ly/2IKzCp3\r\n\r\n- Freeek =)",uploader:{id:47581,name:"freeek",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8ad",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8ad?d=retro",type:"SIMPLE"},metadata:{bpm:139,duration:143,songName:"Beat it",songSubName:"Michael Jackson",songAuthorName:"Freeek",levelAuthorName:"freeek"},stats:{plays:0,downloads:19417,upvotes:15233,downvotes:887,score:.9209},uploaded:"2018-05-25T14:20:19Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"4b2da842b687ec4cfbc948c583c21c79d4120de0",key:"217",state:"Published",createdAt:"2018-05-25T14:20:19Z",sageScore:5,diffs:[{njs:10,offset:0,notes:188,bombs:0,obstacles:84,nps:1.431,length:303.875,characteristic:"Standard",difficulty:"Easy",events:878,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:131.169,paritySummary:{errors:0,warns:0,resets:0},stars:.39},{njs:10,offset:0,notes:219,bombs:40,obstacles:70,nps:1.667,length:304,characteristic:"Standard",difficulty:"Normal",events:878,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:131.223,paritySummary:{errors:29,warns:8,resets:1},stars:.64},{njs:10,offset:0,notes:386,bombs:42,obstacles:72,nps:2.937,length:304,characteristic:"Standard",difficulty:"Hard",events:878,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:131.223,paritySummary:{errors:80,warns:49,resets:4},stars:1.7},{njs:10,offset:0,notes:623,bombs:46,obstacles:69,nps:4.741,length:304,characteristic:"Standard",difficulty:"Expert",events:878,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:131.223,paritySummary:{errors:87,warns:31,resets:2}}],downloadURL:"https://cdn.beatsaver.com/4b2da842b687ec4cfbc948c583c21c79d4120de0.zip",coverURL:"https://cdn.beatsaver.com/4b2da842b687ec4cfbc948c583c21c79d4120de0.jpg",previewURL:"https://cdn.beatsaver.com/4b2da842b687ec4cfbc948c583c21c79d4120de0.mp3"}],createdAt:"2018-05-25T14:20:19Z",updatedAt:"2018-05-25T14:20:19Z",lastPublishedAt:"2018-05-25T14:20:19Z"},{id:"bb4",name:"Octopath Traveler Main Theme - Yasunori Nishiki",description:"SS Full Combo: https://www.youtube.com/watch?v=zhwpW6ZfBqo",uploader:{id:41168,name:"edzo",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f56a",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f56a?d=retro",type:"SIMPLE"},metadata:{bpm:264,duration:150,songName:"Octopath Traveler Main Theme",songSubName:"Yasunori Nishiki",songAuthorName:"Edzo",levelAuthorName:"edzo"},stats:{plays:0,downloads:1163,upvotes:518,downvotes:2,score:.9207},uploaded:"2018-07-25T01:41:47Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"4ba6575e63038cc8bb747f7c1e56bf2202d551be",key:"bb4",state:"Published",createdAt:"2018-07-25T01:41:47Z",sageScore:4,diffs:[{njs:10,offset:0,notes:505,bombs:0,obstacles:5,nps:3.45,length:644,characteristic:"Standard",difficulty:"Expert",events:666,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:146.364,paritySummary:{errors:46,warns:29,resets:0}}],downloadURL:"https://cdn.beatsaver.com/4ba6575e63038cc8bb747f7c1e56bf2202d551be.zip",coverURL:"https://cdn.beatsaver.com/4ba6575e63038cc8bb747f7c1e56bf2202d551be.jpg",previewURL:"https://cdn.beatsaver.com/4ba6575e63038cc8bb747f7c1e56bf2202d551be.mp3"}],createdAt:"2018-07-25T01:41:47Z",updatedAt:"2018-07-25T01:41:47Z",lastPublishedAt:"2018-07-25T01:41:47Z"},{id:"94cb",name:"Buttercup | By Jack Stauber | Charted By StyngMe |",description:"Difficulties: Hard\nEnjoy! <3",uploader:{id:30754,name:"styngme",uniqueSet:!1,hash:"5cff0b7298cc5a672c84e9cd",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9cd?d=retro",type:"SIMPLE"},metadata:{bpm:120,duration:202,songName:"Buttercup",songSubName:"",songAuthorName:"Jack Stauber",levelAuthorName:"StyngMe"},stats:{plays:0,downloads:1776,upvotes:692,downvotes:8,score:.9206},uploaded:"2020-03-29T01:21:28.921Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"eb750f2dcec62ac3a816583854dbdee4514d8581",key:"94cb",state:"Published",createdAt:"2020-03-29T01:21:28.921Z",sageScore:2,diffs:[{njs:14,offset:0,notes:441,bombs:112,obstacles:41,nps:2.297,length:384,characteristic:"Standard",difficulty:"Hard",events:658,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:32,warns:19,resets:8}}],downloadURL:"https://cdn.beatsaver.com/eb750f2dcec62ac3a816583854dbdee4514d8581.zip",coverURL:"https://cdn.beatsaver.com/eb750f2dcec62ac3a816583854dbdee4514d8581.jpg",previewURL:"https://cdn.beatsaver.com/eb750f2dcec62ac3a816583854dbdee4514d8581.mp3"}],createdAt:"2020-03-29T01:21:28.921Z",updatedAt:"2020-03-29T01:21:28.921Z",lastPublishedAt:"2020-03-29T01:21:28.921Z"},{id:"a3a",name:"Platinum Disco - Yuka Iguchi",description:"One of the OPs in Nisemonogatari\r\nI know its a bit easy for an expert map. tried to keep it's flow mostly.\r\nBPM : 117, Duration 4:14\r\nDifficulties: Easy, Normal, Hard, Expert\r\n\r\nDemo : https://youtu.be/EV07KuV_DrA",uploader:{id:47059,name:"rocket",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f1c0",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f1c0?d=retro",type:"SIMPLE"},metadata:{bpm:117,duration:254,songName:"Platinum Disco",songSubName:"Yuka Iguchi",songAuthorName:"Rocket",levelAuthorName:"rocket"},stats:{plays:0,downloads:3105,upvotes:1914,downvotes:63,score:.9205},uploaded:"2018-07-18T00:14:28Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a372fee60c26b5e35861c71d9c38b4ef60974e93",key:"a3a",state:"Published",createdAt:"2018-07-18T00:14:28Z",sageScore:5,diffs:[{njs:10,offset:0,notes:264,bombs:0,obstacles:27,nps:1.059,length:486,characteristic:"Standard",difficulty:"Easy",events:605,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:249.231,paritySummary:{errors:73,warns:54,resets:0}},{njs:10,offset:0,notes:483,bombs:0,obstacles:27,nps:1.938,length:486,characteristic:"Standard",difficulty:"Normal",events:605,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:249.231,paritySummary:{errors:82,warns:100,resets:0}},{njs:10,offset:0,notes:738,bombs:0,obstacles:27,nps:2.961,length:486,characteristic:"Standard",difficulty:"Hard",events:605,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:249.231,paritySummary:{errors:107,warns:118,resets:0}},{njs:10,offset:0,notes:845,bombs:0,obstacles:27,nps:3.39,length:486,characteristic:"Standard",difficulty:"Expert",events:604,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:249.231,paritySummary:{errors:128,warns:111,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a372fee60c26b5e35861c71d9c38b4ef60974e93.zip",coverURL:"https://cdn.beatsaver.com/a372fee60c26b5e35861c71d9c38b4ef60974e93.jpg",previewURL:"https://cdn.beatsaver.com/a372fee60c26b5e35861c71d9c38b4ef60974e93.mp3"}],createdAt:"2018-07-18T00:14:28Z",updatedAt:"2018-07-18T00:14:28Z",lastPublishedAt:"2018-07-18T00:14:28Z"},{id:"b8d7",name:"Contradiction [The God of High School Opening] - KSUKE ft. Tyler Carter",description:'Everyone step to the left. Wait, wrong song xD but it does have walls that make you go left right down up.\n\n"Contradiction" is KSUKE\'s latest Single featuring American singer Tyler Carter. It is used as the opening song in the upcoming Crunchyroll anime adaption of The God of High School.',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:130,duration:200,songName:"Contradiction",songSubName:"ft. Tyler Carter",songAuthorName:"KSUKE",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:9869,upvotes:1479,downvotes:42,score:.9204},uploaded:"2020-07-03T04:53:48.515Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"980cf4979240c9d2b1107a24d6143dd9b85f8098",key:"b8d7",state:"Published",createdAt:"2020-07-03T04:53:48.515Z",sageScore:4,diffs:[{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Standard",difficulty:"Easy",events:13893,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:12,offset:.35,notes:711,bombs:0,obstacles:70,nps:3.633,length:424,characteristic:"Standard",difficulty:"Hard",events:13893,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:195.692,paritySummary:{errors:4,warns:2,resets:0}},{njs:16,offset:-.25,notes:1075,bombs:0,obstacles:110,nps:5.493,length:424,characteristic:"Standard",difficulty:"Expert",events:13893,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:195.692,paritySummary:{errors:3,warns:4,resets:0}},{njs:20,offset:.4,notes:1219,bombs:0,obstacles:102,nps:6.229,length:424,characteristic:"Standard",difficulty:"ExpertPlus",events:13893,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:195.692,paritySummary:{errors:0,warns:10,resets:0}}],downloadURL:"https://cdn.beatsaver.com/980cf4979240c9d2b1107a24d6143dd9b85f8098.zip",coverURL:"https://cdn.beatsaver.com/980cf4979240c9d2b1107a24d6143dd9b85f8098.jpg",previewURL:"https://cdn.beatsaver.com/980cf4979240c9d2b1107a24d6143dd9b85f8098.mp3"}],createdAt:"2020-07-03T04:53:48.515Z",updatedAt:"2020-07-03T04:53:48.515Z",lastPublishedAt:"2020-07-03T04:53:48.515Z"},{id:"d565",name:"[FUTURE FUNK PACK] Idolstep Dreaming - Mikazuki BIGWAVE",description:'FUTURE FUNK MAP PACK\n2 songs uploaded everyday through August 10th - 14th!\n\n"Idolstep 夢見" by ミカヅキBIGWAVE was sampled from Hidemi Ishikawa\'s "めざめ" (Mezame). \n\nPlease look forward to the upcoming maps!\n\nDM any feedback on Discord\nETAN#8341',uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:105,duration:178,songName:"Idolstep Dreaming",songSubName:"",songAuthorName:"Mikazuki BIGWAVE",levelAuthorName:"ETAN"},stats:{plays:0,downloads:3733,upvotes:816,downvotes:13,score:.9203},uploaded:"2020-08-13T18:37:52.866Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"44bd3be82800591c926b63f16b02f34c85730130",key:"d565",state:"Published",createdAt:"2020-08-13T18:37:52.866Z",sageScore:6,diffs:[{njs:10,offset:1,notes:192,bombs:21,obstacles:37,nps:1.135,length:296,characteristic:"Standard",difficulty:"Easy",events:7255,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:169.143,paritySummary:{errors:4,warns:2,resets:2}},{njs:12,offset:.5,notes:224,bombs:21,obstacles:37,nps:1.324,length:296,characteristic:"Standard",difficulty:"Normal",events:7255,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:169.143,paritySummary:{errors:1,warns:0,resets:3}},{njs:12,offset:0,notes:361,bombs:19,obstacles:38,nps:2.134,length:296,characteristic:"Standard",difficulty:"Hard",events:7255,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:169.143,paritySummary:{errors:0,warns:0,resets:1}},{njs:14,offset:-.2,notes:570,bombs:19,obstacles:38,nps:3.347,length:298,characteristic:"Standard",difficulty:"Expert",events:7255,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:170.286,paritySummary:{errors:0,warns:0,resets:1}},{njs:16,offset:.5,notes:695,bombs:17,obstacles:34,nps:4.081,length:298,characteristic:"Standard",difficulty:"ExpertPlus",events:7255,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:170.286,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/44bd3be82800591c926b63f16b02f34c85730130.zip",coverURL:"https://cdn.beatsaver.com/44bd3be82800591c926b63f16b02f34c85730130.jpg",previewURL:"https://cdn.beatsaver.com/44bd3be82800591c926b63f16b02f34c85730130.mp3"}],createdAt:"2020-08-13T18:37:52.866Z",updatedAt:"2020-08-13T18:37:52.866Z",lastPublishedAt:"2020-08-13T18:37:52.866Z"},{id:"7b9a",name:"League of Legends - RISE (ft. The Glitch Mob, Mako, and The Word Alive)",description:"Prove yourself and RISE! Normal to Expert, custom lighting.\n\nExpert - 719 notes | 15 NJS | 0 bombs | 6 walls\nHard - 575 notes | 12 NJS | 0 bombs | 6 walls\nNormal - 411 notes | 10 NJS | 0 bombs | 6 walls",uploader:{id:30,name:"cookiesaber",uniqueSet:!0,hash:"5d1356c9f8b4040007dcb9fd",avatar:"https://www.gravatar.com/avatar/5d1356c9f8b4040007dcb9fd?d=retro",type:"SIMPLE"},metadata:{bpm:177,duration:194,songName:"RISE (ft. The Glitch Mob, Mako, and The Word Alive)",songSubName:"",songAuthorName:"League Of Legends",levelAuthorName:"cookie"},stats:{plays:0,downloads:4858,upvotes:1257,downvotes:32,score:.9202},uploaded:"2020-01-01T19:07:55.492Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0c296f8b51f4d7669987117f7b3fa68a1fd7d6b1",key:"7b9a",state:"Published",createdAt:"2020-01-01T19:07:55.492Z",sageScore:3,diffs:[{njs:10,offset:0,notes:411,bombs:0,obstacles:9,nps:2.323,length:522,characteristic:"Standard",difficulty:"Normal",events:874,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:176.949,paritySummary:{errors:14,warns:7,resets:0}},{njs:12,offset:0,notes:575,bombs:0,obstacles:6,nps:3.225,length:526,characteristic:"Standard",difficulty:"Hard",events:874,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.305,paritySummary:{errors:6,warns:6,resets:0}},{njs:15,offset:1,notes:719,bombs:0,obstacles:6,nps:4.032,length:526,characteristic:"Standard",difficulty:"Expert",events:875,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.305,paritySummary:{errors:19,warns:23,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0c296f8b51f4d7669987117f7b3fa68a1fd7d6b1.zip",coverURL:"https://cdn.beatsaver.com/0c296f8b51f4d7669987117f7b3fa68a1fd7d6b1.jpg",previewURL:"https://cdn.beatsaver.com/0c296f8b51f4d7669987117f7b3fa68a1fd7d6b1.mp3"}],createdAt:"2020-01-01T19:07:55.492Z",updatedAt:"2020-01-01T19:07:55.492Z",lastPublishedAt:"2020-01-01T19:07:55.492Z"},{id:"65e6",name:"Kamado Tanjiro no Uta - Kimetsu no Yaiba EP 19 ED",description:"Video https://youtu.be/szYb7faqnkQ\nVideo by Monteblanco: https://www.youtube.com/watch?v=aI7nCWuC-dc\nVideo by Rigid (PogU): https://youtu.be/pnETOIkHv-o",uploader:{id:14262,name:"suzuki.dll",uniqueSet:!0,hash:"5d664fb90a981e00064ede12",avatar:"https://cdn.beatsaver.com/avatar/14262.jpg",type:"SIMPLE"},metadata:{bpm:152,duration:329,songName:"Kamado Tanjiro no Uta",songSubName:"ft. Nami Nakagawa",songAuthorName:"Go Shiina",levelAuthorName:"Suzuki.DLL"},stats:{plays:0,downloads:2575,upvotes:1259,downvotes:32,score:.9202},uploaded:"2019-09-26T02:31:39.964Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"746847c0026657a7235d845b7d014335c47972da",key:"65e6",state:"Published",createdAt:"2019-09-26T02:31:39.964Z",sageScore:5,diffs:[{njs:12,offset:.5,notes:561,bombs:0,obstacles:173,nps:1.752,length:811,characteristic:"Standard",difficulty:"Hard",events:806,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:320.132,paritySummary:{errors:45,warns:34,resets:0}}],downloadURL:"https://cdn.beatsaver.com/746847c0026657a7235d845b7d014335c47972da.zip",coverURL:"https://cdn.beatsaver.com/746847c0026657a7235d845b7d014335c47972da.jpg",previewURL:"https://cdn.beatsaver.com/746847c0026657a7235d845b7d014335c47972da.mp3"}],createdAt:"2019-09-26T02:31:39.964Z",updatedAt:"2019-09-26T02:31:39.964Z",lastPublishedAt:"2019-09-26T02:31:39.964Z"},{id:"56b3",name:"Caravan Palace - Wonderland",description:"Easy, Normal, Hard, Expert, Expert+",uploader:{id:4235138,name:"CyanSnow",uniqueSet:!0,hash:"5cff0b7698cc5a672c8543ac",avatar:"https://cdn.beatsaver.com/avatar/154341137694326784.png",type:"DISCORD"},metadata:{bpm:104,duration:175,songName:"Wonderland",songSubName:"",songAuthorName:"Caravan Palace",levelAuthorName:"CyanSnow"},stats:{plays:0,downloads:4852,upvotes:2516,downvotes:95,score:.9202},uploaded:"2019-07-13T05:01:13.826Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5bdd8ddebcce1e19bcd10ca8921b0d1ab7624506",key:"56b3",state:"Published",createdAt:"2019-07-13T05:01:13.826Z",sageScore:7,diffs:[{njs:12,offset:1,notes:182,bombs:0,obstacles:0,nps:1.088,length:290,characteristic:"Standard",difficulty:"Easy",events:219,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:167.308,paritySummary:{errors:56,warns:7,resets:0}},{njs:12,offset:1,notes:255,bombs:0,obstacles:0,nps:1.524,length:290,characteristic:"Standard",difficulty:"Normal",events:292,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:167.308,paritySummary:{errors:29,warns:17,resets:0}},{njs:14,offset:0,notes:450,bombs:0,obstacles:0,nps:2.685,length:290.5,characteristic:"Standard",difficulty:"Hard",events:499,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:167.596,paritySummary:{errors:5,warns:4,resets:0}},{njs:15,offset:0,notes:487,bombs:0,obstacles:0,nps:2.906,length:290.5,characteristic:"Standard",difficulty:"Expert",events:525,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:167.596,paritySummary:{errors:4,warns:4,resets:0}},{njs:17,offset:.5,notes:713,bombs:5,obstacles:0,nps:4.243,length:291.25,characteristic:"Standard",difficulty:"ExpertPlus",events:797,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.029,paritySummary:{errors:8,warns:5,resets:0}}],downloadURL:"https://cdn.beatsaver.com/5bdd8ddebcce1e19bcd10ca8921b0d1ab7624506.zip",coverURL:"https://cdn.beatsaver.com/5bdd8ddebcce1e19bcd10ca8921b0d1ab7624506.jpg",previewURL:"https://cdn.beatsaver.com/5bdd8ddebcce1e19bcd10ca8921b0d1ab7624506.mp3"}],createdAt:"2019-07-13T05:01:13.826Z",updatedAt:"2019-07-13T05:01:13.826Z",lastPublishedAt:"2019-07-13T05:01:13.826Z"},{id:"4131",name:"Nevada feat. Cozi Zuehlsdorff - Vicetone",description:"YouTube Preview: https://youtu.be/3gb2gH8eueI",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:124,duration:209,songName:"Nevada (feat. Cozi Zuehlsdorff)",songSubName:"Vicetone",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:2091,upvotes:1257,downvotes:32,score:.9202},uploaded:"2019-03-27T18:42:01Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5e847d92de6e01dfd5ce3491969b3939b4374699",key:"4131",state:"Published",createdAt:"2019-03-27T18:42:01Z",sageScore:6,diffs:[{njs:10,offset:0,notes:387,bombs:0,obstacles:54,nps:1.932,length:414,characteristic:"Standard",difficulty:"Hard",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.323,paritySummary:{errors:70,warns:23,resets:0}},{njs:12,offset:0,notes:616,bombs:0,obstacles:54,nps:3.075,length:414,characteristic:"Standard",difficulty:"Expert",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.323,paritySummary:{errors:84,warns:55,resets:0}},{njs:14,offset:0,notes:868,bombs:0,obstacles:57,nps:4.333,length:414,characteristic:"Standard",difficulty:"ExpertPlus",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.323,paritySummary:{errors:74,warns:61,resets:0}}],downloadURL:"https://cdn.beatsaver.com/5e847d92de6e01dfd5ce3491969b3939b4374699.zip",coverURL:"https://cdn.beatsaver.com/5e847d92de6e01dfd5ce3491969b3939b4374699.jpg",previewURL:"https://cdn.beatsaver.com/5e847d92de6e01dfd5ce3491969b3939b4374699.mp3"}],createdAt:"2019-03-27T18:42:01Z",updatedAt:"2019-03-27T18:42:01Z",lastPublishedAt:"2019-03-27T18:42:01Z"},{id:"8b21",name:"Invaders Must Die - Prodigy",description:"It's time to get ready for some pumping beats and dancy moves with a beat map for a Prodigy song. With the full spread of skill levels, get ready to move and in the swing of the rhythm of this great track.\n\nThanks to Kival Evan and Sorukun for testing.",uploader:{id:32141,name:"amstradhero",uniqueSet:!0,hash:"5cff0b7698cc5a672c8551be",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8551be?d=retro",type:"SIMPLE"},metadata:{bpm:140,duration:266,songName:"Invaders Must Die",songSubName:"",songAuthorName:"Prodigy",levelAuthorName:"AmstradHero"},stats:{plays:0,downloads:3044,upvotes:1276,downvotes:33,score:.9201},uploaded:"2020-02-27T09:40:25.643Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"eaa2d06cfed4d6cd5b9e0b89d5860c88c7ca8be5",key:"8b21",state:"Published",createdAt:"2020-02-27T09:40:25.643Z",sageScore:7,diffs:[{njs:10,offset:0,notes:326,bombs:16,obstacles:28,nps:1.248,length:609.5,characteristic:"Standard",difficulty:"Easy",events:8086,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:261.214,paritySummary:{errors:17,warns:18,resets:7}},{njs:12,offset:1.35,notes:468,bombs:16,obstacles:31,nps:1.792,length:609.5,characteristic:"Standard",difficulty:"Normal",events:8084,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:261.214,paritySummary:{errors:26,warns:20,resets:8}},{njs:13,offset:1.125,notes:660,bombs:12,obstacles:31,nps:2.527,length:609.5,characteristic:"Standard",difficulty:"Hard",events:8084,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:261.214,paritySummary:{errors:36,warns:45,resets:5}},{njs:14,offset:1,notes:1102,bombs:8,obstacles:15,nps:4.219,length:609.5,characteristic:"Standard",difficulty:"Expert",events:8084,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:261.214,paritySummary:{errors:44,warns:69,resets:4}},{njs:16,offset:.5,notes:1141,bombs:4,obstacles:15,nps:4.368,length:609.5,characteristic:"Standard",difficulty:"ExpertPlus",events:8084,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:261.214,paritySummary:{errors:35,warns:57,resets:2}}],downloadURL:"https://cdn.beatsaver.com/eaa2d06cfed4d6cd5b9e0b89d5860c88c7ca8be5.zip",coverURL:"https://cdn.beatsaver.com/eaa2d06cfed4d6cd5b9e0b89d5860c88c7ca8be5.jpg",previewURL:"https://cdn.beatsaver.com/eaa2d06cfed4d6cd5b9e0b89d5860c88c7ca8be5.mp3"}],createdAt:"2020-02-27T09:40:25.643Z",updatedAt:"2020-02-27T09:40:25.643Z",lastPublishedAt:"2020-02-27T09:40:25.643Z"},{id:"57f1",name:"Impossible Geometry - The Stupendium ft. Chi-chi",description:"Watch the video here: https://www.youtube.com/watch?v=PnKxhbRqqx0",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:150,duration:211,songName:"Impossible Geometry",songSubName:"",songAuthorName:"The Stupendium ft. Chi-chi",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:1475,upvotes:1166,downvotes:28,score:.9201},uploaded:"2019-07-19T18:24:56.241Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"84b16b7e9fe6e3b8f356be4f2dc0edc0a4178228",key:"57f1",state:"Published",createdAt:"2019-07-19T18:24:56.241Z",sageScore:5,diffs:[{njs:14,offset:0,notes:628,bombs:12,obstacles:42,nps:3.244,length:484,characteristic:"Standard",difficulty:"Expert",events:5545,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.6,paritySummary:{errors:53,warns:61,resets:0}}],downloadURL:"https://cdn.beatsaver.com/84b16b7e9fe6e3b8f356be4f2dc0edc0a4178228.zip",coverURL:"https://cdn.beatsaver.com/84b16b7e9fe6e3b8f356be4f2dc0edc0a4178228.jpg",previewURL:"https://cdn.beatsaver.com/84b16b7e9fe6e3b8f356be4f2dc0edc0a4178228.mp3"}],createdAt:"2019-07-19T18:24:56.241Z",updatedAt:"2019-07-19T18:24:56.241Z",lastPublishedAt:"2019-07-19T18:24:56.241Z"},{id:"53f0",name:"Panini - Lil Nas X",description:"“Panini” is the second single from Lil Nas X’s debut EP, 7, following his hit song, “Old Town Road. In this song, Lil Nas talks about his old fanbase and compares them to Panini, a character from the popular TV Series Chowder.",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:77,duration:116,songName:"Panini",songSubName:"",songAuthorName:"Lil Nas X",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:3360,upvotes:1212,downvotes:30,score:.9201},uploaded:"2019-06-22T05:07:06.657Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6bb8e702d51055767fbc89df9ec81517e1d0e74c",key:"53f0",state:"Published",createdAt:"2019-06-22T05:07:06.657Z",sageScore:6,diffs:[{njs:14,offset:0,notes:388,bombs:0,obstacles:0,nps:3.482,length:143,characteristic:"Standard",difficulty:"Expert",events:1247,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:111.429,paritySummary:{errors:17,warns:21,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6bb8e702d51055767fbc89df9ec81517e1d0e74c.zip",coverURL:"https://cdn.beatsaver.com/6bb8e702d51055767fbc89df9ec81517e1d0e74c.jpg",previewURL:"https://cdn.beatsaver.com/6bb8e702d51055767fbc89df9ec81517e1d0e74c.mp3"}],createdAt:"2019-06-22T05:07:06.657Z",updatedAt:"2019-06-22T05:07:06.657Z",lastPublishedAt:"2019-06-22T05:07:06.657Z"},{id:"1060",name:"X Gon' Give It To Ya Maybe",description:"Preview: \r\nhttps://www.youtube.com/watch?v=Q71NI5ohXhI\r\n\r\nOriginal mashup: https://www.youtube.com/watch?v=Fegs-XVKgnM",uploader:{id:4286278,name:"ruckus",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f1d8",avatar:"https://cdn.beatsaver.com/avatar/239082462083284992.png",type:"DISCORD"},metadata:{bpm:120,duration:205,songName:"X Gon' Give It To Ya Maybe",songSubName:"oneboredjeu, Carly Rae Jepsen, DMX",songAuthorName:"Ruckus",levelAuthorName:"ruckus"},stats:{plays:0,downloads:4370,upvotes:2151,downvotes:76,score:.9201},uploaded:"2018-08-18T01:59:54Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b86e27ad9149c123b3a4f90b2bce62f656083b01",key:"1060",state:"Published",createdAt:"2018-08-18T01:59:54Z",sageScore:4,diffs:[{njs:14,offset:0,notes:815,bombs:0,obstacles:0,nps:4.163,length:391.5,characteristic:"Standard",difficulty:"Expert",events:1511,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:195.75,paritySummary:{errors:91,warns:118,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b86e27ad9149c123b3a4f90b2bce62f656083b01.zip",coverURL:"https://cdn.beatsaver.com/b86e27ad9149c123b3a4f90b2bce62f656083b01.jpg",previewURL:"https://cdn.beatsaver.com/b86e27ad9149c123b3a4f90b2bce62f656083b01.mp3"}],createdAt:"2018-08-18T01:59:54Z",updatedAt:"2018-08-18T01:59:54Z",lastPublishedAt:"2018-08-18T01:59:54Z"},{id:"5fc",name:"Waiting For Love - Avicii",description:"Avicii Waiting for love\r\nEasy, Normal, Hard, Expert\r\nRun Time : 3m 50s\r\nBPM 128.15\r\n\r\nFeedback would be greatly appreciated :)",uploader:{id:47059,name:"rocket",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f1c0",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f1c0?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:230,songName:"Waiting For Love",songSubName:"Avicii",songAuthorName:"Rocket",levelAuthorName:"rocket"},stats:{plays:0,downloads:12913,upvotes:5636,downvotes:276,score:.9201},uploaded:"2018-06-20T23:44:52Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"4b7cdfcf558f66acc4b7a506c2dd50fbd9a76354",key:"5fc",state:"Published",createdAt:"2018-06-20T23:44:52Z",sageScore:6,diffs:[{njs:10,offset:0,notes:266,bombs:8,obstacles:8,nps:1.184,length:480,characteristic:"Standard",difficulty:"Easy",events:1179,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225,paritySummary:{errors:62,warns:23,resets:0},stars:1.1},{njs:10,offset:0,notes:485,bombs:6,obstacles:8,nps:2.158,length:480,characteristic:"Standard",difficulty:"Normal",events:1181,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225,paritySummary:{errors:121,warns:51,resets:0},stars:1.54},{njs:10,offset:0,notes:742,bombs:14,obstacles:8,nps:3.302,length:479.966,characteristic:"Standard",difficulty:"Hard",events:1177,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:224.984,paritySummary:{errors:130,warns:53,resets:0}},{njs:10,offset:0,notes:875,bombs:11,obstacles:8,nps:3.893,length:480,characteristic:"Standard",difficulty:"Expert",events:1190,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225,paritySummary:{errors:125,warns:100,resets:0}}],downloadURL:"https://cdn.beatsaver.com/4b7cdfcf558f66acc4b7a506c2dd50fbd9a76354.zip",coverURL:"https://cdn.beatsaver.com/4b7cdfcf558f66acc4b7a506c2dd50fbd9a76354.jpg",previewURL:"https://cdn.beatsaver.com/4b7cdfcf558f66acc4b7a506c2dd50fbd9a76354.mp3"}],createdAt:"2018-06-20T23:44:52Z",updatedAt:"2018-06-20T23:44:52Z",lastPublishedAt:"2018-06-20T23:44:52Z"},{id:"a233",name:"[NoodleJams Vol.1] 5 Seconds of Summer - Teeth",description:"Coming down with the isolation blues? Why not check out my new release! This one includes my first time playing around with Chroma lighting, so make sure you download Chroma 2.0 from Mod Assistant! The lights were inspired by the music video for this track, including re-creating some of the effects shown in the video. A Lightshow is included if you'd like to just check them out separately.\n\nThanks to qwasyx, Dat360NoScope, Sorukun, helencarnate, Shutforever, Pyrowarfare, and ethan_mp4 for playtesting.\n\nAnd a special thanks to AaltopahWi for advice on using Chroma, Aeroluna for Chroma 2.0, and CyanSnow for Chroma conversion help!\n\nAnd now some song details:\nBPM: 139\nNotes: Ez - 401 ; N - 514 ; H - 630 ; Ex - 868 ; Ex+ - 946\nNPS: Ez - 1.93 ; N - 2.48 ; H - 3.04 ; Ex - 4.18 ; Ex+ - 4.56\nBombs: None!\nWalls: Ez - 55 ; N - 44 ; H - 34 ; Ex - 22 ; Ex+ - 28",uploader:{id:4285188,name:"fruhead",uniqueSet:!0,hash:"5cff0b7598cc5a672c852683",avatar:"https://cdn.beatsaver.com/avatar/174000100413145090.png",type:"DISCORD"},metadata:{bpm:139,duration:207,songName:"Teeth",songSubName:"",songAuthorName:"5 Seconds of Summer",levelAuthorName:"fruhead"},stats:{plays:0,downloads:4256,upvotes:884,downvotes:16,score:.92},uploaded:"2020-05-04T04:13:11.364Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0986c659b17b62f13098ff3598d781942eac9092",key:"a233",state:"Published",createdAt:"2020-05-04T04:13:11.364Z",sageScore:7,diffs:[{njs:10,offset:-.5,notes:401,bombs:0,obstacles:55,nps:2.002,length:464,characteristic:"Standard",difficulty:"Easy",events:8266,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:200.288,paritySummary:{errors:49,warns:8,resets:0}},{njs:12,offset:.7,notes:514,bombs:0,obstacles:44,nps:2.566,length:464,characteristic:"Standard",difficulty:"Normal",events:8266,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:200.288,paritySummary:{errors:8,warns:4,resets:0}},{njs:14,offset:.3,notes:630,bombs:0,obstacles:34,nps:3.145,length:464,characteristic:"Standard",difficulty:"Hard",events:8266,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:200.288,paritySummary:{errors:5,warns:4,resets:0}},{njs:15,offset:.2,notes:868,bombs:0,obstacles:24,nps:4.334,length:464,characteristic:"Standard",difficulty:"Expert",events:8266,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:200.288,paritySummary:{errors:4,warns:2,resets:0}},{njs:17,offset:0,notes:946,bombs:0,obstacles:28,nps:4.723,length:464.063,characteristic:"Standard",difficulty:"ExpertPlus",events:8266,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:200.315,paritySummary:{errors:4,warns:2,resets:0}},{njs:12,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:8266,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0986c659b17b62f13098ff3598d781942eac9092.zip",coverURL:"https://cdn.beatsaver.com/0986c659b17b62f13098ff3598d781942eac9092.jpg",previewURL:"https://cdn.beatsaver.com/0986c659b17b62f13098ff3598d781942eac9092.mp3"}],createdAt:"2020-05-04T04:13:11.364Z",updatedAt:"2020-05-04T04:13:11.364Z",lastPublishedAt:"2020-05-04T04:13:11.364Z"},{id:"cb19",name:"[Extra Sensory] Mick Gordon - At DOOM's Gate",description:'Rip and tear\n\n\nExtra super huge thank you to the following people for making this possible\nAeroluna- For making Noodle Extensions and updating Chroma\nReaxt- For helping with making the scripts used to create this map and for inspiring us to continue through with this project.\nArti- For making the core mod that allowed Noodle Extensions and Chroma to support the new values\n\nAnd thank you for putting up with my shit during this (again) :)\n\nThis map was released as a part of the "Extra Sensory" event.\n\nVideo: https://www.youtube.com/watch?v=21JWpIWhqjg',uploader:{id:4235138,name:"CyanSnow",uniqueSet:!0,hash:"5cff0b7698cc5a672c8543ac",avatar:"https://cdn.beatsaver.com/avatar/154341137694326784.png",type:"DISCORD"},metadata:{bpm:161,duration:72,songName:"At DOOM's Gate",songSubName:"",songAuthorName:"Mick Gordon",levelAuthorName:"CyanSnow"},stats:{plays:0,downloads:7731,upvotes:2500,downvotes:95,score:.9199},uploaded:"2020-07-31T01:44:50.965Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b0ea07691e483e7f5b2d9a2daf6774b512a68855",key:"cb19",state:"Published",createdAt:"2020-07-31T01:44:50.965Z",sageScore:3,diffs:[{njs:19,offset:0,notes:342,bombs:0,obstacles:4190,nps:5.305,length:173,characteristic:"Standard",difficulty:"ExpertPlus",events:261,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:64.472,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b0ea07691e483e7f5b2d9a2daf6774b512a68855.zip",coverURL:"https://cdn.beatsaver.com/b0ea07691e483e7f5b2d9a2daf6774b512a68855.jpg",previewURL:"https://cdn.beatsaver.com/b0ea07691e483e7f5b2d9a2daf6774b512a68855.mp3"}],createdAt:"2020-07-31T01:44:50.965Z",updatedAt:"2020-07-31T01:44:50.965Z",lastPublishedAt:"2020-07-31T01:44:50.965Z"},{id:"570d",name:"Duel of the Fates (Techno Remix) - Star Wars",description:'|-o-| *Mapping Extensions Required* |-o-|\n"Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering."\nA Collab Between myself and EpicEwok. Audio Edit by Kolezan <3\nNotes Per Second:\nEasy / 1.2\nNormal / 1.5\nHard / 2.6\nExpert / 3.3\nExpert+ / 4.7\nSingle Saber (Expert) / 3.0\nFor Quest Users, we have a version without the walls for you here: https://beatsaver.com/beatmap/570c\nExpert+ Playthrough: https://streamable.com/3sftt\n',uploader:{id:11373,name:"redmagi",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e9d2",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9d2?d=retro",type:"SIMPLE"},metadata:{bpm:140,duration:252,songName:"Duel of the Fates ",songSubName:"",songAuthorName:"Techno Remix",levelAuthorName:"Sha3dy D3stiny"},stats:{plays:0,downloads:9452,upvotes:2313,downvotes:85,score:.9199},uploaded:"2019-07-14T20:18:06.134Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"65c578117df8bae1c83c98b43e4218b23a8de3f3",key:"570d",state:"Published",createdAt:"2019-07-14T20:18:06.134Z",sageScore:7,diffs:[{njs:12,offset:0,notes:307,bombs:0,obstacles:190,nps:1.282,length:558.755,characteristic:"Standard",difficulty:"Easy",events:6138,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:239.466,paritySummary:{errors:32,warns:6,resets:0}},{njs:12,offset:0,notes:376,bombs:0,obstacles:190,nps:1.571,length:558.63,characteristic:"Standard",difficulty:"Normal",events:1272,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:239.413,paritySummary:{errors:14,warns:10,resets:0}},{njs:14,offset:0,notes:669,bombs:0,obstacles:190,nps:2.794,length:558.797,characteristic:"Standard",difficulty:"Hard",events:1272,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:239.484,paritySummary:{errors:15,warns:21,resets:0}},{njs:15,offset:0,notes:832,bombs:0,obstacles:190,nps:3.474,length:558.792,characteristic:"Standard",difficulty:"Expert",events:6138,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:239.482,paritySummary:{errors:33,warns:39,resets:0}},{njs:16,offset:0,notes:1191,bombs:0,obstacles:190,nps:4.97,length:559.125,characteristic:"Standard",difficulty:"ExpertPlus",events:6138,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:239.625,paritySummary:{errors:49,warns:67,resets:0}},{njs:15,offset:0,notes:750,bombs:0,obstacles:190,nps:3.131,length:558.917,characteristic:"OneSaber",difficulty:"Expert",events:6138,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:239.536,paritySummary:{errors:48,warns:70,resets:0}}],downloadURL:"https://cdn.beatsaver.com/65c578117df8bae1c83c98b43e4218b23a8de3f3.zip",coverURL:"https://cdn.beatsaver.com/65c578117df8bae1c83c98b43e4218b23a8de3f3.jpg",previewURL:"https://cdn.beatsaver.com/65c578117df8bae1c83c98b43e4218b23a8de3f3.mp3"}],createdAt:"2019-07-14T20:18:06.134Z",updatedAt:"2019-07-14T20:18:06.134Z",lastPublishedAt:"2019-07-14T20:18:06.134Z"},{id:"4fe8",name:"Red Like Roses [One Saber] (RWBY: Volume 1 Soundtrack) - Jeff Williams ft. Casey Lee Williams",description:"Red like roses in one saber! Finally y'all can play this with a custom crescent rose saber and not look weird holding two! Further improved the sync on this from the original v2 of red like roses. Not all beats were mapped because its hard to hit consistent non stop 1/4s with only one saber but the ending section is still pretty tiring so prepare your arm :P. Map comes in two shades of Crescent Red.",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:200,duration:194,songName:"Red Like Roses (One Saber)",songSubName:"Jeff Williams ft. Casey Lee Williams",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:3763,upvotes:648,downvotes:7,score:.9199},uploaded:"2019-05-30T13:34:51Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0fdfb6fb8788f52b78c981c85cf9f316e4b6f232",key:"4fe8",state:"Published",createdAt:"2019-05-30T13:34:51Z",sageScore:5,diffs:[{njs:14,offset:0,notes:463,bombs:2,obstacles:22,nps:2.47,length:627.987,characteristic:"OneSaber",difficulty:"Expert",events:641,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.396,paritySummary:{errors:18,warns:18,resets:1}}],downloadURL:"https://cdn.beatsaver.com/0fdfb6fb8788f52b78c981c85cf9f316e4b6f232.zip",coverURL:"https://cdn.beatsaver.com/0fdfb6fb8788f52b78c981c85cf9f316e4b6f232.jpg",previewURL:"https://cdn.beatsaver.com/0fdfb6fb8788f52b78c981c85cf9f316e4b6f232.mp3"}],createdAt:"2019-05-30T13:34:51Z",updatedAt:"2019-05-30T13:34:51Z",lastPublishedAt:"2019-05-30T13:34:51Z"},{id:"1bf",name:"Caravan Palace - Lone Digger",description:"Caravan Palace - Lone Digger\r\nEasy | Normal | Hard | Expert\r\nThis is a re-upload of my previous map, with improvements for hard, and a new, harder expert difficulty mapped by Squeaksies, as well as lower difficulties as iterations on my original map.\r\n\r\nBPM: 124\r\nDuration: 2:49\r\nNotes (Hard): 730\r\nNotes (Expert): 735\r\nPreview (Hard): https://youtu.be/NExvLUyeBUU\r\nPreview (Expert): https://youtu.be/NYmExXlpB0k",uploader:{id:45732,name:"calijor",uniqueSet:!1,hash:"5cff0b7298cc5a672c84ebb1",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ebb1?d=retro",type:"SIMPLE"},metadata:{bpm:124,duration:170,songName:"Lone Digger",songSubName:"",songAuthorName:"Caravan Palace",levelAuthorName:"calijor"},stats:{plays:0,downloads:13174,upvotes:16427,downvotes:987,score:.9199},uploaded:"2018-05-23T00:15:19Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"906160fd1f808e2f34f33c2ca5920118855c065d",key:"1bf",state:"Published",createdAt:"2018-05-23T00:15:19Z",sageScore:5,diffs:[{njs:10,offset:0,notes:313,bombs:0,obstacles:27,nps:1.931,length:334.938,characteristic:"Standard",difficulty:"Easy",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:162.067,paritySummary:{errors:80,warns:32,resets:0},stars:1.2},{njs:10,offset:0,notes:480,bombs:0,obstacles:27,nps:2.953,length:335.938,characteristic:"Standard",difficulty:"Normal",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:162.55,paritySummary:{errors:56,warns:112,resets:0}},{njs:10,offset:0,notes:730,bombs:0,obstacles:27,nps:4.491,length:335.938,characteristic:"Standard",difficulty:"Hard",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:162.55,paritySummary:{errors:157,warns:122,resets:0}},{njs:10,offset:0,notes:735,bombs:11,obstacles:2,nps:4.555,length:333.5,characteristic:"Standard",difficulty:"Expert",events:1198,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:161.371,paritySummary:{errors:163,warns:131,resets:5}}],downloadURL:"https://cdn.beatsaver.com/906160fd1f808e2f34f33c2ca5920118855c065d.zip",coverURL:"https://cdn.beatsaver.com/906160fd1f808e2f34f33c2ca5920118855c065d.jpg",previewURL:"https://cdn.beatsaver.com/906160fd1f808e2f34f33c2ca5920118855c065d.mp3"}],createdAt:"2018-05-23T00:15:19Z",updatedAt:"2018-05-23T00:15:19Z",lastPublishedAt:"2018-05-23T00:15:19Z"},{id:"17195",name:"Ayunda Risu - KING",description:"There's a lotta covers of KING, but Risu's definitely takes the cake\n\nThis was a special request from a good friend of mine\n\nDifficulties |\nExpert+\nExpert\nHard\nNormal\nEasy\n\nThank you for playing\n\nDM any feedback on Discord\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:166,duration:137,songName:"KING",songSubName:"",songAuthorName:"Ayunda Risu",levelAuthorName:"ETAN"},stats:{plays:0,downloads:3066,upvotes:829,downvotes:14,score:.9198},uploaded:"2021-04-24T01:55:50.843Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0d191cd2dfe9404e4f58b5520bbc9b7b9cafa8c7",key:"17195",state:"Published",createdAt:"2021-04-24T01:55:50.843Z",sageScore:6,diffs:[{njs:10,offset:0,notes:158,bombs:0,obstacles:11,nps:1.228,length:356,characteristic:"Standard",difficulty:"Easy",events:5937,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:128.675,paritySummary:{errors:16,warns:2,resets:0}},{njs:12,offset:0,notes:206,bombs:0,obstacles:11,nps:1.601,length:356,characteristic:"Standard",difficulty:"Normal",events:5937,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:128.675,paritySummary:{errors:26,warns:0,resets:0}},{njs:13,offset:.75,notes:397,bombs:0,obstacles:11,nps:3.06,length:359,characteristic:"Standard",difficulty:"Hard",events:5937,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:129.759,paritySummary:{errors:0,warns:0,resets:0}},{njs:15,offset:.2,notes:528,bombs:0,obstacles:11,nps:3.98,length:367,characteristic:"Standard",difficulty:"Expert",events:5937,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:132.651,paritySummary:{errors:0,warns:0,resets:0}},{njs:17,offset:-.2,notes:716,bombs:0,obstacles:11,nps:5.398,length:367,characteristic:"Standard",difficulty:"ExpertPlus",events:5937,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:132.651,paritySummary:{errors:0,warns:3,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0d191cd2dfe9404e4f58b5520bbc9b7b9cafa8c7.zip",coverURL:"https://cdn.beatsaver.com/0d191cd2dfe9404e4f58b5520bbc9b7b9cafa8c7.jpg",previewURL:"https://cdn.beatsaver.com/0d191cd2dfe9404e4f58b5520bbc9b7b9cafa8c7.mp3"}],createdAt:"2021-04-24T01:55:50.843Z",updatedAt:"2021-04-24T01:55:50.843Z",lastPublishedAt:"2021-04-24T01:55:50.843Z"},{id:"142ea",name:"K/DA - VILLAIN (ft. Madison Beer, Kim Petras)",description:"From the unofficial music pack (K/DA ALL OUT) on BSaber.com\nPack: https://bsaber.com/kda-all-out/\nTrailer: https://youtu.be/e1ry_H86zqg\nPreview (Expert+): https://youtu.be/hrNAqEg6XPo\nLightshow: https://youtu.be/ZIqbGM4GjPc\n__________\nCredits🤍\nMapper: Sotarks\nLighter: Sotarks\nCurators: Pixelguy, JohnnyDee & joey\nSpecial Thanks: eliotttate & Belaya\nTrailer: Tuffiii\n__________\nCheck out K/DA🤍\nhttps://twitter.com/kda_music\nhttps://linktr.ee/kda_music\nProduced by Riot Games",uploader:{id:2523,name:"sotarks",uniqueSet:!0,hash:"5cff0b7698cc5a672c8541fd",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8541fd?d=retro",type:"SIMPLE"},metadata:{bpm:160,duration:201,songName:"VILLAIN",songSubName:"",songAuthorName:"K/DA",levelAuthorName:"Sotarks"},stats:{plays:0,downloads:12713,upvotes:1439,downvotes:41,score:.9198},uploaded:"2021-02-17T18:04:42.442Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d0c3395e0cce21f1e03ea9352543e4aaef74b902",key:"142ea",state:"Published",createdAt:"2021-02-17T18:04:42.442Z",sageScore:7,diffs:[{njs:12,offset:-1.4371349,notes:225,bombs:0,obstacles:179,nps:1.174,length:511,characteristic:"Standard",difficulty:"Easy",events:2930,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.625,paritySummary:{errors:39,warns:1,resets:0}},{njs:12,offset:-1.4361658,notes:303,bombs:0,obstacles:139,nps:1.581,length:511,characteristic:"Standard",difficulty:"Normal",events:2930,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.625,paritySummary:{errors:3,warns:0,resets:0}},{njs:14,offset:.19046581,notes:526,bombs:0,obstacles:170,nps:2.667,length:526,characteristic:"Standard",difficulty:"Hard",events:2930,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.25,paritySummary:{errors:5,warns:0,resets:0}},{njs:16,offset:-.0027478295,notes:738,bombs:4,obstacles:177,nps:3.741,length:526,characteristic:"Standard",difficulty:"Expert",events:2930,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.25,paritySummary:{errors:2,warns:0,resets:1}},{njs:18,offset:-.3,notes:900,bombs:156,obstacles:121,nps:4.563,length:526,characteristic:"Standard",difficulty:"ExpertPlus",events:2985,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.25,paritySummary:{errors:2,warns:11,resets:9}}],downloadURL:"https://cdn.beatsaver.com/d0c3395e0cce21f1e03ea9352543e4aaef74b902.zip",coverURL:"https://cdn.beatsaver.com/d0c3395e0cce21f1e03ea9352543e4aaef74b902.jpg",previewURL:"https://cdn.beatsaver.com/d0c3395e0cce21f1e03ea9352543e4aaef74b902.mp3"}],createdAt:"2021-02-17T18:04:42.442Z",updatedAt:"2021-02-17T18:04:42.442Z",lastPublishedAt:"2021-02-17T18:04:42.442Z"},{id:"850a",name:"Ellie Goulding - Lights",description:"Wanted to map this for a little while, really fun song that I know should make for a fun map (hopefully I was able to deliver that)\n\nThanks to Sorukun and Eku for feedback and testing\n\nEnjoy!",uploader:{id:4286161,name:"amuga",uniqueSet:!0,hash:"5e0a61e546a0710006590f49",avatar:"https://cdn.beatsaver.com/avatar/92425939555713024.png",type:"DISCORD"},metadata:{bpm:120,duration:213,songName:"Lights",songSubName:"",songAuthorName:"Ellie Goulding",levelAuthorName:"Amuga"},stats:{plays:0,downloads:2383,upvotes:752,downvotes:11,score:.9198},uploaded:"2020-02-08T00:21:39.641Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"3b3ef5f5438e7928fdb747004308e8a8d6a23dc8",key:"850a",state:"Published",createdAt:"2020-02-08T00:21:39.641Z",sageScore:4,diffs:[{njs:16,offset:-.25,notes:921,bombs:0,obstacles:13,nps:4.433,length:415.5,characteristic:"Standard",difficulty:"ExpertPlus",events:2299,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.75,paritySummary:{errors:1,warns:1,resets:0}}],downloadURL:"https://cdn.beatsaver.com/3b3ef5f5438e7928fdb747004308e8a8d6a23dc8.zip",coverURL:"https://cdn.beatsaver.com/3b3ef5f5438e7928fdb747004308e8a8d6a23dc8.jpg",previewURL:"https://cdn.beatsaver.com/3b3ef5f5438e7928fdb747004308e8a8d6a23dc8.mp3"}],createdAt:"2020-02-08T00:21:39.641Z",updatedAt:"2020-02-08T00:21:39.641Z",lastPublishedAt:"2020-02-08T00:21:39.641Z"},{id:"332f",name:"Spin Me Around (Spin Edition) - Dead or Alive",description:'*DISCLAIMER*\r\nThere are optional Dot "Freestyle" Sections in this one! Be careful when attempting spins!\r\n*YOU HAVE BEEN WARNED!*\r\n\r\nExpert+ has a few 1/4 beat hits, but is otherwise the same as Expert. Both Expert and Expert+ have the Dot Freestyle sections.\r\n\r\nNotes per Second / Video Play-through:\r\nEasy: 1.7 / https://streamable.com/t95t1\r\nNormal: 2 / https://streamable.com/al3de\r\nHard: 2.5 / https://streamable.com/5z1h5\r\nExpert: 3.9 / https://streamable.com/lq07e\r\nExpert+: 4.2 / https://streamable.com/dfygc (With FREESTYLE Moves!)\r\n\r\nMany Thanks to Aggro for the inspiration for this VERY SILLY spin move and Fromen for letting me use his map as a baseline for this!',uploader:{id:11373,name:"redmagi",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e9d2",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9d2?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:188,songName:"Spin Me Round (Spin Edition)",songSubName:"Dead or Alive",songAuthorName:"Redmagi",levelAuthorName:"redmagi"},stats:{plays:0,downloads:4271,upvotes:1418,downvotes:40,score:.9198},uploaded:"2019-02-03T02:19:40Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1274bb0c32bb9e5bdb677ca7eca18a45d454aaf7",key:"332f",state:"Published",createdAt:"2019-02-03T02:19:40Z",sageScore:7,diffs:[{njs:10,offset:0,notes:318,bombs:0,obstacles:0,nps:1.732,length:392,characteristic:"Standard",difficulty:"Easy",events:11030,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.75,paritySummary:{errors:38,warns:25,resets:0}},{njs:10,offset:0,notes:370,bombs:0,obstacles:2,nps:2.016,length:392,characteristic:"Standard",difficulty:"Normal",events:11030,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.75,paritySummary:{errors:30,warns:15,resets:0}},{njs:10,offset:0,notes:479,bombs:0,obstacles:1,nps:2.609,length:392,characteristic:"Standard",difficulty:"Hard",events:11030,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.75,paritySummary:{errors:43,warns:89,resets:0}},{njs:12,offset:0,notes:743,bombs:0,obstacles:0,nps:4.047,length:392,characteristic:"Standard",difficulty:"Expert",events:11030,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.75,paritySummary:{errors:32,warns:56,resets:0}},{njs:14,offset:0,notes:792,bombs:0,obstacles:0,nps:4.314,length:392,characteristic:"Standard",difficulty:"ExpertPlus",events:11030,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.75,paritySummary:{errors:35,warns:70,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1274bb0c32bb9e5bdb677ca7eca18a45d454aaf7.zip",coverURL:"https://cdn.beatsaver.com/1274bb0c32bb9e5bdb677ca7eca18a45d454aaf7.jpg",previewURL:"https://cdn.beatsaver.com/1274bb0c32bb9e5bdb677ca7eca18a45d454aaf7.mp3"}],createdAt:"2019-02-03T02:19:40Z",updatedAt:"2019-02-03T02:19:40Z",lastPublishedAt:"2019-02-03T02:19:40Z"},{id:"9bdb",name:"Everything Black (feat. Mike Taylor) - Unlike Pluto",description:"This song is special to me :) Hope you enjoy!\n\nMaul-map by Trolav. Check out his other fantastic maps here -> https://beatsaver.com/uploader/5cff0b7598cc5a672c85368e\nExpert by Checkthepan. Check out his other awesome maps here -> https://beatsaver.com/uploader/5cff0b7398cc5a672c84f3d5\nExpert+ by me.\n\nPreviews:\n\nExpert+: https://youtu.be/gO2pLki8Hic\n\nExpert: https://youtu.be/oTF1tW2AKtg\n\nWann give some feedback? Hit me up on discord -> JohnnyDee#0002",uploader:{id:1991,name:"johnnydee",uniqueSet:!0,hash:"5d3e1593130e0e00069019f7",avatar:"https://www.gravatar.com/avatar/5d3e1593130e0e00069019f7?d=retro",type:"SIMPLE"},metadata:{bpm:98,duration:230,songName:"Everything Black",songSubName:"(feat. Mike Taylor)",songAuthorName:"Unlike Pluto",levelAuthorName:"Ramen Noodle"},stats:{plays:0,downloads:1934,upvotes:1017,downvotes:22,score:.9197},uploaded:"2020-04-17T07:02:17.945Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0d005c0ae0b1e3ff7c43aef0dbc7d40fdb02d8fb",key:"9bdb",state:"Published",createdAt:"2020-04-17T07:02:17.945Z",sageScore:5,diffs:[{njs:15,offset:.4,notes:714,bombs:0,obstacles:6,nps:3.167,length:368.188,characteristic:"Standard",difficulty:"Expert",events:2661,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225.421,paritySummary:{errors:1,warns:1,resets:0}},{njs:17,offset:.4,notes:767,bombs:0,obstacles:122,nps:3.403,length:368.094,characteristic:"Standard",difficulty:"ExpertPlus",events:2250,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225.364,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:.2,notes:717,bombs:0,obstacles:122,nps:3.182,length:368,characteristic:"NoArrows",difficulty:"Expert",events:2248,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225.306,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0d005c0ae0b1e3ff7c43aef0dbc7d40fdb02d8fb.zip",coverURL:"https://cdn.beatsaver.com/0d005c0ae0b1e3ff7c43aef0dbc7d40fdb02d8fb.jpg",previewURL:"https://cdn.beatsaver.com/0d005c0ae0b1e3ff7c43aef0dbc7d40fdb02d8fb.mp3"}],createdAt:"2020-04-17T07:02:17.945Z",updatedAt:"2020-04-17T07:02:17.945Z",lastPublishedAt:"2020-04-17T07:02:17.945Z"},{id:"fc05",name:"EVERGLOW - LA DI DA",description:"This is a map, there's 3 difficulties which are respectively pretty hard for what they should be. \nExpert+ Preview: https://youtu.be/W8JN3NSaX9A\nRequests or complaints - Discord: SimplyMarvellous#0290 ",uploader:{id:4285134,name:"simplymarvellous",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f7a8",avatar:"https://cdn.beatsaver.com/avatar/189618441429319680.png",type:"DISCORD"},metadata:{bpm:164,duration:213,songName:"LA DI DA",songSubName:"",songAuthorName:"EVERGLOW",levelAuthorName:"simplymarvellous"},stats:{plays:0,downloads:7650,upvotes:825,downvotes:14,score:.9196},uploaded:"2020-10-09T07:03:45.316Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"000fbcb46c41cd0c363a80ae389333f7625e0921",key:"fc05",state:"Published",createdAt:"2020-10-09T07:03:45.316Z",sageScore:4,diffs:[{njs:14,offset:.4,notes:651,bombs:36,obstacles:166,nps:3.138,length:567,characteristic:"Standard",difficulty:"Hard",events:9456,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.439,paritySummary:{errors:1,warns:0,resets:12}},{njs:16,offset:0,notes:811,bombs:36,obstacles:172,nps:3.91,length:567,characteristic:"Standard",difficulty:"Expert",events:9456,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.439,paritySummary:{errors:0,warns:0,resets:9}},{njs:18,offset:-.4,notes:934,bombs:26,obstacles:172,nps:4.503,length:567,characteristic:"Standard",difficulty:"ExpertPlus",events:9456,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.439,paritySummary:{errors:0,warns:4,resets:6}}],downloadURL:"https://cdn.beatsaver.com/000fbcb46c41cd0c363a80ae389333f7625e0921.zip",coverURL:"https://cdn.beatsaver.com/000fbcb46c41cd0c363a80ae389333f7625e0921.jpg",previewURL:"https://cdn.beatsaver.com/000fbcb46c41cd0c363a80ae389333f7625e0921.mp3"}],createdAt:"2020-10-09T07:03:45.316Z",updatedAt:"2020-10-09T07:03:45.316Z",lastPublishedAt:"2020-10-09T07:03:45.316Z"},{id:"2b13",name:"Viva La Vida - Coldplay",description:"Love Viva La Vida, was one of my favorite childhood songs from Coldplay. 9 Years later, this song ages like fine wine. Just like Grenade, I brought this song off itunes so its the highest quality file you can get :)",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:138,duration:243,songName:"Viva La Vida",songSubName:"Coldplay",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:5911,upvotes:1934,downvotes:66,score:.9196},uploaded:"2019-01-05T06:02:16Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"023f19dd2ae57e43b99d62c837d1c708020f635d",key:"2b13",state:"Published",createdAt:"2019-01-05T06:02:16Z",sageScore:5,diffs:[{njs:14,offset:0,notes:919,bombs:0,obstacles:41,nps:4.136,length:511,characteristic:"Standard",difficulty:"Hard",events:714,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:222.174,paritySummary:{errors:41,warns:35,resets:0}}],downloadURL:"https://cdn.beatsaver.com/023f19dd2ae57e43b99d62c837d1c708020f635d.zip",coverURL:"https://cdn.beatsaver.com/023f19dd2ae57e43b99d62c837d1c708020f635d.jpg",previewURL:"https://cdn.beatsaver.com/023f19dd2ae57e43b99d62c837d1c708020f635d.mp3"}],createdAt:"2019-01-05T06:02:16Z",updatedAt:"2019-01-05T06:02:16Z",lastPublishedAt:"2019-01-05T06:02:16Z"},{id:"21",name:"REOL feat. nqrse - LUVORATORRRRRY!",description:"Hard (353 notes) / Hard+ (455 notes) / Expert (526 notes) / 15 Obstacles / Video Demonstration: https://streamable.com/23ayv / Part 1 of the J-EDM Graduation series! Use this song pack to level up your game!",uploader:{id:48853,name:"datkami",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8a3",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8a3?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:139,songName:"LUVORATORRRRRY!",songSubName:"feat.nqrse",songAuthorName:"Reol",levelAuthorName:"datkami"},stats:{plays:0,downloads:4483,upvotes:4237,downvotes:195,score:.9196},uploaded:"2018-05-10T02:24:36Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c807689fefdae82aa79ba9c7f861118fb426b4cc",key:"21",state:"Published",createdAt:"2018-05-10T02:24:36Z",sageScore:5,diffs:[{njs:10,offset:0,notes:353,bombs:4,obstacles:15,nps:2.624,length:287,characteristic:"Standard",difficulty:"Normal",events:6e3,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:134.531,paritySummary:{errors:61,warns:33,resets:0}},{njs:10,offset:0,notes:455,bombs:4,obstacles:15,nps:3.382,length:287,characteristic:"Standard",difficulty:"Hard",events:6e3,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:134.531,paritySummary:{errors:75,warns:74,resets:0}},{njs:10,offset:0,notes:526,bombs:10,obstacles:15,nps:3.91,length:287,characteristic:"Standard",difficulty:"Expert",events:1e3,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:134.531,paritySummary:{errors:72,warns:78,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c807689fefdae82aa79ba9c7f861118fb426b4cc.zip",coverURL:"https://cdn.beatsaver.com/c807689fefdae82aa79ba9c7f861118fb426b4cc.jpg",previewURL:"https://cdn.beatsaver.com/c807689fefdae82aa79ba9c7f861118fb426b4cc.mp3"}],createdAt:"2018-05-10T02:24:36Z",updatedAt:"2018-05-10T02:24:36Z",lastPublishedAt:"2018-05-10T02:24:36Z"},{id:"6a14",name:"Sweet But Psycho - Ava Max",description:"Mapped by Drunkdwarf. Fun upbeat tune that's great for dancing. Any feedback is appreciated ",uploader:{id:36873,name:"drunkdwarf",uniqueSet:!0,hash:"5d9eea1e048dff0006e87333",avatar:"https://www.gravatar.com/avatar/5d9eea1e048dff0006e87333?d=retro",type:"SIMPLE"},metadata:{bpm:133,duration:189,songName:"Sweet But Psycho",songSubName:"",songAuthorName:"Ava Max",levelAuthorName:"Drunkdwarf"},stats:{plays:0,downloads:1850,upvotes:746,downvotes:11,score:.9195},uploaded:"2019-10-16T05:39:20.052Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"eed9239c036bce71b6d23cf90a3886fc88adb6ee",key:"6a14",state:"Published",createdAt:"2019-10-16T05:39:20.052Z",sageScore:4,diffs:[{njs:14,offset:0,notes:661,bombs:0,obstacles:23,nps:3.672,length:399,characteristic:"Standard",difficulty:"Expert",events:952,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180,paritySummary:{errors:55,warns:49,resets:0}}],downloadURL:"https://cdn.beatsaver.com/eed9239c036bce71b6d23cf90a3886fc88adb6ee.zip",coverURL:"https://cdn.beatsaver.com/eed9239c036bce71b6d23cf90a3886fc88adb6ee.jpg",previewURL:"https://cdn.beatsaver.com/eed9239c036bce71b6d23cf90a3886fc88adb6ee.mp3"}],createdAt:"2019-10-16T05:39:20.052Z",updatedAt:"2019-10-16T05:39:20.052Z",lastPublishedAt:"2019-10-16T05:39:20.052Z"},{id:"11b01",name:"Merry Go Round of Life - Howl's Moving Castle (Joe Hisaishi)",description:"#302\n\nYoutube Preview : https://www.youtube.com/watch?v=q45z-XvFGeI\n\nDiscord Server : https://discord.gg/3ZSWSTh\nTwitch: https://www.twitch.tv/rigiiid\nTwitter: https://twitter.com/Rigid_bs\nYoutube : https://www.youtube.com/channel/UC36LRBThDdVFjCr-ZXOj-Uw",uploader:{id:4284588,name:"rigid",uniqueSet:!0,hash:"5cff0b7598cc5a672c852224",avatar:"https://cdn.beatsaver.com/avatar/295613108947386368.png",type:"DISCORD"},metadata:{bpm:165,duration:309,songName:"Merry-Go Round Of Life",songSubName:"",songAuthorName:"Joe Hisaishi",levelAuthorName:"Rigid"},stats:{plays:0,downloads:2060,upvotes:818,downvotes:14,score:.9194},uploaded:"2020-12-03T23:32:31.283Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d93e9ef74098ff490d0cd05e492f20c2be750ce2",key:"11b01",state:"Published",createdAt:"2020-12-03T23:32:31.283Z",sageScore:1,diffs:[{njs:17,offset:-.2,notes:1020,bombs:41,obstacles:18,nps:3.42,length:820.105,characteristic:"Standard",difficulty:"ExpertPlus",events:3102,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:298.22,paritySummary:{errors:1,warns:0,resets:3}}],downloadURL:"https://cdn.beatsaver.com/d93e9ef74098ff490d0cd05e492f20c2be750ce2.zip",coverURL:"https://cdn.beatsaver.com/d93e9ef74098ff490d0cd05e492f20c2be750ce2.jpg",previewURL:"https://cdn.beatsaver.com/d93e9ef74098ff490d0cd05e492f20c2be750ce2.mp3"}],createdAt:"2020-12-03T23:32:31.283Z",updatedAt:"2020-12-03T23:32:31.283Z",lastPublishedAt:"2020-12-03T23:32:31.283Z"},{id:"618a",name:"Teminite - Party Time",description:"Expert only\r\n",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:125,duration:271,songName:"Party Time",songSubName:"",songAuthorName:"Teminite",levelAuthorName:"Rustic"},stats:{plays:0,downloads:1898,upvotes:1056,downvotes:24,score:.9194},uploaded:"2019-09-05T20:33:35.424Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"05aa128214d1adc3ca599a0475b6c422debc08e0",key:"618a",state:"Published",createdAt:"2019-09-05T20:33:35.424Z",sageScore:6,diffs:[{njs:18,offset:0,notes:953,bombs:112,obstacles:1389,nps:3.65,length:544,characteristic:"Standard",difficulty:"Expert",events:7206,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:261.12,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/05aa128214d1adc3ca599a0475b6c422debc08e0.zip",coverURL:"https://cdn.beatsaver.com/05aa128214d1adc3ca599a0475b6c422debc08e0.jpg",previewURL:"https://cdn.beatsaver.com/05aa128214d1adc3ca599a0475b6c422debc08e0.mp3"}],createdAt:"2019-09-05T20:33:35.424Z",updatedAt:"2019-09-05T20:33:35.424Z",lastPublishedAt:"2019-09-05T20:33:35.424Z"},{id:"3b82",name:"DJ Got Us Fallin In Love - Usher ft. Pitbull",description:'"DJ Got Us Fallin\' in Love" is a song by American R&B recording artist Usher featuring guest vocals from American rapper Pitbull.\r\n\r\nSong is brought from iTunes for the highest quality sound file :)',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:120,duration:222,songName:"DJ Got Us Fallin In Love",songSubName:"Usher ft. Pitbull",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:2910,upvotes:819,downvotes:14,score:.9194},uploaded:"2019-03-04T16:58:43Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"96b8df29da4271f56c6777f11e69cd06669055fe",key:"3b82",state:"Published",createdAt:"2019-03-04T16:58:43Z",sageScore:5,diffs:[{njs:14,offset:0,notes:856,bombs:0,obstacles:5,nps:3.963,length:432,characteristic:"Standard",difficulty:"Expert",events:2006,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216,paritySummary:{errors:82,warns:85,resets:0}}],downloadURL:"https://cdn.beatsaver.com/96b8df29da4271f56c6777f11e69cd06669055fe.zip",coverURL:"https://cdn.beatsaver.com/96b8df29da4271f56c6777f11e69cd06669055fe.jpg",previewURL:"https://cdn.beatsaver.com/96b8df29da4271f56c6777f11e69cd06669055fe.mp3"}],createdAt:"2019-03-04T16:58:43Z",updatedAt:"2019-03-04T16:58:43Z",lastPublishedAt:"2019-03-04T16:58:43Z"},{id:"2649",name:"[Aurora Theory] Erik McClure - Soar",description:"The first map of the start of a new project for me :)\r\n\r\nA peaceful and comfy map, not intended to be super hard at all (unlike most of my other maps) but might be on the harder side of Expert.\r\nPeople need to give Erik McClure more recognition!\r\n\r\nDiscord: discord.gg/EVU9At2 (For updates regarding my maps, notifications for my streams, and a way to contact me)",uploader:{id:4288620,name:"hexagonial",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f2fb",avatar:"https://cdn.beatsaver.com/avatar/221442943045599232.png",type:"DISCORD"},metadata:{bpm:160,duration:350,songName:"Soar",songSubName:"Erik McClure",songAuthorName:"Hexagonial",levelAuthorName:"hexagonial"},stats:{plays:0,downloads:1468,upvotes:1099,downvotes:26,score:.9194},uploaded:"2018-12-16T21:04:48Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"087cedeab4b9e4c3a4b9c594c97bee6f446f0a77",key:"2649",state:"Published",createdAt:"2018-12-16T21:04:48Z",sageScore:6,diffs:[{njs:15,offset:0,notes:1337,bombs:0,obstacles:71,nps:3.961,length:900,characteristic:"Standard",difficulty:"Expert",events:3056,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:337.5,paritySummary:{errors:26,warns:7,resets:0},stars:3.3}],downloadURL:"https://cdn.beatsaver.com/087cedeab4b9e4c3a4b9c594c97bee6f446f0a77.zip",coverURL:"https://cdn.beatsaver.com/087cedeab4b9e4c3a4b9c594c97bee6f446f0a77.jpg",previewURL:"https://cdn.beatsaver.com/087cedeab4b9e4c3a4b9c594c97bee6f446f0a77.mp3"}],createdAt:"2018-12-16T21:04:48Z",updatedAt:"2018-12-16T21:04:48Z",lastPublishedAt:"2018-12-16T21:04:48Z"},{id:"dfc3",name:"K/DA - THE BADDEST ft. (G)I-DLE, Bea Miller, Wolftyla",description:"Collab with ConnorJC. check out his maps! He did the 360 map",uploader:{id:4285107,name:"kikaeaeon",uniqueSet:!0,hash:"5cff0b7498cc5a672c85109b",avatar:"https://cdn.beatsaver.com/avatar/103715469822816256.png",type:"DISCORD"},metadata:{bpm:150,duration:162,songName:"Baddest",songSubName:"",songAuthorName:"KDA",levelAuthorName:"KikaeAeon & ConnorJC"},stats:{plays:0,downloads:4890,upvotes:2449,downvotes:94,score:.9193},uploaded:"2020-08-29T05:50:22.494Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c2a6c6aa907994353fef68370ebbda4da4ea4cc8",key:"dfc3",state:"Published",createdAt:"2020-08-29T05:50:22.494Z",sageScore:5,diffs:[{njs:10,offset:0,notes:274,bombs:0,obstacles:54,nps:1.713,length:400,characteristic:"Standard",difficulty:"Easy",events:901,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:160,paritySummary:{errors:11,warns:2,resets:0}},{njs:10,offset:0,notes:321,bombs:0,obstacles:54,nps:2.006,length:400,characteristic:"Standard",difficulty:"Normal",events:1004,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:160,paritySummary:{errors:3,warns:0,resets:0}},{njs:12,offset:0,notes:464,bombs:0,obstacles:61,nps:2.9,length:400,characteristic:"Standard",difficulty:"Hard",events:1347,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:160,paritySummary:{errors:13,warns:13,resets:0}},{njs:14,offset:0,notes:608,bombs:0,obstacles:65,nps:3.8,length:400,characteristic:"Standard",difficulty:"Expert",events:1614,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:160,paritySummary:{errors:17,warns:23,resets:0}},{njs:16,offset:0,notes:851,bombs:0,obstacles:96,nps:5.319,length:400,characteristic:"Standard",difficulty:"ExpertPlus",events:2480,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:160,paritySummary:{errors:19,warns:41,resets:0}},{njs:19,offset:0,notes:944,bombs:6,obstacles:305,nps:5.9,length:400,characteristic:"360Degree",difficulty:"ExpertPlus",events:3408,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:160,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c2a6c6aa907994353fef68370ebbda4da4ea4cc8.zip",coverURL:"https://cdn.beatsaver.com/c2a6c6aa907994353fef68370ebbda4da4ea4cc8.jpg",previewURL:"https://cdn.beatsaver.com/c2a6c6aa907994353fef68370ebbda4da4ea4cc8.mp3"}],createdAt:"2020-08-29T05:50:22.494Z",updatedAt:"2020-08-29T05:50:22.494Z",lastPublishedAt:"2020-08-29T05:50:22.494Z"},{id:"5893",name:"Crypt of the NecroDancer - King Conga",description:"Hope you like this remap :) \n\n- ORYGINAL",uploader:{id:34774,name:"oryginal",uniqueSet:!0,hash:"5cff0b7698cc5a672c8551e0",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8551e0?d=retro",type:"SIMPLE"},metadata:{bpm:120,duration:107,songName:"King Conga",songSubName:"",songAuthorName:"Danny Baranowsky",levelAuthorName:"ORYGINAL"},stats:{plays:0,downloads:1592,upvotes:741,downvotes:11,score:.9193},uploaded:"2019-07-23T14:43:05.570Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d0b4c5fcc3522f5b58d1ff2da7cfdd8086651078",key:"5893",state:"Published",createdAt:"2019-07-23T14:43:05.570Z",sageScore:4,diffs:[{njs:12,offset:0,notes:311,bombs:104,obstacles:30,nps:3.019,length:206,characteristic:"Standard",difficulty:"Hard",events:1160,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:103,paritySummary:{errors:15,warns:21,resets:4}},{njs:12,offset:0,notes:387,bombs:118,obstacles:23,nps:3.757,length:206,characteristic:"Standard",difficulty:"Expert",events:1160,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:103,paritySummary:{errors:9,warns:19,resets:4}}],downloadURL:"https://cdn.beatsaver.com/d0b4c5fcc3522f5b58d1ff2da7cfdd8086651078.zip",coverURL:"https://cdn.beatsaver.com/d0b4c5fcc3522f5b58d1ff2da7cfdd8086651078.jpg",previewURL:"https://cdn.beatsaver.com/d0b4c5fcc3522f5b58d1ff2da7cfdd8086651078.mp3"}],createdAt:"2019-07-23T14:43:05.570Z",updatedAt:"2019-07-23T14:43:05.570Z",lastPublishedAt:"2019-07-23T14:43:05.570Z"},{id:"3821",name:"Le Perv - Carpenter Brut (Hotline Miami 2 Soundtrack)",description:"Shoutouts to twitch.tv/lexington64 and twitch.tv/whipstickgostop for playtesting!",uploader:{id:4285077,name:"ris",uniqueSet:!0,hash:"5cff0b7598cc5a672c8535df",avatar:"https://cdn.beatsaver.com/avatar/191597992061435904.png",type:"DISCORD"},metadata:{bpm:120,duration:259,songName:"Le Perv",songSubName:"Carpenter Brut",songAuthorName:"Ris",levelAuthorName:"Ris"},stats:{plays:0,downloads:1655,upvotes:983,downvotes:21,score:.9193},uploaded:"2019-02-21T02:57:32Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"57ad431c662057d428e920a8cd225bae5ab3d2c3",key:"3821",state:"Published",createdAt:"2019-02-21T02:57:32Z",sageScore:3,diffs:[{njs:10,offset:0,notes:488,bombs:0,obstacles:0,nps:1.91,length:511,characteristic:"Standard",difficulty:"Normal",events:369,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:255.5,paritySummary:{errors:109,warns:46,resets:0}},{njs:10,offset:0,notes:922,bombs:0,obstacles:0,nps:3.609,length:511,characteristic:"Standard",difficulty:"Hard",events:369,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:255.5,paritySummary:{errors:99,warns:85,resets:0}},{njs:12,offset:0,notes:1176,bombs:0,obstacles:0,nps:4.603,length:511,characteristic:"Standard",difficulty:"Expert",events:369,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:255.5,paritySummary:{errors:104,warns:99,resets:0}}],downloadURL:"https://cdn.beatsaver.com/57ad431c662057d428e920a8cd225bae5ab3d2c3.zip",coverURL:"https://cdn.beatsaver.com/57ad431c662057d428e920a8cd225bae5ab3d2c3.jpg",previewURL:"https://cdn.beatsaver.com/57ad431c662057d428e920a8cd225bae5ab3d2c3.mp3"}],createdAt:"2019-02-21T02:57:32Z",updatedAt:"2019-02-21T02:57:32Z",lastPublishedAt:"2019-02-21T02:57:32Z"},{id:"623c",name:"Lil Tecca - Ransom",description:"",uploader:{id:4285107,name:"kikaeaeon",uniqueSet:!0,hash:"5cff0b7498cc5a672c85109b",avatar:"https://cdn.beatsaver.com/avatar/103715469822816256.png",type:"DISCORD"},metadata:{bpm:180,duration:133,songName:"Ransom",songSubName:"",songAuthorName:"Lil Tecca",levelAuthorName:"KikaeAeon"},stats:{plays:0,downloads:2213,upvotes:1476,downvotes:44,score:.9192},uploaded:"2019-09-08T17:05:01.320Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ebdaaafecece7859d28ee1d80a94fa8b2b9992a3",key:"623c",state:"Published",createdAt:"2019-09-08T17:05:01.320Z",sageScore:5,diffs:[{njs:12,offset:0,notes:358,bombs:0,obstacles:31,nps:2.834,length:379,characteristic:"Standard",difficulty:"Expert",events:914,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:126.333,paritySummary:{errors:11,warns:13,resets:0}},{njs:16,offset:0,notes:571,bombs:0,obstacles:24,nps:4.52,length:379,characteristic:"Standard",difficulty:"ExpertPlus",events:684,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:126.333,paritySummary:{errors:12,warns:8,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ebdaaafecece7859d28ee1d80a94fa8b2b9992a3.zip",coverURL:"https://cdn.beatsaver.com/ebdaaafecece7859d28ee1d80a94fa8b2b9992a3.jpg",previewURL:"https://cdn.beatsaver.com/ebdaaafecece7859d28ee1d80a94fa8b2b9992a3.mp3"}],createdAt:"2019-09-08T17:05:01.320Z",updatedAt:"2019-09-08T17:05:01.320Z",lastPublishedAt:"2019-09-08T17:05:01.320Z"},{id:"2b56",name:"Pitbull Ft. Ke$ha - Timber",description:"Happy New Year! Here is a song I've been working on for a long time (With A LOT of procrastination). It didn't quite feel right with the notes being on beat so I extended them 1/16th off beat and it sounded a little better. Enjoy!\r\n\r\nVideo Preview of expert: https://youtu.be/ntGqRvV5hX4",uploader:{id:1974,name:"scottie2pottie",uniqueSet:!0,hash:"5cff0b7598cc5a672c85329f",avatar:"https://www.gravatar.com/avatar/5cff0b7598cc5a672c85329f?d=retro",type:"SIMPLE"},metadata:{bpm:130,duration:204,songName:"Timber",songSubName:"Pitbull",songAuthorName:"Scottie2Pottie",levelAuthorName:"scottie2pottie"},stats:{plays:0,downloads:4086,upvotes:1223,downvotes:32,score:.9191},uploaded:"2019-01-06T03:24:10Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ca709a09209760e19d9b63952aa208efc4663aef",key:"2b56",state:"Published",createdAt:"2019-01-06T03:24:10Z",sageScore:5,diffs:[{njs:10,offset:0,notes:721,bombs:4,obstacles:0,nps:3.616,length:432,characteristic:"Standard",difficulty:"Hard",events:1003,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:199.385,paritySummary:{errors:34,warns:15,resets:0}},{njs:10,offset:0,notes:932,bombs:4,obstacles:0,nps:4.674,length:432,characteristic:"Standard",difficulty:"Expert",events:1124,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:199.385,paritySummary:{errors:29,warns:31,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ca709a09209760e19d9b63952aa208efc4663aef.zip",coverURL:"https://cdn.beatsaver.com/ca709a09209760e19d9b63952aa208efc4663aef.jpg",previewURL:"https://cdn.beatsaver.com/ca709a09209760e19d9b63952aa208efc4663aef.mp3"}],createdAt:"2019-01-06T03:24:10Z",updatedAt:"2019-01-06T03:24:10Z",lastPublishedAt:"2019-01-06T03:24:10Z"},{id:"12db3",name:"Lindsey Sterling - Artemis ",description:"Made this a couple of months ago and totally didn't forget to upload it.\n\nThis was a special request by--I don't even know. I forgot. It's that old.",uploader:{id:15368,name:"theab",uniqueSet:!0,hash:"5cff0b7698cc5a672c853a14",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c853a14?d=retro",type:"SIMPLE"},metadata:{bpm:190,duration:228,songName:"Artemis",songSubName:"",songAuthorName:"Lindsey Stirling",levelAuthorName:"Ab"},stats:{plays:0,downloads:1518,upvotes:602,downvotes:6,score:.919},uploaded:"2021-01-18T06:05:51.386Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a8df2df28d239a14b18f40855045eaca88a0c8e5",key:"12db3",state:"Published",createdAt:"2021-01-18T06:05:51.386Z",sageScore:3,diffs:[{njs:21,offset:0,notes:975,bombs:0,obstacles:2,nps:4.358,length:708.5,characteristic:"Standard",difficulty:"ExpertPlus",events:1159,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:223.737,paritySummary:{errors:6,warns:5,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a8df2df28d239a14b18f40855045eaca88a0c8e5.zip",coverURL:"https://cdn.beatsaver.com/a8df2df28d239a14b18f40855045eaca88a0c8e5.jpg",previewURL:"https://cdn.beatsaver.com/a8df2df28d239a14b18f40855045eaca88a0c8e5.mp3"}],createdAt:"2021-01-18T06:05:51.386Z",updatedAt:"2021-01-18T06:05:51.386Z",lastPublishedAt:"2021-01-18T06:05:51.386Z"},{id:"2db1",name:"Huey Lewis - The Power of Love",description:"Here is my first map of 2019 covering 'The power of love' by Huey Lewis!\r\nAll difficulties are included from easy to expert, enjoy ;)\r\n\r\nBeastsaber: https://bsaber.com/members/stumi/\r\nVideo: https://www.youtube.com/watch?v=7aHevt6DVkc",uploader:{id:4785,name:"stumi",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f720",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro",type:"SIMPLE"},metadata:{bpm:119,duration:226,songName:"The power of love",songSubName:"Huey Lewis",songAuthorName:"Stumi",levelAuthorName:"stumi"},stats:{plays:0,downloads:6882,upvotes:1088,downvotes:26,score:.919},uploaded:"2019-01-14T18:26:26Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"bf261b573d7c649150ea1c23ec504130904b6aa2",key:"2db1",state:"Published",createdAt:"2019-01-14T18:26:26Z",sageScore:6,diffs:[{njs:10,offset:0,notes:311,bombs:0,obstacles:17,nps:1.449,length:425,characteristic:"Standard",difficulty:"Easy",events:1830,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:214.286,paritySummary:{errors:29,warns:22,resets:0}},{njs:10,offset:0,notes:489,bombs:0,obstacles:20,nps:2.278,length:425,characteristic:"Standard",difficulty:"Normal",events:1830,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:214.286,paritySummary:{errors:37,warns:55,resets:0}},{njs:11,offset:0,notes:697,bombs:0,obstacles:1,nps:3.247,length:425,characteristic:"Standard",difficulty:"Hard",events:1831,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:214.286,paritySummary:{errors:41,warns:40,resets:0}},{njs:12,offset:0,notes:920,bombs:0,obstacles:0,nps:4.287,length:424.875,characteristic:"Standard",difficulty:"Expert",events:1831,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:214.223,paritySummary:{errors:59,warns:68,resets:0}}],downloadURL:"https://cdn.beatsaver.com/bf261b573d7c649150ea1c23ec504130904b6aa2.zip",coverURL:"https://cdn.beatsaver.com/bf261b573d7c649150ea1c23ec504130904b6aa2.jpg",previewURL:"https://cdn.beatsaver.com/bf261b573d7c649150ea1c23ec504130904b6aa2.mp3"}],createdAt:"2019-01-14T18:26:26Z",updatedAt:"2019-01-14T18:26:26Z",lastPublishedAt:"2019-01-14T18:26:26Z"},{id:"10377",name:"Marnik - Hocus Pocus (Original Mix)",description:"use CHROMA mod for\n - PanicEnvironment environment removal\n - Cool lights\n - to gain superpowers\n\nHappy Halloween!\n\nBPM | 130\nExpert+\nExpert\nHard\nNormal\nEasy\n\npreview: https://www.youtube.com/watch?v=DfzD_Ca4fp4\n\nDM any feedback on Discord\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:130,duration:242,songName:"Hocus Pocus",songSubName:"(Original Mix)",songAuthorName:"Marnik",levelAuthorName:"ETAN"},stats:{plays:0,downloads:7135,upvotes:1324,downvotes:37,score:.919},uploaded:"2020-10-25T22:28:11.819Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"4e37c7070b9049ebbbf11ceab644d4ec4a01ca13",key:"10377",state:"Published",createdAt:"2020-10-25T22:28:11.819Z",sageScore:6,diffs:[{njs:9,offset:0,notes:232,bombs:0,obstacles:34,nps:.99,length:508,characteristic:"Standard",difficulty:"Easy",events:21660,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:234.462,paritySummary:{errors:40,warns:0,resets:0}},{njs:11,offset:1,notes:493,bombs:0,obstacles:34,nps:2.103,length:508,characteristic:"Standard",difficulty:"Normal",events:21660,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:234.462,paritySummary:{errors:0,warns:0,resets:0}},{njs:13,offset:.5,notes:693,bombs:0,obstacles:34,nps:2.956,length:508,characteristic:"Standard",difficulty:"Hard",events:21660,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:234.462,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:966,bombs:0,obstacles:34,nps:4.12,length:508,characteristic:"Standard",difficulty:"Expert",events:21660,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:234.462,paritySummary:{errors:0,warns:0,resets:0}},{njs:21,offset:.4,notes:1172,bombs:80,obstacles:34,nps:4.999,length:508,characteristic:"Standard",difficulty:"ExpertPlus",events:21661,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:234.462,paritySummary:{errors:6,warns:3,resets:34}}],downloadURL:"https://cdn.beatsaver.com/4e37c7070b9049ebbbf11ceab644d4ec4a01ca13.zip",coverURL:"https://cdn.beatsaver.com/4e37c7070b9049ebbbf11ceab644d4ec4a01ca13.jpg",previewURL:"https://cdn.beatsaver.com/4e37c7070b9049ebbbf11ceab644d4ec4a01ca13.mp3"}],createdAt:"2020-10-25T22:28:11.819Z",updatedAt:"2020-10-25T22:28:11.819Z",lastPublishedAt:"2020-10-25T22:28:11.819Z"},{id:"8367",name:"Martin Garrix & Dua Lipa - Scared To Be Lonely (Brooks Remix)",description:"Brooks does amazing remixes and this is probably one of my favourite ones\n\nVideo: https://youtu.be/OgmhqC5e9m8\n\nEasy: Notes: 132 NPS: 1.47 NJS: 10\nNormal: Notes: 164 NPS: 1.8 NJS: 12\nHard: Notes: 256 NPS: 2.82 NJS: 14\nExpert: Notes: 351 NPS: 3.86 NJS: 16\nExpert+: Notes: 417 NPS: 4.59 NJS: 18\n\nCheck out my lightshows here: https://www.youtube.com/playlist?list=PLwl6dYq72JOYu1BnKl5WATa4Dh__ZJmuN",uploader:{id:14808,name:"halcyon12",uniqueSet:!0,hash:"5cff0b7698cc5a672c8547ad",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8547ad?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:104,songName:"Scared To Be Lonely",songSubName:"Brooks Remix",songAuthorName:"Martin Garrix ft. Dua Lipa",levelAuthorName:"Halcyon12"},stats:{plays:0,downloads:3240,upvotes:1111,downvotes:27,score:.919},uploaded:"2020-02-02T01:20:18.328Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"60dac314035b8f9da649286c587aa6377abf1f16",key:"8367",state:"Published",createdAt:"2020-02-02T01:20:18.328Z",sageScore:7,diffs:[{njs:10,offset:1,notes:132,bombs:0,obstacles:2,nps:1.467,length:192,characteristic:"Standard",difficulty:"Easy",events:2499,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:90,paritySummary:{errors:8,warns:0,resets:0}},{njs:12,offset:.5,notes:164,bombs:0,obstacles:2,nps:1.803,length:194,characteristic:"Standard",difficulty:"Normal",events:2499,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:90.938,paritySummary:{errors:10,warns:2,resets:0}},{njs:14,offset:0,notes:256,bombs:0,obstacles:8,nps:2.815,length:194,characteristic:"Standard",difficulty:"Hard",events:2499,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:90.938,paritySummary:{errors:1,warns:1,resets:0}},{njs:16,offset:-.25,notes:351,bombs:0,obstacles:16,nps:3.86,length:194,characteristic:"Standard",difficulty:"Expert",events:2499,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:90.938,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:-.5,notes:417,bombs:0,obstacles:34,nps:4.586,length:194,characteristic:"Standard",difficulty:"ExpertPlus",events:2498,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:90.938,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/60dac314035b8f9da649286c587aa6377abf1f16.zip",coverURL:"https://cdn.beatsaver.com/60dac314035b8f9da649286c587aa6377abf1f16.jpg",previewURL:"https://cdn.beatsaver.com/60dac314035b8f9da649286c587aa6377abf1f16.mp3"}],createdAt:"2020-02-02T01:20:18.328Z",updatedAt:"2020-02-02T01:20:18.328Z",lastPublishedAt:"2020-02-02T01:20:18.328Z"},{id:"a90b",name:"[TheFatRat Pack] Xenogenesis - TheFatRat",description:'Here it is! The unofficial "TheFatRat" Music Pack in Beat Saber - with all beatmaps being singlehandedly made by me!\n\nAll songs included in TheFatRat Music Pack:\nMonody (ft. Laura Brehm) \nUnity \nWindfall \nXenogenesis \nTime Lapse \n\nGet the full song pack here: https://bsaber.com/thefatrat-music-pack/\n(Or you should just be able to find all the other ones on my beatsaver profile as well. Heres a link to my profile: https://beatsaver.com/uploader/5d47d586c5301900060b2f6c)\n\nSongcore mod is recommended (for custom colours)\nPlays best on Origins Environment\n\nXenogenesis Stats:\nExpert+ - 955 Notes | 4.17 NPS\nExpert - 863 Notes | 3.77 NPS\nHard - 649 Notes | 2.84 NPS\nNormal - 439 Notes | 1.92 NPS\nEasy - 347 Notes | 1.52 NPS\n\nRoughly 7-8 Hours of work\nGameplay: https://youtu.be/YA0zBFQcLnc\n\nObviously - A huge thanks to TheFatRat himself, for not only producing the songs in the first place (and allowing free access to use them for big and small content creators), but also being a huge inspiration to lots of artists out there and for making music that everyone can jam out to! We love you, TheFatRat!',uploader:{id:4284197,name:"timeweaver",uniqueSet:!0,hash:"5d47d586c5301900060b2f6c",avatar:"https://cdn.beatsaver.com/avatar/607399708121366529.png",type:"DISCORD"},metadata:{bpm:145,duration:228,songName:"Xenogenesis",songSubName:"",songAuthorName:"TheFatRat",levelAuthorName:"Timeweaver"},stats:{plays:0,downloads:4735,upvotes:1216,downvotes:32,score:.9189},uploaded:"2020-05-22T13:28:50.525Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"15ab8f50a6b1a7ff95955ba236426ab4edf9cb15",key:"a90b",state:"Published",createdAt:"2020-05-22T13:28:50.525Z",sageScore:5,diffs:[{njs:10,offset:0,notes:347,bombs:0,obstacles:53,nps:1.55,length:541,characteristic:"Standard",difficulty:"Easy",events:5971,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:223.862,paritySummary:{errors:54,warns:35,resets:0}},{njs:10,offset:0,notes:439,bombs:0,obstacles:97,nps:1.961,length:541,characteristic:"Standard",difficulty:"Normal",events:5971,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:223.862,paritySummary:{errors:30,warns:12,resets:0}},{njs:12.5,offset:1,notes:649,bombs:0,obstacles:121,nps:2.899,length:541,characteristic:"Standard",difficulty:"Hard",events:5971,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:223.862,paritySummary:{errors:6,warns:4,resets:0}},{njs:15,offset:.5,notes:863,bombs:0,obstacles:137,nps:3.855,length:541,characteristic:"Standard",difficulty:"Expert",events:6162,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:223.862,paritySummary:{errors:2,warns:1,resets:0}},{njs:17,offset:0,notes:955,bombs:0,obstacles:169,nps:4.266,length:541,characteristic:"Standard",difficulty:"ExpertPlus",events:6160,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:223.862,paritySummary:{errors:4,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/15ab8f50a6b1a7ff95955ba236426ab4edf9cb15.zip",coverURL:"https://cdn.beatsaver.com/15ab8f50a6b1a7ff95955ba236426ab4edf9cb15.jpg",previewURL:"https://cdn.beatsaver.com/15ab8f50a6b1a7ff95955ba236426ab4edf9cb15.mp3"}],createdAt:"2020-05-22T13:28:50.525Z",updatedAt:"2020-05-22T13:28:50.525Z",lastPublishedAt:"2020-05-22T13:28:50.525Z"},{id:"9b41",name:"Diving In Too Deep - NerdOut",description:"Diving In Too Deep, a Subnautica song created by NerdOut! All I can say is expect W A L L S ! ! !\n(Mapping Extensions required)",uploader:{id:23150,name:"kuritsadbs",uniqueSet:!0,hash:"5cff0b7698cc5a672c8537ef",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8537ef?d=retro",type:"SIMPLE"},metadata:{bpm:135,duration:195,songName:"Diving In Too Deep",songSubName:"",songAuthorName:"NerdOut",levelAuthorName:"KuritsaDBS"},stats:{plays:0,downloads:779,upvotes:512,downvotes:3,score:.9188},uploaded:"2020-04-15T11:53:14.568Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"fe10d96acbb9a6416e1e7710270e12032b642288",key:"9b41",state:"Published",createdAt:"2020-04-15T11:53:14.568Z",sageScore:4,diffs:[{njs:16,offset:0,notes:481,bombs:0,obstacles:1919,nps:2.736,length:395.5,characteristic:"Standard",difficulty:"Expert",events:7541,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:175.778,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/fe10d96acbb9a6416e1e7710270e12032b642288.zip",coverURL:"https://cdn.beatsaver.com/fe10d96acbb9a6416e1e7710270e12032b642288.jpg",previewURL:"https://cdn.beatsaver.com/fe10d96acbb9a6416e1e7710270e12032b642288.mp3"}],createdAt:"2020-04-15T11:53:14.568Z",updatedAt:"2020-04-15T11:53:14.568Z",lastPublishedAt:"2020-04-15T11:53:14.568Z"},{id:"7ba4",name:"Say So - Doja Cat",description:"Based on the Tik Tok dance meme song, Say So by Doja Cat.",uploader:{id:34446,name:"cartwheels",uniqueSet:!0,hash:"5e0cf5fbbe3a060006a86875",avatar:"https://www.gravatar.com/avatar/5e0cf5fbbe3a060006a86875?d=retro",type:"SIMPLE"},metadata:{bpm:111,duration:238,songName:"Say So",songSubName:"",songAuthorName:"Doja Cat",levelAuthorName:"mikey f"},stats:{plays:0,downloads:5177,upvotes:1523,downvotes:47,score:.9188},uploaded:"2020-01-02T00:07:45.673Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e931eac117453cea276351917c1af2b5f0a1c7df",key:"7ba4",state:"Published",createdAt:"2020-01-02T00:07:45.673Z",sageScore:5,diffs:[{njs:12,offset:0,notes:464,bombs:54,obstacles:11,nps:2.07,length:414.75,characteristic:"Standard",difficulty:"Normal",events:1366,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:224.189,paritySummary:{errors:49,warns:69,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e931eac117453cea276351917c1af2b5f0a1c7df.zip",coverURL:"https://cdn.beatsaver.com/e931eac117453cea276351917c1af2b5f0a1c7df.jpg",previewURL:"https://cdn.beatsaver.com/e931eac117453cea276351917c1af2b5f0a1c7df.mp3"}],createdAt:"2020-01-02T00:07:45.673Z",updatedAt:"2020-01-02T00:07:45.673Z",lastPublishedAt:"2020-01-02T00:07:45.673Z"},{id:"500d",name:"Thunder - Imagine Dragons",description:"168 BPM / 3:00 Runtime\r\nEasy / 202 Notes\r\nNormal / 270 Notes\r\nHard / 400 Notes\r\nExpert / 505 Notes\r\nExpert+ / 660 Notes\r\n\r\nGameplay: Coming Soon",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:168,duration:180,songName:"Thunder",songSubName:"Imagine Dragons",songAuthorName:"Skyler Wallace",levelAuthorName:"skylerwallace"},stats:{plays:0,downloads:8953,upvotes:3133,downvotes:134,score:.9188},uploaded:"2019-05-31T04:43:45Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1374613734d2d110f06783c7b7c32579e7a2808f",key:"500d",state:"Published",createdAt:"2019-05-31T04:43:45Z",sageScore:8,diffs:[{njs:10,offset:0,notes:202,bombs:0,obstacles:5,nps:1.178,length:480,characteristic:"Standard",difficulty:"Easy",events:4955,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:171.429,paritySummary:{errors:38,warns:28,resets:0}},{njs:10,offset:0,notes:270,bombs:0,obstacles:7,nps:1.575,length:480,characteristic:"Standard",difficulty:"Normal",events:4955,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:171.429,paritySummary:{errors:33,warns:31,resets:0}},{njs:10,offset:0,notes:400,bombs:0,obstacles:10,nps:2.333,length:480,characteristic:"Standard",difficulty:"Hard",events:4955,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:171.429,paritySummary:{errors:55,warns:81,resets:0}},{njs:12,offset:0,notes:505,bombs:0,obstacles:13,nps:2.946,length:480,characteristic:"Standard",difficulty:"Expert",events:4955,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:171.429,paritySummary:{errors:47,warns:64,resets:0}},{njs:14,offset:1,notes:660,bombs:4,obstacles:14,nps:3.85,length:480,characteristic:"Standard",difficulty:"ExpertPlus",events:4955,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:171.429,paritySummary:{errors:39,warns:64,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1374613734d2d110f06783c7b7c32579e7a2808f.zip",coverURL:"https://cdn.beatsaver.com/1374613734d2d110f06783c7b7c32579e7a2808f.jpg",previewURL:"https://cdn.beatsaver.com/1374613734d2d110f06783c7b7c32579e7a2808f.mp3"}],createdAt:"2019-05-31T04:43:45Z",updatedAt:"2019-05-31T04:43:45Z",lastPublishedAt:"2019-05-31T04:43:45Z"},{id:"4211",name:"Overkill - RIOT",description:"Thank you Everyone for the massive amount of support on this map. I'm very happy to release this as a V2 and hopefully you can all get some enjoyment like the first one did but with some very large QOL updates to the map as well that'll make the map in turn play much smoother and a ton of pattern changes that gives the map some more life! :D\r\n\r\nBig Thanks to RedMagi and Saut for modding and playtesting! :D",uploader:{id:408,name:"nuketime",uniqueSet:!0,hash:"5cff0b7498cc5a672c8507f7",avatar:"https://cdn.beatsaver.com/avatar/175811186007343104.png",type:"DISCORD"},metadata:{bpm:174,duration:308,songName:"Overkill",songSubName:"RIOT",songAuthorName:"Nuketime",levelAuthorName:"Nuketime"},stats:{plays:0,downloads:1444,upvotes:1211,downvotes:32,score:.9187},uploaded:"2019-03-30T19:12:13Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"aa94aeef877eecea90e4cf3795a84799056042e3",key:"4211",state:"Published",createdAt:"2019-03-30T19:12:13Z",sageScore:5,diffs:[{njs:19,offset:0,notes:1914,bombs:108,obstacles:368,nps:6.465,length:858.5,characteristic:"Standard",difficulty:"ExpertPlus",events:3602,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:296.035,paritySummary:{errors:56,warns:53,resets:0}}],downloadURL:"https://cdn.beatsaver.com/aa94aeef877eecea90e4cf3795a84799056042e3.zip",coverURL:"https://cdn.beatsaver.com/aa94aeef877eecea90e4cf3795a84799056042e3.jpg",previewURL:"https://cdn.beatsaver.com/aa94aeef877eecea90e4cf3795a84799056042e3.mp3"}],createdAt:"2019-03-30T19:12:13Z",updatedAt:"2019-03-30T19:12:13Z",lastPublishedAt:"2019-03-30T19:12:13Z"},{id:"827d",name:"Robin Hustin x TobiMorrow - Light It Up (feat. Jex)",description:"Brings me back to when I made lights for this a long time ago. \n\nVideo: https://youtu.be/ttzkzmB39Bs\n\nEasy: Notes: 117 NPS: 1.31 NJS: 10\nNormal: Notes: 169 NPS: 1.9 NJS: 12\nHard: Notes: 237 NPS: 2.66 NJS: 14\nExpert: Notes: 325 NPS: 3.61 NJS: 16\nExpert+: Notes: 452 NPS: 5.02 NJS: 18\n\nCheck out my lightshows here: https://www.youtube.com/playlist?list=PLwl6dYq72JOYu1BnKl5WATa4Dh__ZJmuN",uploader:{id:14808,name:"halcyon12",uniqueSet:!0,hash:"5cff0b7698cc5a672c8547ad",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8547ad?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:102,songName:"Light It Up",songSubName:"ft. Jex",songAuthorName:"Robin Hustin, TobiMorrow",levelAuthorName:"Halcyon12"},stats:{plays:0,downloads:5922,upvotes:1375,downvotes:40,score:.9186},uploaded:"2020-01-29T22:25:19.574Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"22da796f08f777c437d4996d52ea1778e8e762ae",key:"827d",state:"Published",createdAt:"2020-01-29T22:25:19.574Z",sageScore:7,diffs:[{njs:10,offset:1,notes:117,bombs:0,obstacles:9,nps:1.312,length:190.25,characteristic:"Standard",difficulty:"Easy",events:3837,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:89.18,paritySummary:{errors:2,warns:2,resets:0}},{njs:12,offset:.5,notes:169,bombs:0,obstacles:8,nps:1.895,length:190.25,characteristic:"Standard",difficulty:"Normal",events:3837,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:89.18,paritySummary:{errors:4,warns:1,resets:0}},{njs:14,offset:0,notes:237,bombs:0,obstacles:17,nps:2.658,length:190.25,characteristic:"Standard",difficulty:"Hard",events:3837,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:89.18,paritySummary:{errors:1,warns:0,resets:0}},{njs:16,offset:-.25,notes:325,bombs:0,obstacles:6,nps:3.611,length:192,characteristic:"Standard",difficulty:"Expert",events:3837,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:90,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:-.5,notes:452,bombs:0,obstacles:16,nps:5.022,length:192,characteristic:"Standard",difficulty:"ExpertPlus",events:3837,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:90,paritySummary:{errors:0,warns:0,resets:0}},{njs:12,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"ExpertPlus",events:3837,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/22da796f08f777c437d4996d52ea1778e8e762ae.zip",coverURL:"https://cdn.beatsaver.com/22da796f08f777c437d4996d52ea1778e8e762ae.jpg",previewURL:"https://cdn.beatsaver.com/22da796f08f777c437d4996d52ea1778e8e762ae.mp3"}],createdAt:"2020-01-29T22:25:19.574Z",updatedAt:"2020-01-29T22:25:19.574Z",lastPublishedAt:"2020-01-29T22:25:19.574Z"},{id:"105f5",name:"Porter Robinson & Madeon - Shelter",description:"A map that doesnt mess with chroma, but with boost lights\n\nBPM 100\nWonder (Expert)\n\nThis map was a special request from Lukken\n\npreview: https://www.youtube.com/watch?v=T1NscB2M4zI\n\nPlease enjoy\n\nDM any feedback on Discord\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:100,duration:221,songName:"Shelter",songSubName:"",songAuthorName:"Porter Robinson & Madeon",levelAuthorName:"ETAN"},stats:{plays:0,downloads:6551,upvotes:893,downvotes:18,score:.9185},uploaded:"2020-10-29T23:59:50.753Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1b3a2fa722e093cae37b52ba5d412496b3a20b82",key:"105f5",state:"Published",createdAt:"2020-10-29T23:59:50.753Z",sageScore:5,diffs:[{njs:16,offset:.4,notes:707,bombs:46,obstacles:13,nps:3.272,length:360.078,characteristic:"Standard",difficulty:"Expert",events:6858,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.047,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1b3a2fa722e093cae37b52ba5d412496b3a20b82.zip",coverURL:"https://cdn.beatsaver.com/1b3a2fa722e093cae37b52ba5d412496b3a20b82.jpg",previewURL:"https://cdn.beatsaver.com/1b3a2fa722e093cae37b52ba5d412496b3a20b82.mp3"}],createdAt:"2020-10-29T23:59:50.753Z",updatedAt:"2020-10-29T23:59:50.753Z",lastPublishedAt:"2020-10-29T23:59:50.753Z"},{id:"8b48",name:"Doja Cat - Boss Bitch",description:"This is my first Beat Saber map. Thank you to CheckThePan, PlusOneRabbit, CyanSnow, Aeroluna and everyone in Noodle for helping me get started. You are all great wonderful people I am honored to call friends. <3\nDuration: 2:14\nBPM: 126\nMapped NPS: 2.96\nNotes: 371",uploader:{id:4543,name:"dat360noscope",uniqueSet:!0,hash:"5e58387f521acf00068f9ad4",avatar:"https://www.gravatar.com/avatar/5e58387f521acf00068f9ad4?d=retro",type:"SIMPLE"},metadata:{bpm:126,duration:134,songName:"Boss Bitch",songSubName:"",songAuthorName:"Doja Cat",levelAuthorName:"Dat360NoScope"},stats:{plays:0,downloads:2843,upvotes:868,downvotes:17,score:.9185},uploaded:"2020-02-27T21:53:18.919Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"2105facb044e1289ce1b84a9377bdd2a982f73e1",key:"8b48",state:"Published",createdAt:"2020-02-27T21:53:18.919Z",sageScore:4,diffs:[{njs:12,offset:0,notes:371,bombs:0,obstacles:87,nps:2.957,length:263.5,characteristic:"Standard",difficulty:"Hard",events:901,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:125.476,paritySummary:{errors:7,warns:1,resets:0}}],downloadURL:"https://cdn.beatsaver.com/2105facb044e1289ce1b84a9377bdd2a982f73e1.zip",coverURL:"https://cdn.beatsaver.com/2105facb044e1289ce1b84a9377bdd2a982f73e1.jpg",previewURL:"https://cdn.beatsaver.com/2105facb044e1289ce1b84a9377bdd2a982f73e1.mp3"}],createdAt:"2020-02-27T21:53:18.919Z",updatedAt:"2020-02-27T21:53:18.919Z",lastPublishedAt:"2020-02-27T21:53:18.919Z"},{id:"7067",name:"Sorairo Days (TV Size) [Gurren Lagann Opening] - Shoko Nakagawa",description:"This map was converted from one of my old maps.\n\nFeel free to DM me on discord @Joetastic#2501",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:174,duration:93,songName:"Sorairo Days (TV Size)",songSubName:"",songAuthorName:"Shoko Nakagawa",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:2600,upvotes:940,downvotes:20,score:.9185},uploaded:"2019-11-17T06:13:49.456Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5a5f6a419abfcc998262b28f1fe4e3baa7d3d1bc",key:"7067",state:"Published",createdAt:"2019-11-17T06:13:49.456Z",sageScore:2,diffs:[{njs:10,offset:0,notes:212,bombs:0,obstacles:0,nps:2.726,length:225.5,characteristic:"Standard",difficulty:"Normal",events:1518,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:77.759,paritySummary:{errors:22,warns:13,resets:0}},{njs:11,offset:0,notes:290,bombs:0,obstacles:0,nps:3.729,length:225.5,characteristic:"Standard",difficulty:"Hard",events:1518,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:77.759,paritySummary:{errors:16,warns:7,resets:0}},{njs:13,offset:0,notes:332,bombs:0,obstacles:0,nps:4.27,length:225.5,characteristic:"Standard",difficulty:"Expert",events:1518,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:77.759,paritySummary:{errors:9,warns:11,resets:0}},{njs:15,offset:0,notes:469,bombs:0,obstacles:0,nps:5.978,length:227.5,characteristic:"Standard",difficulty:"ExpertPlus",events:1543,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:78.448,paritySummary:{errors:22,warns:33,resets:0}}],downloadURL:"https://cdn.beatsaver.com/5a5f6a419abfcc998262b28f1fe4e3baa7d3d1bc.zip",coverURL:"https://cdn.beatsaver.com/5a5f6a419abfcc998262b28f1fe4e3baa7d3d1bc.jpg",previewURL:"https://cdn.beatsaver.com/5a5f6a419abfcc998262b28f1fe4e3baa7d3d1bc.mp3"}],createdAt:"2019-11-17T06:13:49.456Z",updatedAt:"2019-11-17T06:13:49.456Z",lastPublishedAt:"2019-11-17T06:13:49.456Z"},{id:"19a",name:"NSP - Cool Patrol",description:"Normal, Hard, and Expert difficulties available. Relatively close to vanilla balancing.\r\n\r\nPreview: https://youtu.be/e5W5EhEE0V4\r\n\r\nBPM: 130\r\nNotes: 651 (Expert)\r\nDuration: 3:09",uploader:{id:45732,name:"calijor",uniqueSet:!1,hash:"5cff0b7298cc5a672c84ebb1",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ebb1?d=retro",type:"SIMPLE"},metadata:{bpm:130,duration:189,songName:"Cool Patrol",songSubName:"",songAuthorName:"Ninja Sex Party",levelAuthorName:"calijor"},stats:{plays:0,downloads:1119,upvotes:1325,downvotes:38,score:.9184},uploaded:"2018-05-22T04:53:18Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c87de9a5e4e8aa91d57403bde711033770b3c4a8",key:"19a",state:"Published",createdAt:"2018-05-22T04:53:18Z",sageScore:5,diffs:[{njs:10,offset:0,notes:434,bombs:0,obstacles:6,nps:2.351,length:399.938,characteristic:"Standard",difficulty:"Normal",events:1533,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:184.587,paritySummary:{errors:79,warns:32,resets:0}},{njs:10,offset:0,notes:560,bombs:0,obstacles:6,nps:3.034,length:399.938,characteristic:"Standard",difficulty:"Hard",events:1533,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:184.587,paritySummary:{errors:145,warns:31,resets:0}},{njs:10,offset:0,notes:651,bombs:0,obstacles:8,nps:3.527,length:399.938,characteristic:"Standard",difficulty:"Expert",events:1533,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:184.587,paritySummary:{errors:136,warns:48,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c87de9a5e4e8aa91d57403bde711033770b3c4a8.zip",coverURL:"https://cdn.beatsaver.com/c87de9a5e4e8aa91d57403bde711033770b3c4a8.jpg",previewURL:"https://cdn.beatsaver.com/c87de9a5e4e8aa91d57403bde711033770b3c4a8.mp3"}],createdAt:"2018-05-22T04:53:18Z",updatedAt:"2018-05-22T04:53:18Z",lastPublishedAt:"2018-05-22T04:53:18Z"},{id:"3c89",name:"99.9 // Mob Choir feat. Sajou no Hana",description:"99.9, the OP Mob Psycho 100 Season 2\r\nBy Mob Choir feat. Sajou no Hana\r\nVideo: https://youtu.be/Qbk-0-p60WY\r\n\r\nShoutout to Testers:\r\nRedMagi\r\nTrolav",uploader:{id:39365,name:"todokete",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ee70",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee70?d=retro",type:"SIMPLE"},metadata:{bpm:168,duration:98,songName:"99.9",songSubName:"MOB CHOIR feat. sajou no hana",songAuthorName:"Todokete",levelAuthorName:"todokete"},stats:{plays:0,downloads:3540,upvotes:1704,downvotes:57,score:.9183},uploaded:"2019-03-08T16:51:17Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"15ba13d183c824f46d2fc68ff5d6ba52ced1fad5",key:"3c89",state:"Published",createdAt:"2019-03-08T16:51:17Z",sageScore:3,diffs:[{njs:10,offset:0,notes:175,bombs:0,obstacles:0,nps:1.976,length:248,characteristic:"Standard",difficulty:"Normal",events:3251,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:88.571,paritySummary:{errors:17,warns:14,resets:0},stars:1.03},{njs:11,offset:0,notes:274,bombs:0,obstacles:0,nps:3.094,length:248,characteristic:"Standard",difficulty:"Hard",events:3251,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:88.571,paritySummary:{errors:17,warns:5,resets:0},stars:1.73},{njs:13,offset:0,notes:376,bombs:0,obstacles:0,nps:4.245,length:248,characteristic:"Standard",difficulty:"Expert",events:3251,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:88.571,paritySummary:{errors:22,warns:35,resets:0}},{njs:16,offset:0,notes:482,bombs:0,obstacles:0,nps:5.442,length:248,characteristic:"Standard",difficulty:"ExpertPlus",events:3251,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:88.571,paritySummary:{errors:20,warns:35,resets:0}}],downloadURL:"https://cdn.beatsaver.com/15ba13d183c824f46d2fc68ff5d6ba52ced1fad5.zip",coverURL:"https://cdn.beatsaver.com/15ba13d183c824f46d2fc68ff5d6ba52ced1fad5.jpg",previewURL:"https://cdn.beatsaver.com/15ba13d183c824f46d2fc68ff5d6ba52ced1fad5.mp3"}],createdAt:"2019-03-08T16:51:17Z",updatedAt:"2019-03-08T16:51:17Z",lastPublishedAt:"2019-03-08T16:51:17Z"},{id:"1a0b7",name:"[Electro Swing Pack] Jamie Berry - Lost In The Rhythm (ft. Octavia Rose)",description:"Nixie Presents: Electro Swing Pack!\n\n10 electro swing songs with expert and expert+ diffs to make your booty swing!\n\nGet The Pack: \nhttps://bsaber.com/electro-swing-pack/\n\nMap Gameplay:\nhttps://youtu.be/4O8l7rq4eHI\n\nComplete Pack Playthrough:\nhttps://youtu.be/yj9rw4MEh7s\n\nHeyya! After looking for some dancey electro swing maps, I noticed that there barely are any!\nSo I took matters into my own hands, learning mapping basically from scratch,\nscrapping my first failed attempts and then finally making a map that was good.\nI found it so fun that I ended up making 9 more maps,\nand fine tuned them with the help of the testplayers in BSMG,\nas well as the lovely curators from the bsaber discord.\n\nHuge thanks in particular to:\nMonstor, Bearly, Noxn, Bullet, Vaser888, Tocxx, Jafdy, Storm Knight and Pixelguy!\n\nIf you want to talk to me, here is my Discord:\nNixie.Korten#6944",uploader:{id:4286374,name:"nixiekorten",uniqueSet:!0,hash:"6096752e12772e0006e2f7e6",avatar:"https://cdn.beatsaver.com/avatar/840550221690699776.png",type:"DISCORD"},metadata:{bpm:121,duration:186,songName:"Lost In The Rhythm",songSubName:"(ft. Octavia Rose)",songAuthorName:"Jamie Berry",levelAuthorName:"Nixie.Korten"},stats:{plays:0,downloads:13219,upvotes:666,downvotes:9,score:.9182},uploaded:"2021-07-08T15:24:57.679Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6d006d47880a45a134844f3787f3c184881d4673",key:"1a0b7",state:"Published",createdAt:"2021-07-08T15:24:57.679Z",sageScore:5,diffs:[{njs:16,offset:-.25,notes:591,bombs:0,obstacles:8,nps:3.274,length:364,characteristic:"Standard",difficulty:"Expert",events:3271,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.496,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:.25,notes:821,bombs:0,obstacles:8,nps:4.549,length:364,characteristic:"Standard",difficulty:"ExpertPlus",events:3271,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.496,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6d006d47880a45a134844f3787f3c184881d4673.zip",coverURL:"https://cdn.beatsaver.com/6d006d47880a45a134844f3787f3c184881d4673.jpg",previewURL:"https://cdn.beatsaver.com/6d006d47880a45a134844f3787f3c184881d4673.mp3"}],createdAt:"2021-07-08T15:24:57.679Z",updatedAt:"2021-07-08T15:24:57.679Z",lastPublishedAt:"2021-07-08T15:24:57.679Z"},{id:"84d6",name:"drop pop candy - Reol ft. Giga-P (+ Luka & Rin) [Std, 360 & 90]",description:"Another song by the amazing duo Reol and Giga-P, drop pop candy entered Hall of Fame just seven days after release!\n\nExpert+ guest difficulty by AaltopahWi! Everything else (Expert-Easy, 360, 90 and lighting) by me, Kolezan.\n\nThe Vocaloid song version with Megurine Luka and Kagamine Rin is also included!\nTo use this version do a file search in your Beat Saber_data/CustomLevels folder for “Reol_drop_pop_candy.egg”, open the folder which that file resides in, then rename “Reol_drop_pop_candy.egg” to “Reol_drop_pop_candy_Reol_and_Giga.egg”, and then rename “Reol_drop_pop_candy_Luka_and_Rin.egg” to “Reol_drop_pop_candy.egg”. Done!\n\nThanks to Maralade for pushing me to map this song sooner than later!\n\nMap is a tad harder than average, mostly to keep up with all the interesting points in the song. Map also contains custom map colors based on the music video.\n\nNo map video preview.\n\nBPM: 130\nDuration: 3:44\n\n== Standard mode: ==\nEasy:\nNPS 1.36, 306 notes, 50 walls, 0 bombs\n\nNormal:\nNPS 2.10, 470 notes, 16 walls, 0 bombs\n\nHard:\nNPS 2.86, 641 notes, 5 walls, 0 bombs\n\nExpert:\nNPS 3.85, 863 notes, 5 walls, 0 bombs\n\nExpert+ (by AaltopahWi):\nNPS 4.61, 1035 notes, 7 walls, 0 bombs\n\n== 360 degree mode: ==\nExpert:\nNPS 3.89, 873 notes, 39 walls, 0 bombs\n\n== 90 degree mode: ==\nExpert:\nNPS 3.89, 873 notes, 38 walls, 0 bombs\n\nThanks to Sorukun, fruhead, Checkthepan and Helen Carnate for playtesting!\n\nEnjoy!",uploader:{id:4285318,name:"kolezan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fcbb",avatar:"https://cdn.beatsaver.com/avatar/220513618763055106.png",type:"DISCORD"},metadata:{bpm:130,duration:224,songName:"drop pop candy",songSubName:"ft. GigaP",songAuthorName:"Reol",levelAuthorName:"Kolezan (E+ by AaltopahWi)"},stats:{plays:0,downloads:2815,upvotes:1257,downvotes:35,score:.9182},uploaded:"2020-02-07T07:19:14.938Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"50e4c2101cc079a98f88e80aa7091e60bb6d1d31",key:"84d6",state:"Published",createdAt:"2020-02-07T07:19:14.938Z",sageScore:6,diffs:[{njs:9,offset:0,notes:306,bombs:0,obstacles:50,nps:1.42,length:467,characteristic:"Standard",difficulty:"Easy",events:2147,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.538,paritySummary:{errors:80,warns:21,resets:0}},{njs:11,offset:1,notes:470,bombs:0,obstacles:16,nps:2.164,length:470.5,characteristic:"Standard",difficulty:"Normal",events:2147,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.154,paritySummary:{errors:67,warns:51,resets:0}},{njs:14,offset:.5,notes:641,bombs:0,obstacles:5,nps:2.927,length:474.5,characteristic:"Standard",difficulty:"Hard",events:2147,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219,paritySummary:{errors:33,warns:21,resets:0}},{njs:17,offset:.125,notes:863,bombs:0,obstacles:5,nps:3.941,length:474.5,characteristic:"Standard",difficulty:"Expert",events:2147,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219,paritySummary:{errors:21,warns:36,resets:0}},{njs:19,offset:-.25,notes:1035,bombs:0,obstacles:7,nps:4.726,length:474.5,characteristic:"Standard",difficulty:"ExpertPlus",events:2147,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219,paritySummary:{errors:3,warns:6,resets:0}},{njs:15,offset:.25,notes:873,bombs:0,obstacles:38,nps:3.986,length:474.5,characteristic:"90Degree",difficulty:"Expert",events:2464,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219,paritySummary:{errors:26,warns:37,resets:0}},{njs:15,offset:.25,notes:873,bombs:0,obstacles:39,nps:3.986,length:474.5,characteristic:"360Degree",difficulty:"Expert",events:2467,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219,paritySummary:{errors:26,warns:37,resets:0}}],downloadURL:"https://cdn.beatsaver.com/50e4c2101cc079a98f88e80aa7091e60bb6d1d31.zip",coverURL:"https://cdn.beatsaver.com/50e4c2101cc079a98f88e80aa7091e60bb6d1d31.jpg",previewURL:"https://cdn.beatsaver.com/50e4c2101cc079a98f88e80aa7091e60bb6d1d31.mp3"}],createdAt:"2020-02-07T07:19:14.938Z",updatedAt:"2020-02-07T07:19:14.938Z",lastPublishedAt:"2020-02-07T07:19:14.938Z"},{id:"68bb",name:"FREEDOM DiVE (ZipperKim Remix)",description:"Remixer: https://youtu.be/IQ7KvbSrm7M\n\nPreview: https://youtu.be/L2cs_elU7rE\n\n\nTwitter: https://twitter.com/Dack731",uploader:{id:4285250,name:"dack",uniqueSet:!0,hash:"5cff0b7598cc5a672c852c6f",avatar:"https://cdn.beatsaver.com/avatar/297344689798119424.png",type:"DISCORD"},metadata:{bpm:140,duration:160,songName:"FREEDOM DiVE",songSubName:"(ZipperKim Remix)",songAuthorName:"xi",levelAuthorName:"Dack"},stats:{plays:0,downloads:4015,upvotes:1940,downvotes:70,score:.9181},uploaded:"2019-10-08T23:40:00.119Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"f1591bf3f2d821a48bb86214c9da47d8cff24046",key:"68bb",state:"Published",createdAt:"2019-10-08T23:40:00.119Z",sageScore:6,diffs:[{njs:14.5,offset:0,notes:529,bombs:4,obstacles:2,nps:3.547,length:348,characteristic:"Standard",difficulty:"Hard",events:3703,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:149.143,paritySummary:{errors:0,warns:0,resets:1},stars:2.14},{njs:16,offset:0,notes:643,bombs:4,obstacles:0,nps:4.311,length:348,characteristic:"Standard",difficulty:"Expert",events:3703,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:149.143,paritySummary:{errors:7,warns:4,resets:1},stars:2.84},{njs:18,offset:0,notes:752,bombs:4,obstacles:0,nps:5.042,length:348,characteristic:"Standard",difficulty:"ExpertPlus",events:3703,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:149.143,paritySummary:{errors:9,warns:11,resets:1},stars:4.16}],downloadURL:"https://cdn.beatsaver.com/f1591bf3f2d821a48bb86214c9da47d8cff24046.zip",coverURL:"https://cdn.beatsaver.com/f1591bf3f2d821a48bb86214c9da47d8cff24046.jpg",previewURL:"https://cdn.beatsaver.com/f1591bf3f2d821a48bb86214c9da47d8cff24046.mp3"}],createdAt:"2019-10-08T23:40:00.119Z",updatedAt:"2019-10-08T23:40:00.119Z",lastPublishedAt:"2019-10-08T23:40:00.119Z"},{id:"456d",name:"Wiz Khalifa - Black and Yellow",description:"Yeah, uh huh, you know what it is! It's a new map! Black and Yellow by Wiz Khalifa. The colors? Black and yellow, black and yellow, black and yellow, black and yellow.\r\nI think it's a fun map, so I hope you enjoy as well!\r\n\r\nAs always, you can give me feedback on Beast Saber or in Discord @Maarten#9596.\r\n\r\nPreview video: https://www.youtube.com/watch?v=fla0VfHh3WE",uploader:{id:57657,name:"pixelguymm",uniqueSet:!0,hash:"5cff0b7698cc5a672c8541a8",avatar:"https://cdn.beatsaver.com/avatar/434386941547511818.png",type:"DISCORD"},metadata:{bpm:164,duration:102,songName:"Black and Yellow",songSubName:"Wiz Khalifa",songAuthorName:"Pixelguy",levelAuthorName:"pixelguymm"},stats:{plays:0,downloads:2927,upvotes:1171,downvotes:31,score:.9181},uploaded:"2019-04-13T08:58:48Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b03042e8647cca08cdc5b80e23ed569ef3dbc201",key:"456d",state:"Published",createdAt:"2019-04-13T08:58:48Z",sageScore:6,diffs:[{njs:12,offset:0,notes:144,bombs:0,obstacles:0,nps:1.55,length:254,characteristic:"Standard",difficulty:"Easy",events:1062,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:92.927,paritySummary:{errors:7,warns:0,resets:0}},{njs:12,offset:0,notes:208,bombs:0,obstacles:0,nps:2.23,length:255,characteristic:"Standard",difficulty:"Normal",events:1062,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:93.293,paritySummary:{errors:8,warns:8,resets:0}},{njs:14,offset:0,notes:293,bombs:16,obstacles:0,nps:3.135,length:255.5,characteristic:"Standard",difficulty:"Hard",events:1062,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:93.476,paritySummary:{errors:18,warns:14,resets:3}},{njs:16,offset:0,notes:402,bombs:20,obstacles:0,nps:4.301,length:255.5,characteristic:"Standard",difficulty:"Expert",events:1062,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:93.476,paritySummary:{errors:18,warns:16,resets:8}}],downloadURL:"https://cdn.beatsaver.com/b03042e8647cca08cdc5b80e23ed569ef3dbc201.zip",coverURL:"https://cdn.beatsaver.com/b03042e8647cca08cdc5b80e23ed569ef3dbc201.jpg",previewURL:"https://cdn.beatsaver.com/b03042e8647cca08cdc5b80e23ed569ef3dbc201.mp3"}],createdAt:"2019-04-13T08:58:48Z",updatedAt:"2019-04-13T08:58:48Z",lastPublishedAt:"2019-04-13T08:58:48Z"},{id:"6554",name:"Windows Down - Nightcore",description:"Youtube Preview: https://youtu.be/z-Iaze8Ac60",uploader:{id:23751,name:"monteblanco",uniqueSet:!0,hash:"5cff0b7798cc5a672c855ef5",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855ef5?d=retro",type:"SIMPLE"},metadata:{bpm:159,duration:159,songName:"Windows Down - Nightcore",songSubName:"",songAuthorName:"Nightcore Reality",levelAuthorName:"Monteblanco"},stats:{plays:0,downloads:697,upvotes:786,downvotes:14,score:.918},uploaded:"2019-09-23T01:31:55.127Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"4bec5881a2090ab3e655fecdec1eed5324703c94",key:"6554",state:"Published",createdAt:"2019-09-23T01:31:55.127Z",sageScore:4,diffs:[{njs:15,offset:0,notes:518,bombs:20,obstacles:27,nps:3.348,length:410,characteristic:"Standard",difficulty:"Expert",events:646,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.717,paritySummary:{errors:0,warns:0,resets:6}}],downloadURL:"https://cdn.beatsaver.com/4bec5881a2090ab3e655fecdec1eed5324703c94.zip",coverURL:"https://cdn.beatsaver.com/4bec5881a2090ab3e655fecdec1eed5324703c94.jpg",previewURL:"https://cdn.beatsaver.com/4bec5881a2090ab3e655fecdec1eed5324703c94.mp3"}],createdAt:"2019-09-23T01:31:55.127Z",updatedAt:"2019-09-23T01:31:55.127Z",lastPublishedAt:"2019-09-23T01:31:55.127Z"},{id:"2bb7",name:"Join Us for a Bite (FNAF Sister Location) - JT Music feat. Andrea Storm Kaden",description:"BPM: 86 (172 at points)\r\nNotes: Hard - 628 , Expert - 745\r\nWalls: 14\r\n\r\nThanks to Redmagi for playtesting, and AaltopahWi for lighting advice.",uploader:{id:4285188,name:"fruhead",uniqueSet:!0,hash:"5cff0b7598cc5a672c852683",avatar:"https://cdn.beatsaver.com/avatar/174000100413145090.png",type:"DISCORD"},metadata:{bpm:86,duration:225,songName:"Join Us for a Bite (FNAF Sister Location)",songSubName:"JT Music feat. Andrea Storm Kaden",songAuthorName:"fruhead",levelAuthorName:"fruhead"},stats:{plays:0,downloads:1667,upvotes:993,downvotes:23,score:.918},uploaded:"2019-01-07T06:04:31Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7974c174533415ccc43dcd75678aedd1aec44f96",key:"2bb7",state:"Published",createdAt:"2019-01-07T06:04:31Z",sageScore:6,diffs:[{njs:12,offset:0,notes:628,bombs:0,obstacles:14,nps:2.867,length:314,characteristic:"Standard",difficulty:"Hard",events:1759,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.07,paritySummary:{errors:43,warns:22,resets:0}},{njs:13,offset:0,notes:745,bombs:0,obstacles:14,nps:3.401,length:314,characteristic:"Standard",difficulty:"Expert",events:1760,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.07,paritySummary:{errors:30,warns:24,resets:0}}],downloadURL:"https://cdn.beatsaver.com/7974c174533415ccc43dcd75678aedd1aec44f96.zip",coverURL:"https://cdn.beatsaver.com/7974c174533415ccc43dcd75678aedd1aec44f96.jpg",previewURL:"https://cdn.beatsaver.com/7974c174533415ccc43dcd75678aedd1aec44f96.mp3"}],createdAt:"2019-01-07T06:04:31Z",updatedAt:"2019-01-07T06:04:31Z",lastPublishedAt:"2019-01-07T06:04:31Z"},{id:"e4",name:"Every Time We Touch - Cascada",description:"Expert Only\r\nTime - 3:19\r\nBPM - 142\r\nNotes- 564",uploader:{id:49373,name:"purphoros",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea98",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ea98?d=retro",type:"SIMPLE"},metadata:{bpm:142,duration:199,songName:"Every Time We Touch",songSubName:"",songAuthorName:"Cascada",levelAuthorName:"purphoros"},stats:{plays:0,downloads:15282,upvotes:10721,downvotes:627,score:.918},uploaded:"2018-05-18T03:51:03Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"bc6c7ef1385db4c11c59736d2b32eacf48c95bd9",key:"e4",state:"Published",createdAt:"2018-05-18T03:51:03Z",sageScore:4,diffs:[{njs:10,offset:0,notes:564,bombs:0,obstacles:0,nps:3.178,length:420,characteristic:"Standard",difficulty:"Expert",events:10,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:177.465,paritySummary:{errors:108,warns:44,resets:0},stars:2.13}],downloadURL:"https://cdn.beatsaver.com/bc6c7ef1385db4c11c59736d2b32eacf48c95bd9.zip",coverURL:"https://cdn.beatsaver.com/bc6c7ef1385db4c11c59736d2b32eacf48c95bd9.jpg",previewURL:"https://cdn.beatsaver.com/bc6c7ef1385db4c11c59736d2b32eacf48c95bd9.mp3"}],createdAt:"2018-05-18T03:51:03Z",updatedAt:"2018-05-18T03:51:03Z",lastPublishedAt:"2018-05-18T03:51:03Z"},{id:"3519",name:"Happier Sunflower - Marshmello, Post Malone, Swae Lee, Bastille [Mashup by Dj Pyromania]",description:"Preview:\r\nhttps://www.youtube.com/watch?v=eRwvvhMrkcQ",uploader:{id:4286278,name:"ruckus",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f1d8",avatar:"https://cdn.beatsaver.com/avatar/239082462083284992.png",type:"DISCORD"},metadata:{bpm:100,duration:205,songName:"Happier Sunflower",songSubName:"Dj Pyromania, Marshmello, Post Malone, Bastille, Swae Lee",songAuthorName:"Ruckus",levelAuthorName:"ruckus"},stats:{plays:0,downloads:5342,upvotes:1788,downvotes:62,score:.918},uploaded:"2019-02-10T18:46:16Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ec8dc26331e1eff4d4fabeed45b927c49a61f8ca",key:"3519",state:"Published",createdAt:"2019-02-10T18:46:16Z",sageScore:5,diffs:[{njs:14,offset:0,notes:348,bombs:0,obstacles:24,nps:1.747,length:332,characteristic:"Standard",difficulty:"Normal",events:2700,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:199.2,paritySummary:{errors:24,warns:16,resets:0}},{njs:14,offset:0,notes:718,bombs:0,obstacles:31,nps:3.604,length:332.063,characteristic:"Standard",difficulty:"Expert",events:2700,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:199.238,paritySummary:{errors:47,warns:69,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ec8dc26331e1eff4d4fabeed45b927c49a61f8ca.zip",coverURL:"https://cdn.beatsaver.com/ec8dc26331e1eff4d4fabeed45b927c49a61f8ca.jpg",previewURL:"https://cdn.beatsaver.com/ec8dc26331e1eff4d4fabeed45b927c49a61f8ca.mp3"}],createdAt:"2019-02-10T18:46:16Z",updatedAt:"2019-02-10T18:46:16Z",lastPublishedAt:"2019-02-10T18:46:16Z"},{id:"c767",name:"We'll Meet Again",description:"Decided to wall map this beautiful song, hope you all love it!\n---------------------------------------------\n\nQuestions? Feedback? Map not working? \nmessage me on discord: Reddek#5864",uploader:{id:4233941,name:"reddek",uniqueSet:!0,hash:"5dbfb4426dea0b0006bd328d",avatar:"https://cdn.beatsaver.com/avatar/177436487086768129.png",type:"DISCORD"},metadata:{bpm:192,duration:196,songName:"We'll Meet Again",songSubName:"",songAuthorName:"TheFatRat & Laura Brehm",levelAuthorName:"Reddek"},stats:{plays:0,downloads:1398,upvotes:758,downvotes:13,score:.9179},uploaded:"2020-07-25T12:21:48.657Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"4e3bc64c9aca00a925848905caccd27b5f390573",key:"c767",state:"Published",createdAt:"2020-07-25T12:21:48.657Z",sageScore:3,diffs:[{njs:18,offset:0,notes:721,bombs:34,obstacles:17842,nps:4.006,length:576,characteristic:"Standard",difficulty:"ExpertPlus",events:2009,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:180,paritySummary:{errors:0,warns:0,resets:2}}],downloadURL:"https://cdn.beatsaver.com/4e3bc64c9aca00a925848905caccd27b5f390573.zip",coverURL:"https://cdn.beatsaver.com/4e3bc64c9aca00a925848905caccd27b5f390573.jpg",previewURL:"https://cdn.beatsaver.com/4e3bc64c9aca00a925848905caccd27b5f390573.mp3"}],createdAt:"2020-07-25T12:21:48.657Z",updatedAt:"2020-07-25T12:21:48.657Z",lastPublishedAt:"2020-07-25T12:21:48.657Z"},{id:"b99e",name:"How You Like That - Blackpink",description:"All difficulties available.\n\nExpert+ preview (pre-release version): https://youtu.be/seIKt_PR7hg\n\nSpecial thanks to lilqbunny for setting up the audio.\n\nFollow me on Twitter u won't: https://twitter.com/aggrogahu\nCatch me live on Twitch: https://www.twitch.tv/aggrogahu\nJoin the KPOP Beat Saber discord: https://discord.gg/c9uHGYP",uploader:{id:4284613,name:"aggrogahu",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fdad",avatar:"https://cdn.beatsaver.com/avatar/158363872649150464.png",type:"DISCORD"},metadata:{bpm:130,duration:181,songName:"How You Like That",songSubName:"",songAuthorName:"Blackpink",levelAuthorName:"aggrogahu"},stats:{plays:0,downloads:11418,upvotes:1451,downvotes:45,score:.9179},uploaded:"2020-07-05T06:16:58.371Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"54f993f61f0ea48ddbb764f13936cc78799046a5",key:"b99e",state:"Published",createdAt:"2020-07-05T06:16:58.371Z",sageScore:7,diffs:[{njs:10,offset:1,notes:216,bombs:6,obstacles:16,nps:1.286,length:364,characteristic:"Standard",difficulty:"Easy",events:1462,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168,paritySummary:{errors:37,warns:12,resets:4}},{njs:10,offset:1,notes:276,bombs:14,obstacles:19,nps:1.643,length:364,characteristic:"Standard",difficulty:"Normal",events:1462,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168,paritySummary:{errors:38,warns:26,resets:7}},{njs:12,offset:1,notes:430,bombs:32,obstacles:19,nps:2.56,length:364,characteristic:"Standard",difficulty:"Hard",events:1462,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168,paritySummary:{errors:34,warns:46,resets:9}},{njs:14,offset:.7,notes:631,bombs:30,obstacles:21,nps:3.749,length:364.667,characteristic:"Standard",difficulty:"Expert",events:1462,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.308,paritySummary:{errors:18,warns:28,resets:8}},{njs:19,offset:-.3,notes:692,bombs:30,obstacles:30,nps:4.112,length:364.667,characteristic:"Standard",difficulty:"ExpertPlus",events:1462,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.308,paritySummary:{errors:16,warns:22,resets:8}}],downloadURL:"https://cdn.beatsaver.com/54f993f61f0ea48ddbb764f13936cc78799046a5.zip",coverURL:"https://cdn.beatsaver.com/54f993f61f0ea48ddbb764f13936cc78799046a5.jpg",previewURL:"https://cdn.beatsaver.com/54f993f61f0ea48ddbb764f13936cc78799046a5.mp3"}],createdAt:"2020-07-05T06:16:58.371Z",updatedAt:"2020-07-05T06:16:58.371Z",lastPublishedAt:"2020-07-05T06:16:58.371Z"},{id:"8647",name:"Pursuing My True Self - Persona 4",description:"80",uploader:{id:4285521,name:"ejiejidayo",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fc58",avatar:"https://cdn.beatsaver.com/avatar/224894241279574016.png",type:"DISCORD"},metadata:{bpm:119,duration:183,songName:"Pursuing My True Self",songSubName:"",songAuthorName:"Persona 4",levelAuthorName:"ejiejidayo"},stats:{plays:0,downloads:5195,upvotes:1185,downvotes:32,score:.9179},uploaded:"2020-02-12T11:59:55.125Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"990f576d9b1045bc6aa4f7ab7a2231a1bd05e6fe",key:"8647",state:"Published",createdAt:"2020-02-12T11:59:55.125Z",sageScore:4,diffs:[{njs:12,offset:0,notes:605,bombs:0,obstacles:59,nps:3.354,length:357.75,characteristic:"Standard",difficulty:"Hard",events:1318,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.378,paritySummary:{errors:11,warns:12,resets:0}},{njs:15,offset:-.4,notes:812,bombs:0,obstacles:47,nps:4.499,length:358,characteristic:"Standard",difficulty:"Expert",events:1318,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.504,paritySummary:{errors:9,warns:23,resets:0}},{njs:17,offset:-.6,notes:921,bombs:0,obstacles:81,nps:5.102,length:358,characteristic:"Standard",difficulty:"ExpertPlus",events:1318,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.504,paritySummary:{errors:49,warns:77,resets:0}}],downloadURL:"https://cdn.beatsaver.com/990f576d9b1045bc6aa4f7ab7a2231a1bd05e6fe.zip",coverURL:"https://cdn.beatsaver.com/990f576d9b1045bc6aa4f7ab7a2231a1bd05e6fe.jpg",previewURL:"https://cdn.beatsaver.com/990f576d9b1045bc6aa4f7ab7a2231a1bd05e6fe.mp3"}],createdAt:"2020-02-12T11:59:55.125Z",updatedAt:"2020-02-12T11:59:55.125Z",lastPublishedAt:"2020-02-12T11:59:55.125Z"},{id:"5911",name:"Stars Tonight - Zeds Dead x DROELOE (collab w/ Rexxz & StyngMe)",description:"155 BPM - 2:47 Runtime\n\nStandard:\nEasy - 245 Notes\nNormal - 369 Notes\nHard - 442 Notes\nExpert - 535 Notes\nExpert+ - 700 Notes\n\nSingle Saber:\nHard - 346 Notes\nExpert - 415 Notes\nExpert+ - 556 Notes\n\nSkyler Wallace: Expert+, Easy - Hard, Single Saber\nStyngMe: Expert+\nRexxz: Lighting",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:155,duration:167,songName:"Stars Tonight",songSubName:"",songAuthorName:"Zeds Dead x Droeloe",levelAuthorName:"Skyler, StyngMe, & Rexxz"},stats:{plays:0,downloads:2895,upvotes:1490,downvotes:47,score:.9179},uploaded:"2019-07-27T04:11:18.419Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e9fe30a5d1c3d1f1ed1d1d0af33e83f52a22c2cb",key:"5911",state:"Published",createdAt:"2019-07-27T04:11:18.419Z",sageScore:8,diffs:[{njs:10,offset:0,notes:245,bombs:0,obstacles:14,nps:1.582,length:400,characteristic:"Standard",difficulty:"Easy",events:6285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.839,paritySummary:{errors:89,warns:16,resets:0}},{njs:10,offset:0,notes:369,bombs:0,obstacles:14,nps:2.383,length:400,characteristic:"Standard",difficulty:"Normal",events:6285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.839,paritySummary:{errors:97,warns:22,resets:0}},{njs:12,offset:1,notes:442,bombs:2,obstacles:16,nps:2.855,length:400,characteristic:"Standard",difficulty:"Hard",events:6285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.839,paritySummary:{errors:65,warns:28,resets:3}},{njs:14,offset:1,notes:535,bombs:6,obstacles:16,nps:3.455,length:400,characteristic:"Standard",difficulty:"Expert",events:6285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.839,paritySummary:{errors:22,warns:16,resets:5}},{njs:18,offset:.1,notes:700,bombs:6,obstacles:43,nps:4.521,length:400,characteristic:"Standard",difficulty:"ExpertPlus",events:6285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.839,paritySummary:{errors:39,warns:65,resets:0}},{njs:12,offset:1,notes:346,bombs:0,obstacles:14,nps:2.235,length:400,characteristic:"OneSaber",difficulty:"Hard",events:6285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.839,paritySummary:{errors:44,warns:16,resets:0}},{njs:14,offset:1,notes:415,bombs:2,obstacles:16,nps:2.68,length:400,characteristic:"OneSaber",difficulty:"Expert",events:6285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.839,paritySummary:{errors:31,warns:24,resets:2}},{njs:16,offset:.25,notes:556,bombs:6,obstacles:16,nps:3.591,length:400,characteristic:"OneSaber",difficulty:"ExpertPlus",events:6285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.839,paritySummary:{errors:34,warns:108,resets:1}}],downloadURL:"https://cdn.beatsaver.com/e9fe30a5d1c3d1f1ed1d1d0af33e83f52a22c2cb.zip",coverURL:"https://cdn.beatsaver.com/e9fe30a5d1c3d1f1ed1d1d0af33e83f52a22c2cb.jpg",previewURL:"https://cdn.beatsaver.com/e9fe30a5d1c3d1f1ed1d1d0af33e83f52a22c2cb.mp3"}],createdAt:"2019-07-27T04:11:18.419Z",updatedAt:"2019-07-27T04:11:18.419Z",lastPublishedAt:"2019-07-27T04:11:18.419Z"},{id:"5395",name:"Alestorm - Mexico",description:"My first map, this song felt good to map because it's structurally simple and catchy. Beat Saber needs more metal and I want to make more maps so any feedback is appreciated :). \n\nExpert and Hard are mapped to be significantly easier than Expert+, so that more people can enjoy it. Here's a video of Expert+ playthrough: https://youtu.be/Y-0cYyZwxIY",uploader:{id:1207,name:"wyxi",uniqueSet:!0,hash:"5d0abf96b8c469000699075f",avatar:"https://www.gravatar.com/avatar/5d0abf96b8c469000699075f?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:192,songName:"Mexico",songSubName:"",songAuthorName:"Alestorm",levelAuthorName:"Wyxi"},stats:{plays:0,downloads:1445,upvotes:873,downvotes:18,score:.9177},uploaded:"2019-06-19T23:52:29.181Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"fb5cda4446fdd4dd02cfb5510d00244842e4c392",key:"5395",state:"Published",createdAt:"2019-06-19T23:52:29.181Z",sageScore:6,diffs:[{njs:11,offset:1,notes:435,bombs:70,obstacles:23,nps:2.376,length:390.5,characteristic:"Standard",difficulty:"Hard",events:1282,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.047,paritySummary:{errors:76,warns:16,resets:0}},{njs:13,offset:1,notes:560,bombs:70,obstacles:23,nps:3.059,length:390.5,characteristic:"Standard",difficulty:"Expert",events:1282,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.047,paritySummary:{errors:55,warns:15,resets:0}},{njs:15,offset:0,notes:975,bombs:76,obstacles:23,nps:5.327,length:390.5,characteristic:"Standard",difficulty:"ExpertPlus",events:1280,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.047,paritySummary:{errors:65,warns:64,resets:1}}],downloadURL:"https://cdn.beatsaver.com/fb5cda4446fdd4dd02cfb5510d00244842e4c392.zip",coverURL:"https://cdn.beatsaver.com/fb5cda4446fdd4dd02cfb5510d00244842e4c392.jpg",previewURL:"https://cdn.beatsaver.com/fb5cda4446fdd4dd02cfb5510d00244842e4c392.mp3"}],createdAt:"2019-06-19T23:52:29.181Z",updatedAt:"2019-06-19T23:52:29.181Z",lastPublishedAt:"2019-06-19T23:52:29.181Z"},{id:"4e8d",name:"Centipede (Visual Representation) - Knife Party",description:"Make sure you have SFX turned off and NoFail turned on!\r\nThis map is not intended to be passed, just sit back and enjoy the show! :)",uploader:{id:11127,name:"nicetomeetyou",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f5d1",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f5d1?d=retro",type:"SIMPLE"},metadata:{bpm:280,duration:145,songName:"Centipede (VISUAL)",songSubName:"Knife Party",songAuthorName:"NiceToMeetYou",levelAuthorName:"nicetomeetyou"},stats:{plays:0,downloads:2652,upvotes:1363,downvotes:41,score:.9177},uploaded:"2019-05-22T21:23:54Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8061055d363292dda7b055eefc1c5dbebb13e616",key:"4e8d",state:"Published",createdAt:"2019-05-22T21:23:54Z",sageScore:5,diffs:[{njs:23,offset:0,notes:9189,bombs:0,obstacles:0,nps:95.719,length:448,characteristic:"Standard",difficulty:"ExpertPlus",events:2178,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:96,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/8061055d363292dda7b055eefc1c5dbebb13e616.zip",coverURL:"https://cdn.beatsaver.com/8061055d363292dda7b055eefc1c5dbebb13e616.jpg",previewURL:"https://cdn.beatsaver.com/8061055d363292dda7b055eefc1c5dbebb13e616.mp3"}],createdAt:"2019-05-22T21:23:54Z",updatedAt:"2019-05-22T21:23:54Z",lastPublishedAt:"2019-05-22T21:23:54Z"},{id:"4445",name:"Runaway Baby - Bruno Mars (V2)",description:"45\r\nremap https://beatsaver.com/browse/detail/2208-1528",uploader:{id:4285521,name:"ejiejidayo",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fc58",avatar:"https://cdn.beatsaver.com/avatar/224894241279574016.png",type:"DISCORD"},metadata:{bpm:164,duration:149,songName:"Runaway Baby V2",songSubName:"Bruno Mars",songAuthorName:"ejiejidayo",levelAuthorName:"ejiejidayo"},stats:{plays:0,downloads:3375,upvotes:1030,downvotes:25,score:.9177},uploaded:"2019-04-08T07:32:15Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6ae2ff433fb5a570eeb0801f30a01b446bde2c15",key:"4445",state:"Published",createdAt:"2019-04-08T07:32:15Z",sageScore:5,diffs:[{njs:11,offset:0,notes:614,bombs:0,obstacles:50,nps:4.463,length:376,characteristic:"Standard",difficulty:"Expert",events:1e3,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:137.561,paritySummary:{errors:60,warns:17,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6ae2ff433fb5a570eeb0801f30a01b446bde2c15.zip",coverURL:"https://cdn.beatsaver.com/6ae2ff433fb5a570eeb0801f30a01b446bde2c15.jpg",previewURL:"https://cdn.beatsaver.com/6ae2ff433fb5a570eeb0801f30a01b446bde2c15.mp3"}],createdAt:"2019-04-08T07:32:15Z",updatedAt:"2019-04-08T07:32:15Z",lastPublishedAt:"2019-04-08T07:32:15Z"},{id:"46b1",name:"Bad Guy - Billie Eilish",description:"Lighting done by Rexxz",uploader:{id:21050,name:"dgrj4life",uniqueSet:!0,hash:"5cff0b7298cc5a672c84eaa1",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84eaa1?d=retro",type:"SIMPLE"},metadata:{bpm:135,duration:194,songName:"Bad Guy",songSubName:"Billie Eilish",songAuthorName:"DGRJ 4 Life & Rexxz",levelAuthorName:"dgrj4life"},stats:{plays:0,downloads:6662,upvotes:5055,downvotes:256,score:.9176},uploaded:"2019-04-17T23:25:17Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a6a8f5c9146321b609645eefb109197e301bfe71",key:"46b1",state:"Published",createdAt:"2019-04-17T23:25:17Z",sageScore:5,diffs:[{njs:14,offset:0,notes:761,bombs:8,obstacles:36,nps:4.003,length:427.766,characteristic:"Standard",difficulty:"Expert",events:7645,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:190.118,paritySummary:{errors:33,warns:49,resets:0}},{njs:16,offset:0,notes:918,bombs:8,obstacles:36,nps:4.829,length:427.766,characteristic:"Standard",difficulty:"ExpertPlus",events:7645,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:190.118,paritySummary:{errors:32,warns:67,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a6a8f5c9146321b609645eefb109197e301bfe71.zip",coverURL:"https://cdn.beatsaver.com/a6a8f5c9146321b609645eefb109197e301bfe71.jpg",previewURL:"https://cdn.beatsaver.com/a6a8f5c9146321b609645eefb109197e301bfe71.mp3"}],createdAt:"2019-04-17T23:25:17Z",updatedAt:"2019-04-17T23:25:17Z",lastPublishedAt:"2019-04-17T23:25:17Z"},{id:"431d",name:"PewDiePie - Congratulations",description:"UPDATED OFFSET PROBLEMS\r\n\r\nIt's time to 'slice' T-Series! Presenting PewDiePie's latest diss track \"Congratulations\" featuring David Paul Brown and Joel Gustaf “Roomie” Berghult. I hope you enjoy!\r\n\r\nPewDiePie's original video: https://www.youtube.com/watch?v=PHgc8Q6qTjc",uploader:{id:42921,name:"pianoluigi",uniqueSet:!0,hash:"5cff0b7698cc5a672c854076",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c854076?d=retro",type:"SIMPLE"},metadata:{bpm:136,duration:252,songName:"Congratulations",songSubName:"PewDiePie",songAuthorName:"PianoLuigi",levelAuthorName:"PianoLuigi"},stats:{plays:0,downloads:1157,upvotes:937,downvotes:21,score:.9176},uploaded:"2019-04-03T09:04:34Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"768776b15afc801f67a2244439938740349cbc74",key:"431d",state:"Published",createdAt:"2019-04-03T09:04:34Z",sageScore:5,diffs:[{njs:16,offset:0,notes:1099,bombs:32,obstacles:64,nps:4.488,length:555,characteristic:"Standard",difficulty:"ExpertPlus",events:2728,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:244.853,paritySummary:{errors:40,warns:33,resets:16}}],downloadURL:"https://cdn.beatsaver.com/768776b15afc801f67a2244439938740349cbc74.zip",coverURL:"https://cdn.beatsaver.com/768776b15afc801f67a2244439938740349cbc74.jpg",previewURL:"https://cdn.beatsaver.com/768776b15afc801f67a2244439938740349cbc74.mp3"}],createdAt:"2019-04-03T09:04:34Z",updatedAt:"2019-04-03T09:04:34Z",lastPublishedAt:"2019-04-03T09:04:34Z"},{id:"b7f8",name:"Sabaton - Swedish Pagans",description:"Nice song by Sabaton. Mapped Expert+, Expert, Hard.\n\nGenre: Power metal\nBPM: 135\nNPS: 4.41 / 3.63 / 2.78\nExpert+ playthrough: https://youtu.be/Yx3WPwvZ8wE\n\nCome root for Sweden in the beat saber world cup! :D\n\nSpecial thanks to SatanClaus for playtesting\n\nFeedback/complaints/anything: Wyxi#5211 on discord.\n\n\n",uploader:{id:1207,name:"wyxi",uniqueSet:!0,hash:"5d0abf96b8c469000699075f",avatar:"https://www.gravatar.com/avatar/5d0abf96b8c469000699075f?d=retro",type:"SIMPLE"},metadata:{bpm:135,duration:246,songName:"Swedish Pagans",songSubName:"",songAuthorName:"Sabaton",levelAuthorName:"Wyxi"},stats:{plays:0,downloads:1342,upvotes:572,downvotes:6,score:.9175},uploaded:"2020-06-30T14:44:54.069Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6e0fb56882443e1fc41c79dde364d4456828b328",key:"b7f8",state:"Published",createdAt:"2020-06-30T14:44:54.069Z",sageScore:4,diffs:[{njs:13,offset:.5,notes:685,bombs:0,obstacles:4,nps:2.97,length:519,characteristic:"Standard",difficulty:"Hard",events:2174,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:230.667,paritySummary:{errors:15,warns:17,resets:0}},{njs:16,offset:0,notes:894,bombs:0,obstacles:4,nps:3.876,length:519,characteristic:"Standard",difficulty:"Expert",events:2174,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:230.667,paritySummary:{errors:0,warns:0,resets:0}},{njs:17,offset:-.25,notes:1086,bombs:0,obstacles:4,nps:4.708,length:519,characteristic:"Standard",difficulty:"ExpertPlus",events:2174,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:230.667,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6e0fb56882443e1fc41c79dde364d4456828b328.zip",coverURL:"https://cdn.beatsaver.com/6e0fb56882443e1fc41c79dde364d4456828b328.jpg",previewURL:"https://cdn.beatsaver.com/6e0fb56882443e1fc41c79dde364d4456828b328.mp3"}],createdAt:"2020-06-30T14:44:54.069Z",updatedAt:"2020-06-30T14:44:54.069Z",lastPublishedAt:"2020-06-30T14:44:54.069Z"},{id:"6713",name:"A Bloody Beginning",description:"Get down with some Castlevania vibes with the first Halloween themed map to be released 1 day before October!\r\n\r\nLots of trial and edits have been done to make this map as perfect as possible for release! So we all hope you enjoy the Walls and the Lighting alongside the notes!\r\n\r\nCredits for such wonderful creations:\r\n\r\nYume - New Wall Mapper that's been sweeping the scene!\r\n\r\nKnowledge - A heavy hitting experienced light mapper\r\n\r\n219278 - Yeah i have no idea why their name is like this but they helped light the map so it doesn't matter!",uploader:{id:4289111,name:"blackblazon",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ef34",avatar:"https://cdn.beatsaver.com/avatar/127162370538733568.png",type:"DISCORD"},metadata:{bpm:126,duration:215,songName:"A Bloody Beginning",songSubName:"",songAuthorName:"Nokbient & bLiNd",levelAuthorName:"BlackBlazon"},stats:{plays:0,downloads:1748,upvotes:1023,downvotes:25,score:.9175},uploaded:"2019-09-30T23:49:36.638Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"fc182c48abfc4750046eaed4dd6fe57ac8dd99fc",key:"6713",state:"Published",createdAt:"2019-09-30T23:49:36.638Z",sageScore:5,diffs:[{njs:18,offset:0,notes:959,bombs:0,obstacles:4567,nps:4.658,length:432.313,characteristic:"Standard",difficulty:"ExpertPlus",events:9945,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:205.863,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/fc182c48abfc4750046eaed4dd6fe57ac8dd99fc.zip",coverURL:"https://cdn.beatsaver.com/fc182c48abfc4750046eaed4dd6fe57ac8dd99fc.jpg",previewURL:"https://cdn.beatsaver.com/fc182c48abfc4750046eaed4dd6fe57ac8dd99fc.mp3"}],createdAt:"2019-09-30T23:49:36.638Z",updatedAt:"2019-09-30T23:49:36.638Z",lastPublishedAt:"2019-09-30T23:49:36.638Z"},{id:"5223",name:"Gloryhammer - Rise Of The Chaos Wizards",description:"I said it once, I'll say it again: Beat Saber needs more Metal \\m/\r\nTherefore - again with *all* difficulties - I present to you:\r\n\r\nExpertPlus-Playthrough: https://vimeo.com/341011795",uploader:{id:40721,name:"dunklerturm",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fd7c",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84fd7c?d=retro",type:"SIMPLE"},metadata:{bpm:180,duration:235,songName:"Rise Of The Chaos Wizards",songSubName:"Gloryhammer",songAuthorName:"DunklerTurm",levelAuthorName:"DunklerTurm"},stats:{plays:0,downloads:1469,upvotes:844,downvotes:17,score:.9175},uploaded:"2019-06-07T22:14:16Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8e46e96da31b6224ae62b6d9eb9434ff93f791da",key:"5223",state:"Published",createdAt:"2019-06-07T22:14:16Z",sageScore:7,diffs:[{njs:12,offset:0,notes:211,bombs:4,obstacles:152,nps:.961,length:659,characteristic:"Standard",difficulty:"Easy",events:2944,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.667,paritySummary:{errors:31,warns:8,resets:0}},{njs:12,offset:0,notes:309,bombs:41,obstacles:136,nps:1.373,length:675,characteristic:"Standard",difficulty:"Normal",events:2944,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225,paritySummary:{errors:59,warns:28,resets:3}},{njs:12,offset:0,notes:545,bombs:32,obstacles:84,nps:2.422,length:675,characteristic:"Standard",difficulty:"Hard",events:2944,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225,paritySummary:{errors:56,warns:71,resets:0}},{njs:14,offset:0,notes:782,bombs:86,obstacles:84,nps:3.476,length:675,characteristic:"Standard",difficulty:"Expert",events:2944,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225,paritySummary:{errors:55,warns:54,resets:0}},{njs:18,offset:0,notes:1106,bombs:95,obstacles:84,nps:4.916,length:675,characteristic:"Standard",difficulty:"ExpertPlus",events:5435,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225,paritySummary:{errors:70,warns:75,resets:1}}],downloadURL:"https://cdn.beatsaver.com/8e46e96da31b6224ae62b6d9eb9434ff93f791da.zip",coverURL:"https://cdn.beatsaver.com/8e46e96da31b6224ae62b6d9eb9434ff93f791da.jpg",previewURL:"https://cdn.beatsaver.com/8e46e96da31b6224ae62b6d9eb9434ff93f791da.mp3"}],createdAt:"2019-06-07T22:14:16Z",updatedAt:"2019-06-07T22:14:16Z",lastPublishedAt:"2019-06-07T22:14:16Z"},{id:"dc68",name:"Fallguys - Survive the fall",description:"f change BPM",uploader:{id:4284894,name:"emir",uniqueSet:!0,hash:"5d3dac6586729100069260cc",avatar:"https://cdn.beatsaver.com/avatar/331480642699395073.png",type:"DISCORD"},metadata:{bpm:165,duration:205,songName:"Fallguys - Survive the fall",songSubName:"",songAuthorName:"Fallguys",levelAuthorName:"Emir"},stats:{plays:0,downloads:1078,upvotes:889,downvotes:19,score:.9174},uploaded:"2020-08-23T10:11:49.857Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0c9598eefeed825dd9a6d9012d842d473ffb9b38",key:"dc68",state:"Published",createdAt:"2020-08-23T10:11:49.857Z",sageScore:6,diffs:[{njs:12,offset:0,notes:693,bombs:0,obstacles:17,nps:3.458,length:551.192,characteristic:"Standard",difficulty:"Hard",events:1367,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.433,paritySummary:{errors:0,warns:0,resets:0}},{njs:15,offset:0,notes:884,bombs:0,obstacles:374,nps:4.41,length:551.192,characteristic:"Standard",difficulty:"Expert",events:1367,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.433,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:-.3,notes:1175,bombs:24,obstacles:10,nps:5.862,length:551.192,characteristic:"Standard",difficulty:"ExpertPlus",events:1367,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.433,paritySummary:{errors:0,warns:0,resets:12}}],downloadURL:"https://cdn.beatsaver.com/0c9598eefeed825dd9a6d9012d842d473ffb9b38.zip",coverURL:"https://cdn.beatsaver.com/0c9598eefeed825dd9a6d9012d842d473ffb9b38.jpg",previewURL:"https://cdn.beatsaver.com/0c9598eefeed825dd9a6d9012d842d473ffb9b38.mp3"}],createdAt:"2020-08-23T10:11:49.857Z",updatedAt:"2020-08-23T10:11:49.857Z",lastPublishedAt:"2020-08-23T10:11:49.857Z"},{id:"b7b1",name:"No Rain - Blind Melon",description:"I still think of this song as recent, even though - wait for it - it's 28 years old this year. It's Blind Melon's 1992 hit, No Rain! I love the jazzy beat and dramatic moments in this song!\n\nNormal, Hard, Expert, ExpertPlus 360 and Expert 90 as well.\n\nBig thanks to my playtesters, MajorPickle, Maybeemae, and Brentastic! Couldn't do it without you guys - well, I could, just not as well!\n\n\nhttps://youtu.be/ZuLsxtvooCM",uploader:{id:78593,name:"techbutterfly",uniqueSet:!0,hash:"5cff0b7798cc5a672c8566f7",avatar:"https://cdn.beatsaver.com/avatar/527111497617506304.png",type:"DISCORD"},metadata:{bpm:149,duration:216,songName:"No Rain",songSubName:"",songAuthorName:"Blind Melon",levelAuthorName:"TechButterfly"},stats:{plays:0,downloads:3758,upvotes:624,downvotes:8,score:.9174},uploaded:"2020-06-29T19:22:10.964Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c222e31735f0c61b7781c8f41864b8033e054d40",key:"b7b1",state:"Published",createdAt:"2020-06-29T19:22:10.964Z",sageScore:3,diffs:[{njs:10,offset:-.5,notes:333,bombs:0,obstacles:32,nps:1.613,length:511,characteristic:"Standard",difficulty:"Normal",events:529,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.772,paritySummary:{errors:31,warns:41,resets:0}},{njs:13,offset:.3,notes:601,bombs:0,obstacles:32,nps:2.905,length:512,characteristic:"Standard",difficulty:"Hard",events:529,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:206.175,paritySummary:{errors:19,warns:34,resets:0}},{njs:14,offset:.2,notes:704,bombs:0,obstacles:32,nps:3.403,length:512,characteristic:"Standard",difficulty:"Expert",events:529,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:206.175,paritySummary:{errors:40,warns:37,resets:0}},{njs:13,offset:.3,notes:601,bombs:0,obstacles:30,nps:2.905,length:512.001,characteristic:"90Degree",difficulty:"Expert",events:689,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:206.175,paritySummary:{errors:19,warns:34,resets:0}},{njs:13,offset:.3,notes:704,bombs:0,obstacles:32,nps:3.403,length:512.001,characteristic:"360Degree",difficulty:"ExpertPlus",events:708,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:206.175,paritySummary:{errors:40,warns:37,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c222e31735f0c61b7781c8f41864b8033e054d40.zip",coverURL:"https://cdn.beatsaver.com/c222e31735f0c61b7781c8f41864b8033e054d40.jpg",previewURL:"https://cdn.beatsaver.com/c222e31735f0c61b7781c8f41864b8033e054d40.mp3"}],createdAt:"2020-06-29T19:22:10.964Z",updatedAt:"2020-06-29T19:22:10.964Z",lastPublishedAt:"2020-06-29T19:22:10.964Z"},{id:"3c10",name:"Sword Art Online Opening Compilation",description:'So what do you do when you\'ve mapped every single SAO opening? You make a compilation of them of course! I originally wanted to combine the full version of all the songs which would result in a 40+ minute map but since Beat Saver has a size limit I decided to combine the TV edit versions of them instead.\r\n\r\nSongs are ordered in released date:\r\n\r\n1. "crossing field" by LiSA\r\n2. "INNOCENCE" by Aoi Eir\r\n3. "IGNITE" by Eir Aoi\r\n4. "courage" by Haruka Tomatsu \r\n5. "Catch the Moment" by LiSA\r\n6. "Thrill, Risk, Heartless" by LiSA\r\n7. "Ryuusei" by Aoi EiR\r\n8. "ADAMAS" by LiSA\r\n9. "RESISTER" by ASCA\r\n\r\nWhile most of the patterns are recycled from my own maps, I did remap/resync some of the older ones so they are on the same quality as my newer maps.\r\n\r\nMostly expert level but has some streams and technical sections which combined with the song\'s length I decided to put this as expert plus just to be safe.',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:120,duration:841,songName:"Sword Art Online Opening Compilation",songSubName:"Various Artists",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:4936,upvotes:1986,downvotes:74,score:.9174},uploaded:"2019-03-06T11:49:32Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e7ff277fbad063337af1e18bb273b0eb6fc03557",key:"3c10",state:"Published",createdAt:"2019-03-06T11:49:32Z",sageScore:1,diffs:[{njs:15,offset:0,notes:3814,bombs:44,obstacles:37,nps:4.553,length:1675.338,characteristic:"Standard",difficulty:"ExpertPlus",events:3960,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:837.669,paritySummary:{errors:327,warns:301,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e7ff277fbad063337af1e18bb273b0eb6fc03557.zip",coverURL:"https://cdn.beatsaver.com/e7ff277fbad063337af1e18bb273b0eb6fc03557.jpg",previewURL:"https://cdn.beatsaver.com/e7ff277fbad063337af1e18bb273b0eb6fc03557.mp3"}],createdAt:"2019-03-06T11:49:32Z",updatedAt:"2019-03-06T11:49:32Z",lastPublishedAt:"2019-03-06T11:49:32Z"},{id:"34a5",name:"Check Yes, Juliet - We The Kings",description:"Run Baby Run! Check Yes, Juliet by We The Kings, song is brought from Itunes so it's the highest quality sound file you can get.",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:167,duration:217,songName:"Check Yes, Juliet",songSubName:"We The Kings",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:1453,upvotes:597,downvotes:7,score:.9174},uploaded:"2019-02-09T08:16:38Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a6fff4353d6c0657fb6a3de381dd48458c563dcf",key:"34a5",state:"Published",createdAt:"2019-02-09T08:16:38Z",sageScore:6,diffs:[{njs:15,offset:0,notes:905,bombs:0,obstacles:0,nps:4.443,length:566.959,characteristic:"Standard",difficulty:"Expert",events:3427,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:203.698,paritySummary:{errors:61,warns:71,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a6fff4353d6c0657fb6a3de381dd48458c563dcf.zip",coverURL:"https://cdn.beatsaver.com/a6fff4353d6c0657fb6a3de381dd48458c563dcf.jpg",previewURL:"https://cdn.beatsaver.com/a6fff4353d6c0657fb6a3de381dd48458c563dcf.mp3"}],createdAt:"2019-02-09T08:16:38Z",updatedAt:"2019-02-09T08:16:38Z",lastPublishedAt:"2019-02-09T08:16:38Z"},{id:"78e",name:"Numb - Linkin Park",description:"Expert - Hard - Normal Charts\nCustom Lighting\n\nhttps://twitter.com/TheDownyCat\nhttps://www.twitch.tv/downycat\nhttps://streamlabs.com/downycat/tip",uploader:{id:4285982,name:"downycat",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ede5",avatar:"https://cdn.beatsaver.com/avatar/173538829888782336.png",type:"DISCORD"},metadata:{bpm:110,duration:188,songName:"Numb",songSubName:"Linkin Park",songAuthorName:"DownyCat",levelAuthorName:"downycat"},stats:{plays:0,downloads:11541,upvotes:7092,downvotes:389,score:.9174},uploaded:"2018-07-02T13:44:43Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"2e6f858088c6d67e930e1bb357bd7455101b6626",key:"78e",state:"Published",createdAt:"2018-07-02T13:44:43Z",sageScore:6,diffs:[{njs:10,offset:0,notes:367,bombs:0,obstacles:39,nps:2.049,length:328.5,characteristic:"Standard",difficulty:"Normal",events:1134,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:179.182,paritySummary:{errors:45,warns:26,resets:0},stars:.93},{njs:10,offset:0,notes:653,bombs:0,obstacles:50,nps:3.602,length:332.499,characteristic:"Standard",difficulty:"Hard",events:1134,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.363,paritySummary:{errors:57,warns:43,resets:0},stars:1.86},{njs:10,offset:0,notes:899,bombs:0,obstacles:50,nps:4.958,length:332.5,characteristic:"Standard",difficulty:"Expert",events:1134,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.364,paritySummary:{errors:58,warns:58,resets:0},stars:2.59}],downloadURL:"https://cdn.beatsaver.com/2e6f858088c6d67e930e1bb357bd7455101b6626.zip",coverURL:"https://cdn.beatsaver.com/2e6f858088c6d67e930e1bb357bd7455101b6626.jpg",previewURL:"https://cdn.beatsaver.com/2e6f858088c6d67e930e1bb357bd7455101b6626.mp3"}],createdAt:"2018-07-02T13:44:43Z",updatedAt:"2018-07-02T13:44:43Z",lastPublishedAt:"2018-07-02T13:44:43Z"},{id:"13b20",name:"Pika Girl - S3RL",description:'did a slightly more "dancey" style of mapping with this one\n\nMap Preview: https://youtu.be/_lrXOS7a7Cs\n\nDifficulties: \nExpert+(6.53 NPS),\nExpert(4.5 NPS),\nHard(3.7 NPS). \n\nCustom lights, I used lolighter for the chorus, hand lit everything else. \n\nThanks to eZconfirmed and nuggie for playtesting! \n\nAny and all feedback appreciated:\nMeezoNugget#8186\n\nEnjoy! :)\n',uploader:{id:57121,name:"meezonugget",uniqueSet:!0,hash:"5e6b793f7abb0000068073d7",avatar:"https://cdn.beatsaver.com/avatar/146287428875976704.png",type:"DISCORD"},metadata:{bpm:175,duration:226,songName:"Pika Girl",songSubName:"",songAuthorName:"S3RL",levelAuthorName:"MeezoNugget"},stats:{plays:0,downloads:3445,upvotes:1105,downvotes:29,score:.9173},uploaded:"2021-02-07T00:20:32.184Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a30818f752cce3c87664570826bbf7b12b848a30",key:"13b20",state:"Published",createdAt:"2021-02-07T00:20:32.184Z",sageScore:4,diffs:[{njs:18,offset:.1,notes:837,bombs:0,obstacles:56,nps:3.817,length:639.5,characteristic:"Standard",difficulty:"Hard",events:5273,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.257,paritySummary:{errors:0,warns:0,resets:0}},{njs:20,offset:-.1,notes:1021,bombs:0,obstacles:54,nps:4.657,length:639.5,characteristic:"Standard",difficulty:"Expert",events:5273,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.257,paritySummary:{errors:0,warns:0,resets:0}},{njs:22,offset:-.3,notes:1482,bombs:7,obstacles:78,nps:6.759,length:639.5,characteristic:"Standard",difficulty:"ExpertPlus",events:5273,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.257,paritySummary:{errors:0,warns:0,resets:2}}],downloadURL:"https://cdn.beatsaver.com/a30818f752cce3c87664570826bbf7b12b848a30.zip",coverURL:"https://cdn.beatsaver.com/a30818f752cce3c87664570826bbf7b12b848a30.jpg",previewURL:"https://cdn.beatsaver.com/a30818f752cce3c87664570826bbf7b12b848a30.mp3"}],createdAt:"2021-02-07T00:20:32.184Z",updatedAt:"2021-02-07T00:20:32.184Z",lastPublishedAt:"2021-02-07T00:20:32.184Z"},{id:"7288",name:"Megalovania - Camellia Remix (Kole Edit) [One saber]",description:"I don’t know much about Undertale nor Camellia, but when making this shorter edit of Camellia’s remix of Megalovania by Toby Fox I felt like mapping it, and as with any popular song I’m gonna make it in One Saber instead since there can never be enough One Saber. I also asked Skeelie if he wanted to make some fancy lighting, just like he did for Overkill, and he did! So here it is, Megalovania Remix by Camellia, as One Saber!\n\nChromaLite mod recommended for best lighting effects.\n\nNo map preview video. (Yet?)\n\nLighting (by Skeelie) preview:\nhttps://youtu.be/6b88SRuQaSQ\n\nBPM: 259\nDuration: 4:27\nEasy, Normal, Hard, Expert and Expert+ difficulties:\n\nEasy:\nNPS 1.32, 356 notes, 26 walls, 0 bombs\n\nNormal:\nNPS 1.66, 446 notes, 29 walls, 17 bombs\n\nHard:\nNPS 2.12, 568 notes, 30 walls, 53 bombs\n\nExpert:\nNPS 3.34, 895 notes, 25 walls, 51 bombs\n\nExpert+:\nNPS 4.65, 1247 notes, 20 walls, 48 bombs\n\nThanks to Redmagi and Skeelie for playtesting!\n\nEnjoy!",uploader:{id:4285318,name:"kolezan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fcbb",avatar:"https://cdn.beatsaver.com/avatar/220513618763055106.png",type:"DISCORD"},metadata:{bpm:242,duration:267,songName:"Megalovania",songSubName:"Remix (Kole Edit)",songAuthorName:"Camellia",levelAuthorName:"Kolezan (Lighting by Skeelie)"},stats:{plays:0,downloads:6279,upvotes:1738,downvotes:61,score:.9173},uploaded:"2019-11-29T07:42:50.058Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ac6eb8bb6ce09461d164dcfe2ae24606bbdfa967",key:"7288",state:"Published",createdAt:"2019-11-29T07:42:50.058Z",sageScore:6,diffs:[{njs:11,offset:1,notes:356,bombs:0,obstacles:26,nps:1.392,length:1031.5,characteristic:"OneSaber",difficulty:"Easy",events:34390,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:255.744,paritySummary:{errors:37,warns:45,resets:0}},{njs:13,offset:1,notes:446,bombs:17,obstacles:29,nps:1.744,length:1031.5,characteristic:"OneSaber",difficulty:"Normal",events:34390,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:255.744,paritySummary:{errors:42,warns:49,resets:0}},{njs:15,offset:.7,notes:568,bombs:53,obstacles:30,nps:2.221,length:1031.5,characteristic:"OneSaber",difficulty:"Hard",events:34390,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:255.744,paritySummary:{errors:34,warns:75,resets:10}},{njs:18,offset:0,notes:895,bombs:51,obstacles:25,nps:3.5,length:1031.5,characteristic:"OneSaber",difficulty:"Expert",events:34390,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:255.744,paritySummary:{errors:28,warns:84,resets:3}},{njs:20,offset:1.2,notes:1247,bombs:48,obstacles:20,nps:4.857,length:1035.5,characteristic:"OneSaber",difficulty:"ExpertPlus",events:34390,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:256.736,paritySummary:{errors:27,warns:61,resets:5}},{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:34390,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ac6eb8bb6ce09461d164dcfe2ae24606bbdfa967.zip",coverURL:"https://cdn.beatsaver.com/ac6eb8bb6ce09461d164dcfe2ae24606bbdfa967.jpg",previewURL:"https://cdn.beatsaver.com/ac6eb8bb6ce09461d164dcfe2ae24606bbdfa967.mp3"}],createdAt:"2019-11-29T07:42:50.058Z",updatedAt:"2019-11-29T07:42:50.058Z",lastPublishedAt:"2019-11-29T07:42:50.058Z"},{id:"709",name:"Weak - AJR",description:"Expert only but not really that hard. My third beat map.",uploader:{id:51936,name:"ryuk845",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f1fe",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f1fe?d=retro",type:"SIMPLE"},metadata:{bpm:124,duration:205,songName:"Weak - AJR",songSubName:"",songAuthorName:"Arcanthia",levelAuthorName:"ryuk845"},stats:{plays:0,downloads:4258,upvotes:1997,downvotes:75,score:.9173},uploaded:"2018-06-29T00:27:10Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e4e6311258b1caae45341d87470d0c0145ce3910",key:"709",state:"Published",createdAt:"2018-06-29T00:27:10Z",sageScore:4,diffs:[{njs:10,offset:0,notes:540,bombs:0,obstacles:5,nps:2.742,length:407,characteristic:"Standard",difficulty:"Expert",events:471,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:196.935,paritySummary:{errors:101,warns:65,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e4e6311258b1caae45341d87470d0c0145ce3910.zip",coverURL:"https://cdn.beatsaver.com/e4e6311258b1caae45341d87470d0c0145ce3910.jpg",previewURL:"https://cdn.beatsaver.com/e4e6311258b1caae45341d87470d0c0145ce3910.mp3"}],createdAt:"2018-06-29T00:27:10Z",updatedAt:"2018-06-29T00:27:10Z",lastPublishedAt:"2018-06-29T00:27:10Z"},{id:"8266",name:"Domino's Pizza Fresh Hack",description:"I dont know why I made this lol\n\nVideo links:\nhttps://www.youtube.com/watch?v=2-ifY2LPX_0&feature=youtu.be\nhttps://twitter.com/Dont_Shoot_MEE/status/1222536916601577472",uploader:{id:26973,name:"dontshootme",uniqueSet:!0,hash:"5dc4d17566e48d0006f882fc",avatar:"https://www.gravatar.com/avatar/5dc4d17566e48d0006f882fc?d=retro",type:"SIMPLE"},metadata:{bpm:107,duration:112,songName:"Domino's Pizza Fresh Hack",songSubName:"",songAuthorName:"Danny Fresh",levelAuthorName:"Dont-Shoot-ME"},stats:{plays:0,downloads:815,upvotes:882,downvotes:19,score:.9172},uploaded:"2020-01-29T15:07:20.809Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"cb3069aeef3d13478f2ee5321a18e35e673c9691",key:"8266",state:"Published",createdAt:"2020-01-29T15:07:20.809Z",sageScore:1,diffs:[{njs:20,offset:0,notes:759,bombs:72,obstacles:4,nps:6.896,length:196.281,characteristic:"Standard",difficulty:"ExpertPlus",events:1569,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:110.064,paritySummary:{errors:4,warns:0,resets:5}}],downloadURL:"https://cdn.beatsaver.com/cb3069aeef3d13478f2ee5321a18e35e673c9691.zip",coverURL:"https://cdn.beatsaver.com/cb3069aeef3d13478f2ee5321a18e35e673c9691.jpg",previewURL:"https://cdn.beatsaver.com/cb3069aeef3d13478f2ee5321a18e35e673c9691.mp3"}],createdAt:"2020-01-29T15:07:20.809Z",updatedAt:"2020-01-29T15:07:20.809Z",lastPublishedAt:"2020-01-29T15:07:20.809Z"},{id:"653f",name:"Wolf In Sheep's Clothing [Nightcore] - Set It Off",description:"I actually like this song better in Nightcore. Plus it's quite a popular nightcore song on youtube with over 16 million views https://www.youtube.com/watch?v=Jvl2e6X6PA4",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:192.059,duration:163,songName:"Wolf In Sheep's Clothing (Nightcore)",songSubName:"",songAuthorName:"Set It Off",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:1291,upvotes:884,downvotes:19,score:.9172},uploaded:"2019-09-22T18:58:41.682Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"410712794d58df7bc6249fed7fef50cf5e4391d6",key:"653f",state:"Published",createdAt:"2019-09-22T18:58:41.682Z",sageScore:5,diffs:[{njs:19,offset:0,notes:710,bombs:12,obstacles:2,nps:4.474,length:508,characteristic:"Standard",difficulty:"ExpertPlus",events:2207,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:158.701,paritySummary:{errors:45,warns:50,resets:0}}],downloadURL:"https://cdn.beatsaver.com/410712794d58df7bc6249fed7fef50cf5e4391d6.zip",coverURL:"https://cdn.beatsaver.com/410712794d58df7bc6249fed7fef50cf5e4391d6.jpg",previewURL:"https://cdn.beatsaver.com/410712794d58df7bc6249fed7fef50cf5e4391d6.mp3"}],createdAt:"2019-09-22T18:58:41.682Z",updatedAt:"2019-09-22T18:58:41.682Z",lastPublishedAt:"2019-09-22T18:58:41.682Z"},{id:"6078",name:"Youngblood - 5 Seconds of Summer",description:"Just an Expert level.",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:120,duration:204,songName:"Youngblood",songSubName:"",songAuthorName:"5 Seconds of Summer",levelAuthorName:"BennyDabeast"},stats:{plays:0,downloads:2815,upvotes:991,downvotes:24,score:.9171},uploaded:"2019-08-31T21:49:30.872Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"182e88e0e80450dd02bdcd6ac4924e3cc00d8673",key:"6078",state:"Published",createdAt:"2019-08-31T21:49:30.872Z",sageScore:4,diffs:[{njs:12,offset:1,notes:609,bombs:8,obstacles:41,nps:3.045,length:400,characteristic:"Standard",difficulty:"Hard",events:726,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200,paritySummary:{errors:86,warns:74,resets:3}},{njs:12,offset:0,notes:614,bombs:8,obstacles:41,nps:3.07,length:400,characteristic:"Standard",difficulty:"Expert",events:726,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200,paritySummary:{errors:91,warns:74,resets:3}}],downloadURL:"https://cdn.beatsaver.com/182e88e0e80450dd02bdcd6ac4924e3cc00d8673.zip",coverURL:"https://cdn.beatsaver.com/182e88e0e80450dd02bdcd6ac4924e3cc00d8673.jpg",previewURL:"https://cdn.beatsaver.com/182e88e0e80450dd02bdcd6ac4924e3cc00d8673.mp3"}],createdAt:"2019-08-31T21:49:30.872Z",updatedAt:"2019-08-31T21:49:30.872Z",lastPublishedAt:"2019-08-31T21:49:30.872Z"},{id:"318f",name:"Awaken [League of Legends Season 2019 Soundtrack] - Valerie Broussard",description:"Made 4 versions of this map each with a different time signature but I think have I found the one I'm happy with. Awaken featuring Valerie Broussard, the soundtrack for League of Legends' 2019 Season Cinematic. Difficulty is a really easy expert but complex enough to not be put in hard. I brought the song off iTunes so it's the highest quality file you can get ;)",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:160,duration:194,songName:"Awaken",songSubName:"Valerie Broussard",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:1940,upvotes:1731,downvotes:61,score:.9171},uploaded:"2019-01-27T08:19:46Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f2481180576b33bdc23e4f4f1a26eaf4e0e09aec",key:"318f",state:"Published",createdAt:"2019-01-27T08:19:46Z",sageScore:5,diffs:[{njs:15,offset:0,notes:519,bombs:30,obstacles:2,nps:2.836,length:488.09,characteristic:"Standard",difficulty:"Expert",events:872,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.034,paritySummary:{errors:40,warns:38,resets:2}}],downloadURL:"https://cdn.beatsaver.com/f2481180576b33bdc23e4f4f1a26eaf4e0e09aec.zip",coverURL:"https://cdn.beatsaver.com/f2481180576b33bdc23e4f4f1a26eaf4e0e09aec.jpg",previewURL:"https://cdn.beatsaver.com/f2481180576b33bdc23e4f4f1a26eaf4e0e09aec.mp3"}],createdAt:"2019-01-27T08:19:46Z",updatedAt:"2019-01-27T08:19:46Z",lastPublishedAt:"2019-01-27T08:19:46Z"},{id:"248e",name:"Dance, Dance - Fall Out Boy",description:"114.5 BPM / 3:01 Runtime\r\nEasy / 233 Notes\r\nNormal / 370 Notes\r\nHard / 495 Notes\r\nExpert / 726 Notes\r\n\r\nGameplay:\r\nhttps://youtu.be/fyj_fjaGpd8\r\nSong:\r\nhttps://www.youtube.com/watch?v=C6MOKXm8x50",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:114,duration:182,songName:"Dance, Dance",songSubName:"Fall Out Boy",songAuthorName:"Skyler Wallace",levelAuthorName:"skylerwallace"},stats:{plays:0,downloads:5632,upvotes:2351,downvotes:95,score:.9171},uploaded:"2018-12-08T06:20:28Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"142d2cc083037d25dce744ef747eb3eb0f30ab72",key:"248e",state:"Published",createdAt:"2018-12-08T06:20:28Z",sageScore:5,diffs:[{njs:10,offset:0,notes:233,bombs:2,obstacles:15,nps:1.312,length:339,characteristic:"Standard",difficulty:"Easy",events:0,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.421,paritySummary:{errors:49,warns:18,resets:2}},{njs:10,offset:0,notes:370,bombs:8,obstacles:19,nps:2.083,length:339,characteristic:"Standard",difficulty:"Normal",events:3172,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.421,paritySummary:{errors:58,warns:16,resets:0}},{njs:10,offset:0,notes:495,bombs:0,obstacles:8,nps:2.787,length:339,characteristic:"Standard",difficulty:"Hard",events:3172,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.421,paritySummary:{errors:57,warns:32,resets:0}},{njs:12,offset:0,notes:726,bombs:34,obstacles:0,nps:4.087,length:339,characteristic:"Standard",difficulty:"Expert",events:3180,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.421,paritySummary:{errors:40,warns:27,resets:4}}],downloadURL:"https://cdn.beatsaver.com/142d2cc083037d25dce744ef747eb3eb0f30ab72.zip",coverURL:"https://cdn.beatsaver.com/142d2cc083037d25dce744ef747eb3eb0f30ab72.jpg",previewURL:"https://cdn.beatsaver.com/142d2cc083037d25dce744ef747eb3eb0f30ab72.mp3"}],createdAt:"2018-12-08T06:20:28Z",updatedAt:"2018-12-08T06:20:28Z",lastPublishedAt:"2018-12-08T06:20:28Z"},{id:"177e8",name:"{Modchart} Duumu & Slyleaf - Illuminate",description:"## IMPORTANT: This map will most likely be broken if you just hop into it. Please take the time to configure your game properly if you want to see it how it was intended. I know, it's super annoying, but there's nothing I can do about it. There's no better system. Basically if the intro to the map is white for like more than a second, you see the BTS logo, or if your walls look +'s than it's broken.\n\n!! WARNINGS !!\n- Use the newest versions of Chroma and NE (Available on ModAssistant), they'll allow for you to actually use the new environment enhancements. New NE will also SIGNIFICANTLY increase performance. I have not tested if this is playable on previous versions of NE.\n- Use all effects on lights. Remember this is expert not E+ so you need to adjust the \"Environment Effects\" setting. This map is by no means intense, but no flickering wasn't built for chroma and will break the lighting.\n- Turn off shockwave, as there's a bug where it cuts off distortion effects on walls that are under you\n- Turn on bloom, Beat Saber tries to make baked lighting on walls and they break on Noodle walls. You can ignore this if you have the mod that fixes this, although I don't know how the look will change.\n- Please disable NJSFixer, as this completely breaks the walls :(\n\nI've spent equal, if not, MORE time on this than Homesick. This map utilizes the new Chroma environment enhancements. I really went all out with it. I think this map is really unique and there are few, if not NO other maps so far that offer the experience this map gives right now. \n\nThis song means a lot to me. I've had this song added since summer 2019, it came up in my recommended and I fell in love with it. It's such an incredible vibe and it makes me feel super comfy. Duumu or Slyleaf, if you're reading this, you're incredible. I am yet to find any other song that makes me feel like this. I really hope you enjoy seeing what I imagine when listening to it.\n\nEnjoy.\n\nVideo: https://youtu.be/lFL3Gjy15oc",uploader:{id:4284246,name:"swifter1243",uniqueSet:!0,hash:"5dcf3af29eccad0006a0b45f",avatar:"https://cdn.beatsaver.com/avatar/166644275793100801.png",type:"DISCORD"},metadata:{bpm:100,duration:240,songName:"Illuminate",songSubName:"",songAuthorName:"Duumu, Slyleaf",levelAuthorName:"Swifter1243"},stats:{plays:0,downloads:1794,upvotes:900,downvotes:20,score:.917},uploaded:"2021-05-03T15:44:55.957Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f5f56ebdee279caae376daf1a6a703576aa08bcd",key:"177e8",state:"Published",createdAt:"2021-05-03T15:44:55.957Z",sageScore:3,diffs:[{njs:18,offset:-.4,notes:581,bombs:8,obstacles:0,nps:2.591,length:373.75,characteristic:"Standard",difficulty:"Hard",events:1367,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:224.25,paritySummary:{errors:0,warns:0,resets:3}},{njs:16,offset:1,notes:581,bombs:8,obstacles:8102,nps:2.591,length:373.75,characteristic:"Standard",difficulty:"Expert",events:2183,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:224.25,paritySummary:{errors:0,warns:0,resets:3}}],downloadURL:"https://cdn.beatsaver.com/f5f56ebdee279caae376daf1a6a703576aa08bcd.zip",coverURL:"https://cdn.beatsaver.com/f5f56ebdee279caae376daf1a6a703576aa08bcd.jpg",previewURL:"https://cdn.beatsaver.com/f5f56ebdee279caae376daf1a6a703576aa08bcd.mp3"}],createdAt:"2021-05-03T15:44:55.957Z",updatedAt:"2021-05-03T15:44:55.957Z",lastPublishedAt:"2021-05-03T15:44:55.957Z"},{id:"907f",name:"Alan Walker - Faded",description:"This will likely be my final map.\n\nThanks to the people who played my maps and thanks to the mapping community for the support.\n\nadieu.",uploader:{id:31355,name:"wonderfulsnowball",uniqueSet:!0,hash:"5d5be38aa959f6000650d725",avatar:"https://www.gravatar.com/avatar/5d5be38aa959f6000650d725?d=retro",type:"SIMPLE"},metadata:{bpm:90,duration:113,songName:"Faded",songSubName:"(Short Ver.)",songAuthorName:"Alan Walker",levelAuthorName:"WonderfulSnowball"},stats:{plays:0,downloads:6805,upvotes:2077,downvotes:80,score:.917},uploaded:"2020-03-15T23:33:05.468Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"72808dcf1d5e2f3b4d08ba98cec32d39d696ba91",key:"907f",state:"Published",createdAt:"2020-03-15T23:33:05.468Z",sageScore:7,diffs:[{njs:12,offset:0,notes:139,bombs:0,obstacles:0,nps:1.313,length:158.75,characteristic:"Standard",difficulty:"Easy",events:3151,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:105.833,paritySummary:{errors:2,warns:2,resets:0}},{njs:12,offset:-.25,notes:212,bombs:0,obstacles:0,nps:2.003,length:158.75,characteristic:"Standard",difficulty:"Normal",events:3151,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:105.833,paritySummary:{errors:2,warns:0,resets:0}},{njs:13,offset:-.5,notes:281,bombs:0,obstacles:2,nps:2.655,length:158.75,characteristic:"Standard",difficulty:"Hard",events:3151,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:105.833,paritySummary:{errors:0,warns:0,resets:0}},{njs:15,offset:.25,notes:347,bombs:0,obstacles:2,nps:3.279,length:158.75,characteristic:"Standard",difficulty:"Expert",events:3151,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:105.833,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:.25,notes:367,bombs:0,obstacles:3,nps:3.468,length:158.75,characteristic:"Standard",difficulty:"ExpertPlus",events:3151,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:105.833,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/72808dcf1d5e2f3b4d08ba98cec32d39d696ba91.zip",coverURL:"https://cdn.beatsaver.com/72808dcf1d5e2f3b4d08ba98cec32d39d696ba91.jpg",previewURL:"https://cdn.beatsaver.com/72808dcf1d5e2f3b4d08ba98cec32d39d696ba91.mp3"}],createdAt:"2020-03-15T23:33:05.468Z",updatedAt:"2020-03-15T23:33:05.468Z",lastPublishedAt:"2020-03-15T23:33:05.468Z"},{id:"6666",name:"Mick Gordon - Cyberdemon",description:"Rip and tear\r\n\r\nVideo: https://www.youtube.com/watch?v=pcqmDzUobEc",uploader:{id:4235138,name:"CyanSnow",uniqueSet:!0,hash:"5cff0b7698cc5a672c8543ac",avatar:"https://cdn.beatsaver.com/avatar/154341137694326784.png",type:"DISCORD"},metadata:{bpm:179.921,duration:224,songName:"Cyberdemon",songSubName:"",songAuthorName:"Mick Gordon",levelAuthorName:"CyanSnow"},stats:{plays:0,downloads:5676,upvotes:3668,downvotes:173,score:.917},uploaded:"2019-09-28T15:49:27.681Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"aaaa68fdb4e7ddb5634ee3afd80cb0b5dda2260c",key:"6666",state:"Published",createdAt:"2019-09-28T15:49:27.681Z",sageScore:6,diffs:[{njs:19,offset:.5,notes:1494,bombs:666,obstacles:3666,nps:6.829,length:656,characteristic:"Lawless",difficulty:"ExpertPlus",events:33666,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:218.763,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/aaaa68fdb4e7ddb5634ee3afd80cb0b5dda2260c.zip",coverURL:"https://cdn.beatsaver.com/aaaa68fdb4e7ddb5634ee3afd80cb0b5dda2260c.jpg",previewURL:"https://cdn.beatsaver.com/aaaa68fdb4e7ddb5634ee3afd80cb0b5dda2260c.mp3"}],createdAt:"2019-09-28T15:49:27.681Z",updatedAt:"2019-09-28T15:49:27.681Z",lastPublishedAt:"2019-09-28T15:49:27.681Z"},{id:"fb0f",name:"Michael Jackson - Thriller (James Egbert Dubstep Remix)",description:"Yet another great and dancy Dubstep mix of an MJ song.\nYou can follow me on twitch for more awesomeness at https://www.twitch.tv/pkdan\nVideo preview of the map: https://www.youtube.com/watch?v=ZuHcfSSPtig\n\nLength: 3:15\nNotes: 668 (Expert) / 991 (Expert+)\nNJS: 16 (Expert) / 20 (Expert+)\nBPM: 128",uploader:{id:4284639,name:"pkdan",uniqueSet:!0,hash:"5e6d07927abb00000681e8ee",avatar:"https://cdn.beatsaver.com/avatar/315553265091739650.png",type:"DISCORD"},metadata:{bpm:128,duration:195,songName:"Thriller (James Egbert Dubstep Remix)",songSubName:"",songAuthorName:"Michael Jackson",levelAuthorName:"pkdan"},stats:{plays:0,downloads:6967,upvotes:850,downvotes:18,score:.9168},uploaded:"2020-10-07T15:04:12.225Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5d5df852651bb568012635ff3a356efdd9372b80",key:"fb0f",state:"Published",createdAt:"2020-10-07T15:04:12.225Z",sageScore:4,diffs:[{njs:16,offset:-.2,notes:668,bombs:33,obstacles:8,nps:3.591,length:396.875,characteristic:"Standard",difficulty:"Expert",events:2296,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:186.035,paritySummary:{errors:0,warns:0,resets:0}},{njs:20,offset:.3,notes:991,bombs:33,obstacles:8,nps:5.327,length:396.875,characteristic:"Standard",difficulty:"ExpertPlus",events:2296,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:186.035,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/5d5df852651bb568012635ff3a356efdd9372b80.zip",coverURL:"https://cdn.beatsaver.com/5d5df852651bb568012635ff3a356efdd9372b80.jpg",previewURL:"https://cdn.beatsaver.com/5d5df852651bb568012635ff3a356efdd9372b80.mp3"}],createdAt:"2020-10-07T15:04:12.225Z",updatedAt:"2020-10-07T15:04:12.225Z",lastPublishedAt:"2020-10-07T15:04:12.225Z"},{id:"ed2a",name:"NULCTRL (Meiso FLIP)",description:"POTENTIAL SEIZURE WARNING\n\nANTI-QUEST REUPLOAD\n\nIT IS HIGHLY RECCOMENDED TO PLAY WITH THE FOLLOWING ADVANCED GRAPHICS SETTINGS SET AS SUCH\n-BLOOM ON\n-DISTORTION ON\n-0 MAX SHOCKWAVE PARTICLES\n\nVideo: https://youtu.be/xGICwOKNa9Y\n\nSpecial thanks to https://i.imgur.com/VbKV9AX.jpg for feedback to make sure things weɹe actually good.\n\n",uploader:{id:4235136,name:"reaxt",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8ab",avatar:"https://cdn.beatsaver.com/avatar/163052863038291970.png",type:"DISCORD"},metadata:{bpm:200,duration:215,songName:"NULCTRL MEISO FLIP",songSubName:"",songAuthorName:"Meiso",levelAuthorName:"Reaxt"},stats:{plays:0,downloads:1769,upvotes:1941,downvotes:73,score:.9168},uploaded:"2020-09-17T21:26:11.811Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"89b1de26baad93c63a6bdb3d9dbae7dc4972897b",key:"ed2a",state:"Published",createdAt:"2020-09-17T21:26:11.811Z",sageScore:3,diffs:[{njs:19,offset:.37,notes:2984,bombs:0,obstacles:1570,nps:14.22,length:699.5,characteristic:"Lawless",difficulty:"ExpertPlus",events:3557,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:209.85,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/89b1de26baad93c63a6bdb3d9dbae7dc4972897b.zip",coverURL:"https://cdn.beatsaver.com/89b1de26baad93c63a6bdb3d9dbae7dc4972897b.jpg",previewURL:"https://cdn.beatsaver.com/89b1de26baad93c63a6bdb3d9dbae7dc4972897b.mp3"}],createdAt:"2020-09-17T21:26:11.811Z",updatedAt:"2020-09-17T21:26:11.811Z",lastPublishedAt:"2020-09-17T21:26:11.811Z"},{id:"658e",name:"Take Back the Night - CaptainSparklez ft. TryHardNinja",description:"Take Back the Night, Written and Performed by TryHardNinja, Original Animation Produced and Directed by CaptainSparklez.\n\nCheck out the gameplay video here! https://www.youtube.com/watch?v=47Fnh08AEy4",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:126,duration:317,songName:"Take Back the Night",songSubName:"",songAuthorName:"CaptainSparklez ft. TryHardNinja",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:1693,upvotes:611,downvotes:8,score:.9168},uploaded:"2019-09-24T02:56:43.768Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0361c056cd4247d639eda648bf21e4eae4454f3e",key:"658e",state:"Published",createdAt:"2019-09-24T02:56:43.768Z",sageScore:6,diffs:[{njs:12,offset:0,notes:652,bombs:0,obstacles:62,nps:2.126,length:644,characteristic:"Standard",difficulty:"Hard",events:4659,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:306.667,paritySummary:{errors:56,warns:49,resets:0}},{njs:14,offset:0,notes:923,bombs:0,obstacles:85,nps:3.01,length:644,characteristic:"Standard",difficulty:"Expert",events:4659,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:306.667,paritySummary:{errors:52,warns:29,resets:0}},{njs:16,offset:0,notes:1051,bombs:0,obstacles:87,nps:3.427,length:644,characteristic:"Standard",difficulty:"ExpertPlus",events:4669,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:306.667,paritySummary:{errors:45,warns:43,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0361c056cd4247d639eda648bf21e4eae4454f3e.zip",coverURL:"https://cdn.beatsaver.com/0361c056cd4247d639eda648bf21e4eae4454f3e.jpg",previewURL:"https://cdn.beatsaver.com/0361c056cd4247d639eda648bf21e4eae4454f3e.mp3"}],createdAt:"2019-09-24T02:56:43.768Z",updatedAt:"2019-09-24T02:56:43.768Z",lastPublishedAt:"2019-09-24T02:56:43.768Z"},{id:"64c9",name:"You Don't Want Me (Crystal Skies Remix)",description:"My first wall map! On top of having walls, it also has Chroma lights!\n\nYou have a few options for playing, you can view the lightshow with or without walls, and you can play the map with or without walls. \n\nHere's a video of the walls and the lights :D https://www.youtube.com/watch?v=DkRDF8bbNjQ\n\nI did the whole map myself, but of course, I had some help from the lovely people on the BSMG. Thanks Kival Evan, Dni0, JENNAexe, Aeroluna and necrospook_ for the testplays! And also, another thanks to Aeroluna for helping me fix any bugs with the metadata for my map :)\n\nPS.: Beatcore, one of the song's artists, also released a new EP today that is really good! He's super unknown so go check it out on YouTube and Spotify if you get a chance. He's really talented :D\n\nYou Don't Want Me (Crystal Skies Remix) - Beatcore, Ashley Apollodor | 130 BPM | Expert+ Only (With and without walls) along with Lightshow and Lightshow/Wallshow | Fully mapped with custom lights and walls\n\n<3\n\n",uploader:{id:17131,name:"tranquillizeme",uniqueSet:!0,hash:"5cff0b7798cc5a672c85609e",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c85609e?d=retro",type:"SIMPLE"},metadata:{bpm:130,duration:233,songName:"You Don't Want Me",songSubName:"Crystal Skies Remix",songAuthorName:"Beatcore, Ashley Apollodor, Crystal Skies",levelAuthorName:"TranquillizeMe"},stats:{plays:0,downloads:1743,upvotes:851,downvotes:18,score:.9168},uploaded:"2019-09-20T22:30:43.842Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"fbf6f4775ff824facf83ad4a27f48d220466f21e",key:"64c9",state:"Published",createdAt:"2019-09-20T22:30:43.842Z",sageScore:8,diffs:[{njs:18,offset:0,notes:782,bombs:22,obstacles:0,nps:3.597,length:471,characteristic:"Standard",difficulty:"Expert",events:16275,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:217.385,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:0,notes:782,bombs:22,obstacles:5003,nps:3.597,length:471,characteristic:"Standard",difficulty:"ExpertPlus",events:16275,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:217.385,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:16275,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:0,notes:0,bombs:0,obstacles:5003,nps:0,length:0,characteristic:"Lightshow",difficulty:"Normal",events:16275,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/fbf6f4775ff824facf83ad4a27f48d220466f21e.zip",coverURL:"https://cdn.beatsaver.com/fbf6f4775ff824facf83ad4a27f48d220466f21e.jpg",previewURL:"https://cdn.beatsaver.com/fbf6f4775ff824facf83ad4a27f48d220466f21e.mp3"}],createdAt:"2019-09-20T22:30:43.842Z",updatedAt:"2019-09-20T22:30:43.842Z",lastPublishedAt:"2019-09-20T22:30:43.842Z"},{id:"431c",name:"Shine (RWBY: Volume 2 Soundtrack) - Jeff Williams ft. Casey Lee Williams",description:'"Shine" is a single that was featured prominently in the episode: "Dance Dance Infiltration", where Team JNPR performed a synchronized dance routine to the song.',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:122,duration:260,songName:"Shine",songSubName:"Jeff Williams ft. Casey Lee Williams",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:2411,upvotes:661,downvotes:10,score:.9168},uploaded:"2019-04-03T08:52:47Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f95bfca25401b117bd9bec202c741bd75f44141b",key:"431c",state:"Published",createdAt:"2019-04-03T08:52:47Z",sageScore:6,diffs:[{njs:14,offset:0,notes:969,bombs:0,obstacles:7,nps:3.818,length:516,characteristic:"Standard",difficulty:"Expert",events:1070,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:253.77,paritySummary:{errors:28,warns:33,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f95bfca25401b117bd9bec202c741bd75f44141b.zip",coverURL:"https://cdn.beatsaver.com/f95bfca25401b117bd9bec202c741bd75f44141b.jpg",previewURL:"https://cdn.beatsaver.com/f95bfca25401b117bd9bec202c741bd75f44141b.mp3"}],createdAt:"2019-04-03T08:52:47Z",updatedAt:"2019-04-03T08:52:47Z",lastPublishedAt:"2019-04-03T08:52:47Z"},{id:"3436",name:"Christopher Tin - Baba Yetu",description:"This song was recommended to me. Baba Yetu is theme song Civilization IV.",uploader:{id:4285018,name:"majorpickle",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f792",avatar:"https://cdn.beatsaver.com/avatar/450358937657671680.png",type:"DISCORD"},metadata:{bpm:92,duration:210,songName:"Baba Yetu",songSubName:"Christopher Tin",songAuthorName:"Majorpickle",levelAuthorName:"majorpickle"},stats:{plays:0,downloads:2763,upvotes:1090,downvotes:29,score:.9168},uploaded:"2019-02-07T03:44:18Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"60c7f5c08d38ad3664ad42874b874675a03da14a",key:"3436",state:"Published",createdAt:"2019-02-07T03:44:18Z",sageScore:4,diffs:[{njs:10,offset:0,notes:681,bombs:0,obstacles:86,nps:3.638,length:287,characteristic:"Standard",difficulty:"Expert",events:535,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:187.174,paritySummary:{errors:33,warns:19,resets:0}}],downloadURL:"https://cdn.beatsaver.com/60c7f5c08d38ad3664ad42874b874675a03da14a.zip",coverURL:"https://cdn.beatsaver.com/60c7f5c08d38ad3664ad42874b874675a03da14a.jpg",previewURL:"https://cdn.beatsaver.com/60c7f5c08d38ad3664ad42874b874675a03da14a.mp3"}],createdAt:"2019-02-07T03:44:18Z",updatedAt:"2019-02-07T03:44:18Z",lastPublishedAt:"2019-02-07T03:44:18Z"},{id:"2c5d",name:"Stay Frosty Royal Milk Tea - Fall Out Boy",description:"Expert Playthrough : https://youtu.be/mzmD9PYtW3I",uploader:{id:13320,name:"novashaft",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ee55",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee55?d=retro",type:"SIMPLE"},metadata:{bpm:146,duration:174,songName:"Stay Frosty Royal Milk Tea",songSubName:"Fall Out Boy",songAuthorName:"NovaShaft",levelAuthorName:"novashaft"},stats:{plays:0,downloads:1134,upvotes:447,downvotes:2,score:.9168},uploaded:"2019-01-09T20:30:52Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c5b540769ac513b9ebf2f59f465823a9b73f6032",key:"2c5d",state:"Published",createdAt:"2019-01-09T20:30:52Z",sageScore:5,diffs:[{njs:10,offset:0,notes:296,bombs:6,obstacles:13,nps:1.801,length:400,characteristic:"Standard",difficulty:"Normal",events:855,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:164.384,paritySummary:{errors:38,warns:22,resets:0}},{njs:11,offset:0,notes:401,bombs:6,obstacles:13,nps:2.439,length:400,characteristic:"Standard",difficulty:"Hard",events:855,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:164.384,paritySummary:{errors:43,warns:31,resets:0}},{njs:13,offset:0,notes:512,bombs:8,obstacles:13,nps:3.115,length:400,characteristic:"Standard",difficulty:"Expert",events:855,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:164.384,paritySummary:{errors:46,warns:75,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c5b540769ac513b9ebf2f59f465823a9b73f6032.zip",coverURL:"https://cdn.beatsaver.com/c5b540769ac513b9ebf2f59f465823a9b73f6032.jpg",previewURL:"https://cdn.beatsaver.com/c5b540769ac513b9ebf2f59f465823a9b73f6032.mp3"}],createdAt:"2019-01-09T20:30:52Z",updatedAt:"2019-01-09T20:30:52Z",lastPublishedAt:"2019-01-09T20:30:52Z"},{id:"446",name:"Simple and Clean - PLANITb Remix - Kingdom Hearts",description:"Normal / Hard / Expert\r\nLight show\r\n\r\nhttps://youtu.be/rYrIFjxeY0k",uploader:{id:52578,name:"xroninbladex",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea58",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ea58?d=retro",type:"SIMPLE"},metadata:{bpm:130,duration:131,songName:"Simple and Clean",songSubName:"-PLANITb Remix-",songAuthorName:"xroninbladex",levelAuthorName:"xroninbladex"},stats:{plays:0,downloads:2370,upvotes:1567,downvotes:53,score:.9168},uploaded:"2018-06-08T14:55:59Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8390e3f33ef12a395602c4ae12df9250a730a629",key:"446",state:"Published",createdAt:"2018-06-08T14:55:59Z",sageScore:5,diffs:[{njs:10,offset:0,notes:198,bombs:2,obstacles:1,nps:1.89,length:227,characteristic:"Standard",difficulty:"Normal",events:525,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:104.769,paritySummary:{errors:11,warns:28,resets:0}},{njs:10,offset:0,notes:310,bombs:2,obstacles:1,nps:2.959,length:227,characteristic:"Standard",difficulty:"Hard",events:525,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:104.769,paritySummary:{errors:33,warns:74,resets:0}},{njs:10,offset:0,notes:376,bombs:2,obstacles:1,nps:3.589,length:227,characteristic:"Standard",difficulty:"Expert",events:525,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:104.769,paritySummary:{errors:49,warns:56,resets:0}}],downloadURL:"https://cdn.beatsaver.com/8390e3f33ef12a395602c4ae12df9250a730a629.zip",coverURL:"https://cdn.beatsaver.com/8390e3f33ef12a395602c4ae12df9250a730a629.jpg",previewURL:"https://cdn.beatsaver.com/8390e3f33ef12a395602c4ae12df9250a730a629.mp3"}],createdAt:"2018-06-08T14:55:59Z",updatedAt:"2018-06-08T14:55:59Z",lastPublishedAt:"2018-06-08T14:55:59Z"},{id:"41b",name:"30 Seconds to Mars | Dangerous Night",description:"Normal/Hard/Expert\r\nExpert map is not that tough. Its a fairly slower song that flows nicely.",uploader:{id:41378,name:"greatyazer",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea71",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ea71?d=retro",type:"SIMPLE"},metadata:{bpm:132,duration:200,songName:"Dangerous Night",songSubName:"30 Seconds to Mars",songAuthorName:"GreatYazer",levelAuthorName:"greatyazer"},stats:{plays:0,downloads:9071,upvotes:2404,downvotes:99,score:.9168},uploaded:"2018-06-07T17:49:47Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"85a675da674fb13e576f2ac9b61a5adc767b060a",key:"41b",state:"Published",createdAt:"2018-06-07T17:49:47Z",sageScore:5,diffs:[{njs:10,offset:0,notes:227,bombs:0,obstacles:53,nps:1.202,length:415.5,characteristic:"Standard",difficulty:"Normal",events:463,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.864,paritySummary:{errors:130,warns:10,resets:0},stars:.78},{njs:10,offset:0,notes:365,bombs:0,obstacles:59,nps:1.933,length:415.5,characteristic:"Standard",difficulty:"Hard",events:463,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.864,paritySummary:{errors:81,warns:31,resets:0},stars:1.2},{njs:10,offset:0,notes:520,bombs:0,obstacles:60,nps:2.753,length:415.5,characteristic:"Standard",difficulty:"Expert",events:463,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.864,paritySummary:{errors:60,warns:53,resets:0},stars:1.7}],downloadURL:"https://cdn.beatsaver.com/85a675da674fb13e576f2ac9b61a5adc767b060a.zip",coverURL:"https://cdn.beatsaver.com/85a675da674fb13e576f2ac9b61a5adc767b060a.jpg",previewURL:"https://cdn.beatsaver.com/85a675da674fb13e576f2ac9b61a5adc767b060a.mp3"}],createdAt:"2018-06-07T17:49:47Z",updatedAt:"2018-06-07T17:49:47Z",lastPublishedAt:"2018-06-07T17:49:47Z"},{id:"4f0f",name:"MOMOLAND - BAAM",description:'Whoot whoot, first map! Please enjoy and have fun!\nExpert+ is named "Alternate Expert" in game and is largely the same as Expert. The differences are at 1:05-1:24, 2:20-2:39, and 2:54-3:09 with Alt Expert being a little more intense and fun in my opinion. Still I found myself playing both Experts interchangeably so think of it as a little experimentation as I continue to learn.\n\nNEW! Expert Preview Video: https://www.youtube.com/watch?v=qA1811Z-uVo\nMirror: https://streamable.com/p634s\n\n1 Year Mapping Anniversary Remaster: https://beatsaver.com/beatmap/aa5c',uploader:{id:71661,name:"bloodcloak",uniqueSet:!0,hash:"5cff0b7698cc5a672c8551d3",avatar:"https://cdn.beatsaver.com/avatar/205707707187986442.png",type:"DISCORD"},metadata:{bpm:127,duration:208,songName:"BAAM",songSubName:"MOMOLAND",songAuthorName:"Bloodcloak",levelAuthorName:"Bloodcloak"},stats:{plays:0,downloads:2222,upvotes:709,downvotes:12,score:.9167},uploaded:"2019-05-26T01:22:06Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d54ad194fe09598964d1c065887e52f2c4248b30",key:"4f0f",state:"Published",createdAt:"2019-05-26T01:22:06Z",sageScore:5,diffs:[{njs:10,offset:0,notes:576,bombs:0,obstacles:68,nps:2.91,length:419,characteristic:"Standard",difficulty:"Hard",events:1357,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.953,paritySummary:{errors:64,warns:46,resets:0}},{njs:12,offset:0,notes:783,bombs:0,obstacles:61,nps:3.955,length:419,characteristic:"Standard",difficulty:"Expert",events:1350,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.953,paritySummary:{errors:83,warns:69,resets:0}},{njs:12,offset:0,notes:819,bombs:0,obstacles:67,nps:4.137,length:419,characteristic:"Standard",difficulty:"ExpertPlus",events:1350,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.953,paritySummary:{errors:89,warns:52,resets:0}}],downloadURL:"https://cdn.beatsaver.com/d54ad194fe09598964d1c065887e52f2c4248b30.zip",coverURL:"https://cdn.beatsaver.com/d54ad194fe09598964d1c065887e52f2c4248b30.jpg",previewURL:"https://cdn.beatsaver.com/d54ad194fe09598964d1c065887e52f2c4248b30.mp3"}],createdAt:"2019-05-26T01:22:06Z",updatedAt:"2019-05-26T01:22:06Z",lastPublishedAt:"2019-05-26T01:22:06Z"},{id:"3714",name:"To The Stars - Braken (Monstercat Release)",description:"https://www.youtube.com/watch?v=105NIrAR4a4\r\nExpert+ only",uploader:{id:4285982,name:"downycat",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ede5",avatar:"https://cdn.beatsaver.com/avatar/173538829888782336.png",type:"DISCORD"},metadata:{bpm:175,duration:202,songName:"To The Stars",songSubName:"Braken",songAuthorName:"DownyCat",levelAuthorName:"downycat"},stats:{plays:0,downloads:2451,upvotes:958,downvotes:23,score:.9167},uploaded:"2019-02-17T12:03:07Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"58fd2a28e6c3d6862084da1ec1b92c99090c5cd5",key:"3714",state:"Published",createdAt:"2019-02-17T12:03:07Z",sageScore:5,diffs:[{njs:14,offset:0,notes:996,bombs:0,obstacles:33,nps:5.34,length:544,characteristic:"Standard",difficulty:"ExpertPlus",events:2145,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:186.514,paritySummary:{errors:16,warns:23,resets:0}}],downloadURL:"https://cdn.beatsaver.com/58fd2a28e6c3d6862084da1ec1b92c99090c5cd5.zip",coverURL:"https://cdn.beatsaver.com/58fd2a28e6c3d6862084da1ec1b92c99090c5cd5.jpg",previewURL:"https://cdn.beatsaver.com/58fd2a28e6c3d6862084da1ec1b92c99090c5cd5.mp3"}],createdAt:"2019-02-17T12:03:07Z",updatedAt:"2019-02-17T12:03:07Z",lastPublishedAt:"2019-02-17T12:03:07Z"},{id:"645a",name:"1788-L - A B Y S S",description:"",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:177,duration:179,songName:"A B Y S S",songSubName:"",songAuthorName:"1788-L",levelAuthorName:"Rustic"},stats:{plays:0,downloads:1417,upvotes:981,downvotes:24,score:.9167},uploaded:"2019-09-18T18:07:03.444Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5f85d131f63c7415967ba4414abef741686ece9c",key:"645a",state:"Published",createdAt:"2019-09-18T18:07:03.444Z",sageScore:6,diffs:[{njs:20,offset:0,notes:553,bombs:0,obstacles:3106,nps:3.224,length:506,characteristic:"Standard",difficulty:"ExpertPlus",events:9089,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:171.525,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/5f85d131f63c7415967ba4414abef741686ece9c.zip",coverURL:"https://cdn.beatsaver.com/5f85d131f63c7415967ba4414abef741686ece9c.jpg",previewURL:"https://cdn.beatsaver.com/5f85d131f63c7415967ba4414abef741686ece9c.mp3"}],createdAt:"2019-09-18T18:07:03.444Z",updatedAt:"2019-09-18T18:07:03.444Z",lastPublishedAt:"2019-09-18T18:07:03.444Z"},{id:"5bc1",name:"Propaganda - Muse",description:"Please note that this track will get blocked automatically on YouTube.\n\nExpert Playthrough : https://vimeo.com/353093204",uploader:{id:13320,name:"novashaft",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ee55",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee55?d=retro",type:"SIMPLE"},metadata:{bpm:190,duration:182,songName:"Propaganda",songSubName:"",songAuthorName:"Muse",levelAuthorName:"NovaShaft"},stats:{plays:0,downloads:1728,upvotes:660,downvotes:10,score:.9167},uploaded:"2019-08-10T12:59:56.399Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"99738852493b819152a7651583f40b63bba70188",key:"5bc1",state:"Published",createdAt:"2019-08-10T12:59:56.399Z",sageScore:5,diffs:[{njs:11,offset:0,notes:366,bombs:0,obstacles:23,nps:2.093,length:553.75,characteristic:"Standard",difficulty:"Normal",events:900,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:174.868,paritySummary:{errors:32,warns:6,resets:0}},{njs:12,offset:0,notes:492,bombs:0,obstacles:24,nps:2.814,length:553.75,characteristic:"Standard",difficulty:"Hard",events:900,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:174.868,paritySummary:{errors:15,warns:8,resets:0}},{njs:14,offset:0,notes:620,bombs:0,obstacles:26,nps:3.546,length:553.75,characteristic:"Standard",difficulty:"Expert",events:900,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:174.868,paritySummary:{errors:19,warns:13,resets:0}}],downloadURL:"https://cdn.beatsaver.com/99738852493b819152a7651583f40b63bba70188.zip",coverURL:"https://cdn.beatsaver.com/99738852493b819152a7651583f40b63bba70188.jpg",previewURL:"https://cdn.beatsaver.com/99738852493b819152a7651583f40b63bba70188.mp3"}],createdAt:"2019-08-10T12:59:56.399Z",updatedAt:"2019-08-10T12:59:56.399Z",lastPublishedAt:"2019-08-10T12:59:56.399Z"},{id:"f003",name:"Calliope Mori - Excuse My Rudeness, But Could You Please RIP?",description:"Expert+ Preview: https://www.youtube.com/watch?v=XCZMtdvz91g\n\nYo, fellow Dead Beats, this has been stuck in my head ever since it came out. The original songs by Calliope are absolute fire. The others in HoloMyth as well as the rest of Hololive are amazing and you should expect more maps from this realm. \n\nI totally did not fall into the rabbit hole... If you have any issues with that then, 失礼しますが、RIP♡\n\nComments? Like it? Hate it? Let me know on Discord @Bloodcloak#5725 !",uploader:{id:71661,name:"bloodcloak",uniqueSet:!0,hash:"5cff0b7698cc5a672c8551d3",avatar:"https://cdn.beatsaver.com/avatar/205707707187986442.png",type:"DISCORD"},metadata:{bpm:124,duration:186,songName:"Excuse My Rudeness, But Could You Please RIP?",songSubName:"",songAuthorName:"Calliope Mori",levelAuthorName:"Bloodcloak"},stats:{plays:0,downloads:6752,upvotes:1803,downvotes:66,score:.9166},uploaded:"2020-09-21T22:48:02.152Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"4b2a227ddb923ce3e6a3060530037014966037e2",key:"f003",state:"Published",createdAt:"2020-09-21T22:48:02.152Z",sageScore:2,diffs:[{njs:12,offset:.4,notes:361,bombs:0,obstacles:139,nps:1.992,length:374.5,characteristic:"Standard",difficulty:"Normal",events:2716,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.21,paritySummary:{errors:3,warns:0,resets:0}},{njs:12,offset:.4,notes:652,bombs:0,obstacles:105,nps:3.598,length:374.5,characteristic:"Standard",difficulty:"Hard",events:2716,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.21,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:-.2,notes:948,bombs:0,obstacles:72,nps:5.232,length:374.5,characteristic:"Standard",difficulty:"Expert",events:2716,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.21,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:-.4,notes:1105,bombs:0,obstacles:60,nps:6.098,length:374.5,characteristic:"Standard",difficulty:"ExpertPlus",events:2716,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.21,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/4b2a227ddb923ce3e6a3060530037014966037e2.zip",coverURL:"https://cdn.beatsaver.com/4b2a227ddb923ce3e6a3060530037014966037e2.jpg",previewURL:"https://cdn.beatsaver.com/4b2a227ddb923ce3e6a3060530037014966037e2.mp3"}],createdAt:"2020-09-21T22:48:02.152Z",updatedAt:"2020-09-21T22:48:02.152Z",lastPublishedAt:"2020-09-21T22:48:02.152Z"},{id:"a90a",name:"[TheFatRat Pack] Windfall - TheFatRat",description:'Here it is! The unofficial "TheFatRat" Music Pack in Beat Saber - with all beatmaps being singlehandedly made by me!\n\nAll songs included in TheFatRat Music Pack:\nMonody (ft. Laura Brehm) \nUnity \nWindfall \nXenogenesis \nTime Lapse \n\nGet the full song pack here: https://bsaber.com/thefatrat-music-pack/\n(Or you should just be able to find all the other ones on my beatsaver profile as well. Heres a link to my profile: https://beatsaver.com/uploader/5d47d586c5301900060b2f6c)\n\nSongcore mod is recommended (for custom colours)\nPlays best on Origins Environment\n\nWindfall Stats:\nExpert+ - 1031 Notes | 4.53 NPS\nExpert - 826 Notes | 3.63 NPS\nHard - 683 Notes | 3.00 NPS\nNormal - 421 Notes | 1.85 NPS\nEasy - 277 Notes | 1.22 NPS\n\nRoughly 9 Hours of work\nGameplay: https://youtu.be/RW5Y6GifdDA\n\nObviously - A huge thanks to TheFatRat himself, for not only producing the songs in the first place (and allowing free access to use them for big and small content creators), but also being a huge inspiration to lots of artists out there and for making music that everyone can jam out to! We love you, TheFatRat!',uploader:{id:4284197,name:"timeweaver",uniqueSet:!0,hash:"5d47d586c5301900060b2f6c",avatar:"https://cdn.beatsaver.com/avatar/607399708121366529.png",type:"DISCORD"},metadata:{bpm:102,duration:227,songName:"Windfall",songSubName:"",songAuthorName:"TheFatRat",levelAuthorName:"Timeweaver"},stats:{plays:0,downloads:4210,upvotes:1147,downvotes:32,score:.9166},uploaded:"2020-05-22T13:28:49.981Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"29677eb4f5cb04e2698b16923eee804abce90f76",key:"a90a",state:"Published",createdAt:"2020-05-22T13:28:49.981Z",sageScore:5,diffs:[{njs:10,offset:1,notes:277,bombs:0,obstacles:39,nps:1.28,length:368,characteristic:"Standard",difficulty:"Easy",events:4238,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.471,paritySummary:{errors:40,warns:28,resets:0}},{njs:10,offset:1,notes:421,bombs:0,obstacles:41,nps:1.945,length:368,characteristic:"Standard",difficulty:"Normal",events:4238,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.471,paritySummary:{errors:59,warns:27,resets:0}},{njs:12,offset:.25,notes:683,bombs:0,obstacles:66,nps:3.096,length:375,characteristic:"Standard",difficulty:"Hard",events:4238,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.588,paritySummary:{errors:3,warns:0,resets:0}},{njs:14,offset:-.25,notes:826,bombs:0,obstacles:67,nps:3.735,length:376,characteristic:"Standard",difficulty:"Expert",events:4240,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.176,paritySummary:{errors:2,warns:0,resets:0}},{njs:18,offset:.325,notes:1031,bombs:0,obstacles:65,nps:4.618,length:379.5,characteristic:"Standard",difficulty:"ExpertPlus",events:4238,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:223.235,paritySummary:{errors:0,warns:1,resets:0}}],downloadURL:"https://cdn.beatsaver.com/29677eb4f5cb04e2698b16923eee804abce90f76.zip",coverURL:"https://cdn.beatsaver.com/29677eb4f5cb04e2698b16923eee804abce90f76.jpg",previewURL:"https://cdn.beatsaver.com/29677eb4f5cb04e2698b16923eee804abce90f76.mp3"}],createdAt:"2020-05-22T13:28:49.981Z",updatedAt:"2020-05-22T13:28:49.981Z",lastPublishedAt:"2020-05-22T13:28:49.981Z"},{id:"5270",name:"Gurenge - LiSA",description:"Kimetsuno Yaiba OP\r\n\r\nPreview : https://youtu.be/6AznmNIg68Y\r\nNJS : 14(Expert), 13(Hard)",uploader:{id:31044,name:"digiracko",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ed32",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ed32?d=retro",type:"SIMPLE"},metadata:{bpm:135,duration:238,songName:"Gurenge",songSubName:"LiSA",songAuthorName:"DigiRacko",levelAuthorName:"digiracko"},stats:{plays:0,downloads:5415,upvotes:3174,downvotes:145,score:.9166},uploaded:"2019-06-09T00:26:20Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9c71e86622967891482bf18c536ff3d03eb5af3f",key:"5270",state:"Published",createdAt:"2019-06-09T00:26:20Z",sageScore:4,diffs:[{njs:13,offset:1,notes:703,bombs:0,obstacles:0,nps:3.045,length:519.5,characteristic:"Standard",difficulty:"Hard",events:592,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:230.889,paritySummary:{errors:43,warns:33,resets:0}},{njs:14,offset:1,notes:974,bombs:0,obstacles:0,nps:4.218,length:519.5,characteristic:"Standard",difficulty:"Expert",events:593,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:230.889,paritySummary:{errors:79,warns:66,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9c71e86622967891482bf18c536ff3d03eb5af3f.zip",coverURL:"https://cdn.beatsaver.com/9c71e86622967891482bf18c536ff3d03eb5af3f.jpg",previewURL:"https://cdn.beatsaver.com/9c71e86622967891482bf18c536ff3d03eb5af3f.mp3"}],createdAt:"2019-06-09T00:26:20Z",updatedAt:"2019-06-09T00:26:20Z",lastPublishedAt:"2019-06-09T00:26:20Z"},{id:"2394",name:"Are You Gonna Be My Girl? - Jet",description:"All 5 difficulties. Had a lot of fun with this one :)\r\nAll charts down to normal are uniquely built.\r\n\r\nExpert+ Playthrough: https://youtu.be/5FhrP79pfVc",uploader:{id:47581,name:"freeek",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8ad",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8ad?d=retro",type:"SIMPLE"},metadata:{bpm:105,duration:218,songName:"Are you gonna be my Girl",songSubName:"Jet",songAuthorName:"Freeek",levelAuthorName:"freeek"},stats:{plays:0,downloads:5652,upvotes:2217,downvotes:89,score:.9166},uploaded:"2018-12-03T18:23:49Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"399b2bd6630fe3dcc7631f89ae391e6684fd6a07",key:"2394",state:"Published",createdAt:"2018-12-03T18:23:49Z",sageScore:7,diffs:[{njs:10,offset:0,notes:286,bombs:0,obstacles:36,nps:1.472,length:340,characteristic:"Standard",difficulty:"Easy",events:1906,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.286,paritySummary:{errors:10,warns:1,resets:0}},{njs:10,offset:0,notes:369,bombs:0,obstacles:29,nps:1.899,length:340,characteristic:"Standard",difficulty:"Normal",events:1906,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.286,paritySummary:{errors:36,warns:31,resets:0}},{njs:10,offset:0,notes:510,bombs:0,obstacles:25,nps:2.625,length:340,characteristic:"Standard",difficulty:"Hard",events:1906,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.286,paritySummary:{errors:45,warns:49,resets:0}},{njs:12,offset:0,notes:757,bombs:0,obstacles:17,nps:3.896,length:340,characteristic:"Standard",difficulty:"Expert",events:1906,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.286,paritySummary:{errors:37,warns:43,resets:0}},{njs:15,offset:0,notes:927,bombs:0,obstacles:13,nps:4.771,length:340,characteristic:"Standard",difficulty:"ExpertPlus",events:1906,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.286,paritySummary:{errors:42,warns:65,resets:0}}],downloadURL:"https://cdn.beatsaver.com/399b2bd6630fe3dcc7631f89ae391e6684fd6a07.zip",coverURL:"https://cdn.beatsaver.com/399b2bd6630fe3dcc7631f89ae391e6684fd6a07.jpg",previewURL:"https://cdn.beatsaver.com/399b2bd6630fe3dcc7631f89ae391e6684fd6a07.mp3"}],createdAt:"2018-12-03T18:23:49Z",updatedAt:"2018-12-03T18:23:49Z",lastPublishedAt:"2018-12-03T18:23:49Z"},{id:"451b",name:"Orion - Getsix",description:"Get your hunting instinct ready; let’s hunt some bloqs to this dynamic and emotional trip of a track. Think you have what it takes to keep up?\r\n\r\nHUGE thanks to Getsix for taking the time to make a new specific edit and mix of the song for this map! The edits include shortened intro, shorter synth lead parts and louder tribal drums, all for a better Beat Saber experience.\r\n\r\nPreview video:\r\nhttps://youtu.be/s6st6WoBd7k\r\n\r\nBPM: 130\r\nDuration: 3:58\r\nEasy, Normal, Hard, Expert and Expert+ difficulties.\r\n\r\nEasy: 253, 1 obstacles, 2 mines\r\nNormal: 365 notes, 1 obstacles, 4 mines\r\nHard: 556 notes, 1 obstacles, 8 mines\r\nExpert: 979 notes, 1 obstacles, 8 mines\r\nExpert+: 1048 notes, 1 obstacles, 8 mines\r\n\r\nThanks to Redmagi, Malakite and Helencarnate for playtesting!\r\n\r\nEnjoy!",uploader:{id:4285318,name:"kolezan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fcbb",avatar:"https://cdn.beatsaver.com/avatar/220513618763055106.png",type:"DISCORD"},metadata:{bpm:130,duration:231,songName:"Orion (Beat Saber Edit)",songSubName:"Getsix",songAuthorName:"Kolezan",levelAuthorName:"Kolezan"},stats:{plays:0,downloads:3346,upvotes:1205,downvotes:35,score:.9165},uploaded:"2019-04-12T05:54:28Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c86e3d35feeb08e4569dabe2389558ba40fa5bf7",key:"451b",state:"Published",createdAt:"2019-04-12T05:54:28Z",sageScore:7,diffs:[{njs:9,offset:0,notes:253,bombs:2,obstacles:1,nps:1.133,length:484,characteristic:"Standard",difficulty:"Easy",events:2353,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:223.385,paritySummary:{errors:80,warns:17,resets:0}},{njs:10,offset:1,notes:365,bombs:4,obstacles:1,nps:1.634,length:484,characteristic:"Standard",difficulty:"Normal",events:2353,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:223.385,paritySummary:{errors:74,warns:41,resets:0}},{njs:14,offset:0,notes:556,bombs:8,obstacles:1,nps:2.494,length:483,characteristic:"Standard",difficulty:"Hard",events:2353,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:222.923,paritySummary:{errors:75,warns:61,resets:4}},{njs:17,offset:0,notes:979,bombs:8,obstacles:1,nps:4.392,length:483,characteristic:"Standard",difficulty:"Expert",events:2353,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:222.923,paritySummary:{errors:76,warns:108,resets:2}},{njs:19,offset:0,notes:1048,bombs:8,obstacles:1,nps:4.701,length:483,characteristic:"Standard",difficulty:"ExpertPlus",events:2353,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:222.923,paritySummary:{errors:97,warns:112,resets:2}}],downloadURL:"https://cdn.beatsaver.com/c86e3d35feeb08e4569dabe2389558ba40fa5bf7.zip",coverURL:"https://cdn.beatsaver.com/c86e3d35feeb08e4569dabe2389558ba40fa5bf7.jpg",previewURL:"https://cdn.beatsaver.com/c86e3d35feeb08e4569dabe2389558ba40fa5bf7.mp3"}],createdAt:"2019-04-12T05:54:28Z",updatedAt:"2019-04-12T05:54:28Z",lastPublishedAt:"2019-04-12T05:54:28Z"},{id:"c209",name:"[Alphabeat - Pegboard Nerds Pack] Pegboard Nerds - Luigi's Mansion",description:"Part of the Pegboard Nerds Music Pack - Presented by the Alphabeat Mapping Group.\n\nAlphabeat is a mapping group that currently consists of 6 members, 4 of which have made this pack. This Pegboard Nerds pack is brought to you by Timeweaver, Rayman, KuritsaDVR & FireStrike!\n\nCheck out the other mappers' profiles here:\nTimeweaver - https://beatsaver.com/uploader/5d47d586c5301900060b2f6c\nFirestrike - https://beatsaver.com/uploader/5cff0b7698cc5a672c85479f\nKuritsaDVR - https://beatsaver.com/uploader/5cff0b7698cc5a672c8537ef\n\nThis map uses a custom platform made by Rayman (me!)! Download it here: https://modelsaber.com/Platforms/?id=1594988870\n\nAll songs included in this pack:\n- Gunslinga (Mapped by Rayman)\n- Coffins (Mapped by Rayman)\n- Superstar (Mapped by Timeweaver & Firestrike)\n- Razor Sharp (Mapped by Firestrike)\n- Luigi’s Mansion (Mapped by Rayman)\n- Try This (Mapped by Timeweaver & Firestrike)\n- Swamp Thing (Mapped by Rayman & KuritsaDVR)\n- Exterminate (Mapped by Timeweaver)\n- Disconnected (Mapped by Timeweaver & Firestrike)\n- Here it Comes (Mapped by KuritsaDVR & Timeweaver)\n\nGet the playlist here:\nhttps://bsaber.com/pegboard-nerds-pack/\n\nView the trailer here:\nhttps://youtu.be/b0fU5Rv_Zf0\n\nIncludes\n- 5 Standard Difficulties\n- 1 One Saber Difficulty\n- 1 360 Degree Difficulty\n- 1 90 Degree Difficulty",uploader:{id:4284994,name:"rayman9515",uniqueSet:!0,hash:"5dc6edac6dea0b0006c18486",avatar:"https://cdn.beatsaver.com/avatar/439017353892724736.png",type:"DISCORD"},metadata:{bpm:99,duration:229,songName:"Luigi's Mansion",songSubName:"",songAuthorName:"Pegboard Nerds",levelAuthorName:"Rayman9515"},stats:{plays:0,downloads:2446,upvotes:797,downvotes:16,score:.9164},uploaded:"2020-07-17T13:00:46.645Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e7cdcc86e136da49cce9747233131e819cabe951",key:"c209",state:"Published",createdAt:"2020-07-17T13:00:46.645Z",sageScore:4,diffs:[{njs:11,offset:.2,notes:332,bombs:0,obstacles:45,nps:1.491,length:365.803,characteristic:"Standard",difficulty:"Easy",events:3635,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.699,paritySummary:{errors:10,warns:1,resets:0}},{njs:11,offset:.2,notes:471,bombs:0,obstacles:68,nps:2.115,length:365.803,characteristic:"Standard",difficulty:"Normal",events:3635,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.699,paritySummary:{errors:20,warns:2,resets:0}},{njs:13,offset:0,notes:682,bombs:4,obstacles:67,nps:3.063,length:365.803,characteristic:"Standard",difficulty:"Hard",events:3635,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.699,paritySummary:{errors:6,warns:0,resets:0}},{njs:16,offset:.5,notes:877,bombs:0,obstacles:71,nps:3.939,length:365.803,characteristic:"Standard",difficulty:"Expert",events:3635,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.699,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:.25,notes:1184,bombs:0,obstacles:111,nps:5.318,length:365.803,characteristic:"Standard",difficulty:"ExpertPlus",events:3637,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.699,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:.25,notes:825,bombs:35,obstacles:136,nps:3.705,length:365.803,characteristic:"OneSaber",difficulty:"ExpertPlus",events:3635,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.699,paritySummary:{errors:2,warns:24,resets:0}},{njs:11,offset:.2,notes:471,bombs:0,obstacles:63,nps:2.115,length:365.803,characteristic:"90Degree",difficulty:"Normal",events:3875,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.699,paritySummary:{errors:20,warns:2,resets:0}},{njs:11,offset:.2,notes:471,bombs:0,obstacles:63,nps:2.115,length:365.803,characteristic:"360Degree",difficulty:"Normal",events:3875,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.699,paritySummary:{errors:20,warns:2,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e7cdcc86e136da49cce9747233131e819cabe951.zip",coverURL:"https://cdn.beatsaver.com/e7cdcc86e136da49cce9747233131e819cabe951.jpg",previewURL:"https://cdn.beatsaver.com/e7cdcc86e136da49cce9747233131e819cabe951.mp3"}],createdAt:"2020-07-17T13:00:46.645Z",updatedAt:"2020-07-17T13:00:46.645Z",lastPublishedAt:"2020-07-17T13:00:46.645Z"},{id:"d8",name:"Undertale - Megalovania (Cement City Remix) v.2",description:"I uploaded this song earlier today, but unfortunately not realizing an issue that I had made with the placement of 2 blocks that were near impossible to hit. Fixed and re-uploaded!\r\n\r\nDue to issues with EditSaber, I was unable to create any difficulties beyond Expert, as any changes made on one difficulty would carry over to the others.\r\n\r\nAlso this is my first beat map. Go easy. ;)",uploader:{id:48522,name:"kryptikos",uniqueSet:!0,hash:"5cff0b7298cc5a672c84eab4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84eab4?d=retro",type:"SIMPLE"},metadata:{bpm:126,duration:164,songName:"Megalovania (Cement City Remix)",songSubName:"Undertale",songAuthorName:"Kryptikos",levelAuthorName:"kryptikos"},stats:{plays:0,downloads:4306,upvotes:3e3,downvotes:135,score:.9164},uploaded:"2018-05-17T21:38:37Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"2ee2deee264648432035f4abefa69b9dac86bd95",key:"d8",state:"Published",createdAt:"2018-05-17T21:38:37Z",sageScore:5,diffs:[{njs:10,offset:0,notes:566,bombs:32,obstacles:167,nps:3.631,length:327.313,characteristic:"Standard",difficulty:"Expert",events:1864,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:155.863,paritySummary:{errors:82,warns:57,resets:2}}],downloadURL:"https://cdn.beatsaver.com/2ee2deee264648432035f4abefa69b9dac86bd95.zip",coverURL:"https://cdn.beatsaver.com/2ee2deee264648432035f4abefa69b9dac86bd95.jpg",previewURL:"https://cdn.beatsaver.com/2ee2deee264648432035f4abefa69b9dac86bd95.mp3"}],createdAt:"2018-05-17T21:38:37Z",updatedAt:"2018-05-17T21:38:37Z",lastPublishedAt:"2018-05-17T21:38:37Z"},{id:"1a0be",name:"[Electro Swing Pack] Caravan Palace - Wonderland",description:"Nixie Presents: Electro Swing Pack!\n\n10 electro swing songs with expert and expert+ diffs to make your booty swing!\n\nGet The Pack: \nhttps://bsaber.com/electro-swing-pack/\n\nMap Gameplay:\nhttps://youtu.be/uFiLQLooDpQ\n\nComplete Pack Playthrough:\nhttps://youtu.be/yj9rw4MEh7s\n\nHeyya! After looking for some dancey electro swing maps, I noticed that there barely are any!\nSo I took matters into my own hands, learning mapping basically from scratch,\nscrapping my first failed attempts and then finally making a map that was good.\nI found it so fun that I ended up making 9 more maps,\nand fine tuned them with the help of the testplayers in BSMG,\nas well as the lovely curators from the bsaber discord.\n\nHuge thanks in particular to:\nMonstor, Bearly, Noxn, Bullet, Vaser888, Tocxx, Jafdy, Storm Knight and Pixelguy!\n\nIf you want to talk to me, here is my Discord:\nNixie.Korten#6944",uploader:{id:4286374,name:"nixiekorten",uniqueSet:!0,hash:"6096752e12772e0006e2f7e6",avatar:"https://cdn.beatsaver.com/avatar/840550221690699776.png",type:"DISCORD"},metadata:{bpm:104,duration:188,songName:"Wonderland",songSubName:"",songAuthorName:"Caravan Palace",levelAuthorName:"Nixie.Korten"},stats:{plays:0,downloads:14872,upvotes:794,downvotes:16,score:.9163},uploaded:"2021-07-08T15:26:38.489Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9752f2de4dd434c589ced6d89358b1fda6902d3f",key:"1a0be",state:"Published",createdAt:"2021-07-08T15:26:38.489Z",sageScore:3,diffs:[{njs:16,offset:.25,notes:671,bombs:0,obstacles:0,nps:3.779,length:307.75,characteristic:"Standard",difficulty:"Expert",events:1588,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:177.548,paritySummary:{errors:0,warns:0,resets:0}},{njs:21,offset:0,notes:837,bombs:0,obstacles:10,nps:4.714,length:307.75,characteristic:"Standard",difficulty:"ExpertPlus",events:1588,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:177.548,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9752f2de4dd434c589ced6d89358b1fda6902d3f.zip",coverURL:"https://cdn.beatsaver.com/9752f2de4dd434c589ced6d89358b1fda6902d3f.jpg",previewURL:"https://cdn.beatsaver.com/9752f2de4dd434c589ced6d89358b1fda6902d3f.mp3"}],createdAt:"2021-07-08T15:26:38.489Z",updatedAt:"2021-07-08T15:26:38.489Z",lastPublishedAt:"2021-07-08T15:26:38.489Z"},{id:"d191",name:"Seven Lions - Silent Skies (ft. Karra) | [Chroma RGB]",description:"Was only a lightshow at first but felt like mapping it too. \nSo here is Hard, Expert and Expert+ with my best lightshow so far (imo).\nhope you like it.\n\ntalk shit on discord: nitronik.exe#7974\n\nlightshow preview: https://www.youtube.com/watch?v=vpi-VG_nZg8&t=19s",uploader:{id:4284201,name:"nitronikexe",uniqueSet:!0,hash:"5cff0b7798cc5a672c855d84",avatar:"https://cdn.beatsaver.com/avatar/428230049704181760.png",type:"DISCORD"},metadata:{bpm:140,duration:234,songName:"Silent Skies",songSubName:"(ft. Karra)",songAuthorName:"Seven Lions",levelAuthorName:"nitronik.exe"},stats:{plays:0,downloads:4892,upvotes:725,downvotes:13,score:.9163},uploaded:"2020-08-08T18:33:55.424Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8434f521be275ae476b82c00201570ece88b395f",key:"d191",state:"Published",createdAt:"2020-08-08T18:33:55.424Z",sageScore:7,diffs:[{njs:12,offset:1,notes:491,bombs:6,obstacles:59,nps:2.238,length:512,characteristic:"Standard",difficulty:"Hard",events:8199,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:219.429,paritySummary:{errors:0,warns:0,resets:2}},{njs:16,offset:0,notes:813,bombs:6,obstacles:33,nps:3.704,length:512.083,characteristic:"Standard",difficulty:"Expert",events:8199,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:219.464,paritySummary:{errors:0,warns:0,resets:2}},{njs:20,offset:-.5,notes:1113,bombs:6,obstacles:32,nps:5.071,length:512.125,characteristic:"Standard",difficulty:"ExpertPlus",events:8199,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:219.482,paritySummary:{errors:0,warns:0,resets:2}},{njs:16,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:8199,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/8434f521be275ae476b82c00201570ece88b395f.zip",coverURL:"https://cdn.beatsaver.com/8434f521be275ae476b82c00201570ece88b395f.jpg",previewURL:"https://cdn.beatsaver.com/8434f521be275ae476b82c00201570ece88b395f.mp3"}],createdAt:"2020-08-08T18:33:55.424Z",updatedAt:"2020-08-08T18:33:55.424Z",lastPublishedAt:"2020-08-08T18:33:55.424Z"},{id:"6b96",name:"COALAMODE. - Nanairo Symphony [Your Lie in April Opening 2]",description:"You think it reached her?\n\nBPM 155 | Length 2:01\nExpert\nHard\nNormal\n\nplease enjoy\n\nDM any feedback on Discord\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:155,duration:122,songName:"Nanairo Symphony",songSubName:"",songAuthorName:"COALAMODE.",levelAuthorName:"ETAN"},stats:{plays:0,downloads:2462,upvotes:602,downvotes:8,score:.9163},uploaded:"2019-10-22T23:22:04.194Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"cc3b824dcb605eb76fce944623758578094cd77d",key:"6b96",state:"Published",createdAt:"2019-10-22T23:22:04.194Z",sageScore:6,diffs:[{njs:11,offset:0,notes:207,bombs:0,obstacles:1,nps:1.857,length:288,characteristic:"Standard",difficulty:"Normal",events:3796,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:111.484,paritySummary:{errors:2,warns:2,resets:0}},{njs:12,offset:1,notes:282,bombs:0,obstacles:1,nps:2.53,length:288,characteristic:"Standard",difficulty:"Hard",events:3796,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:111.484,paritySummary:{errors:0,warns:1,resets:0}},{njs:16,offset:.5,notes:411,bombs:0,obstacles:1,nps:3.687,length:288,characteristic:"Standard",difficulty:"Expert",events:3796,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:111.484,paritySummary:{errors:4,warns:3,resets:0}}],downloadURL:"https://cdn.beatsaver.com/cc3b824dcb605eb76fce944623758578094cd77d.zip",coverURL:"https://cdn.beatsaver.com/cc3b824dcb605eb76fce944623758578094cd77d.jpg",previewURL:"https://cdn.beatsaver.com/cc3b824dcb605eb76fce944623758578094cd77d.mp3"}],createdAt:"2019-10-22T23:22:04.194Z",updatedAt:"2019-10-22T23:22:04.194Z",lastPublishedAt:"2019-10-22T23:22:04.194Z"},{id:"42de",name:"Kamikaze - WALK THE MOON",description:"An older map that I have no idea why I never published. So here it is!",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:155,duration:198,songName:"Kamikaze",songSubName:"WALK THE MOON",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:3218,upvotes:950,downvotes:23,score:.9163},uploaded:"2019-04-01T22:12:10Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"63d2d5920e6676f63bf997ae606b6d1590cd8c8d",key:"42de",state:"Published",createdAt:"2019-04-01T22:12:10Z",sageScore:5,diffs:[{njs:10,offset:0,notes:231,bombs:0,obstacles:8,nps:1.203,length:496,characteristic:"Standard",difficulty:"Easy",events:266,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:71,warns:20,resets:0}},{njs:10,offset:0,notes:259,bombs:0,obstacles:8,nps:1.349,length:496,characteristic:"Standard",difficulty:"Normal",events:266,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:39,warns:23,resets:0}},{njs:10,offset:0,notes:442,bombs:0,obstacles:8,nps:2.302,length:496,characteristic:"Standard",difficulty:"Hard",events:266,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:84,warns:55,resets:0}},{njs:12,offset:0,notes:487,bombs:0,obstacles:8,nps:2.536,length:496,characteristic:"Standard",difficulty:"Expert",events:266,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:87,warns:68,resets:0}}],downloadURL:"https://cdn.beatsaver.com/63d2d5920e6676f63bf997ae606b6d1590cd8c8d.zip",coverURL:"https://cdn.beatsaver.com/63d2d5920e6676f63bf997ae606b6d1590cd8c8d.jpg",previewURL:"https://cdn.beatsaver.com/63d2d5920e6676f63bf997ae606b6d1590cd8c8d.mp3"}],createdAt:"2019-04-01T22:12:10Z",updatedAt:"2019-04-01T22:12:10Z",lastPublishedAt:"2019-04-01T22:12:10Z"},{id:"18a6",name:"DJ Fresh - Louder (Doctor P & Flux Pavilion Remix)",description:"Expert / Hard / Normal\r\nhttps://www.youtube.com/watch?v=rfR4cbnB7T8",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:140,duration:128,songName:"Louder (Doctor P & Flux Pavilion Remix)",songSubName:"DJ Fresh",songAuthorName:"Rustic",levelAuthorName:"rustic"},stats:{plays:0,downloads:2475,upvotes:1159,downvotes:33,score:.9163},uploaded:"2018-10-04T12:37:14Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6b2cdc3638c97881753d83308c13eda1a490f0b2",key:"18a6",state:"Published",createdAt:"2018-10-04T12:37:14Z",sageScore:6,diffs:[{njs:10,offset:0,notes:249,bombs:0,obstacles:1,nps:2.06,length:282,characteristic:"Standard",difficulty:"Normal",events:2076,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:120.857,paritySummary:{errors:10,warns:27,resets:0}},{njs:12,offset:0,notes:305,bombs:0,obstacles:2,nps:2.524,length:282,characteristic:"Standard",difficulty:"Hard",events:2076,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:120.857,paritySummary:{errors:10,warns:39,resets:0}},{njs:14,offset:0,notes:380,bombs:0,obstacles:14,nps:3.144,length:282,characteristic:"Standard",difficulty:"Expert",events:2364,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:120.857,paritySummary:{errors:11,warns:43,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6b2cdc3638c97881753d83308c13eda1a490f0b2.zip",coverURL:"https://cdn.beatsaver.com/6b2cdc3638c97881753d83308c13eda1a490f0b2.jpg",previewURL:"https://cdn.beatsaver.com/6b2cdc3638c97881753d83308c13eda1a490f0b2.mp3"}],createdAt:"2018-10-04T12:37:14Z",updatedAt:"2018-10-04T12:37:14Z",lastPublishedAt:"2018-10-04T12:37:14Z"},{id:"2529",name:"Back From The Dead - Skillet",description:"Song: Back From The Dead - Skillet\r\nMapper: KuritsaDBS\r\nAvailable difficulties: Expert\r\nPreview: Not available",uploader:{id:23150,name:"kuritsadbs",uniqueSet:!0,hash:"5cff0b7698cc5a672c8537ef",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8537ef?d=retro",type:"SIMPLE"},metadata:{bpm:162,duration:215,songName:"Back From The Dead",songSubName:"Skillet",songAuthorName:"KuritsaDBS",levelAuthorName:"KuritsaDBS"},stats:{plays:0,downloads:844,upvotes:601,downvotes:8,score:.9162},uploaded:"2018-12-11T14:24:33Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"baa01d357ac94cdca55972aa6c925709e4595850",key:"2529",state:"Published",createdAt:"2018-12-11T14:24:33Z",sageScore:4,diffs:[{njs:14,offset:0,notes:593,bombs:44,obstacles:107,nps:2.911,length:550,characteristic:"Standard",difficulty:"Expert",events:754,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:203.704,paritySummary:{errors:33,warns:51,resets:0}}],downloadURL:"https://cdn.beatsaver.com/baa01d357ac94cdca55972aa6c925709e4595850.zip",coverURL:"https://cdn.beatsaver.com/baa01d357ac94cdca55972aa6c925709e4595850.jpg",previewURL:"https://cdn.beatsaver.com/baa01d357ac94cdca55972aa6c925709e4595850.mp3"}],createdAt:"2018-12-11T14:24:33Z",updatedAt:"2018-12-11T14:24:33Z",lastPublishedAt:"2018-12-11T14:24:33Z"},{id:"1897",name:"Song of the Ancients / Fate - NieR Gestalt & Replicant Original Soundtrack",description:"\"It's like I just found something special. Something very special.\"\r\n\r\n128BPM / 4:52 Runtime\r\nHard / 758 Notes\r\nExpert / 994 Notes\r\nExpert+ / 1108 Notes\r\n\r\nGameplay:\r\nhttps://youtu.be/0r-UkakLCwU\r\nListen to the song:\r\nhttps://www.youtube.com/watch?v=ady--PNMsfI\r\n\r\nI thought the amazing game, NieR Gestalt/Replicant, needed an amazing beat map to go with it. This song was a perfect fit :)\r\n[UPDATE]\r\nSomebody pointed out there was a mapping error during the acoustic guitar section. It's fixed.",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:128,duration:292,songName:"Song of the Ancients / Fate",songSubName:"NieR OST",songAuthorName:"Skyler Wallace",levelAuthorName:"skylerwallace"},stats:{plays:0,downloads:1672,upvotes:860,downvotes:19,score:.9162},uploaded:"2018-10-04T00:33:41Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"4638d271b9974ec5bb851bb8629976078e781c97",key:"1897",state:"Published",createdAt:"2018-10-04T00:33:41Z",sageScore:6,diffs:[{njs:10,offset:0,notes:758,bombs:0,obstacles:16,nps:2.622,length:616,characteristic:"Standard",difficulty:"Hard",events:3742,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:288.75,paritySummary:{errors:81,warns:73,resets:0}},{njs:12,offset:0,notes:994,bombs:8,obstacles:32,nps:3.439,length:616,characteristic:"Standard",difficulty:"Expert",events:3742,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:288.75,paritySummary:{errors:55,warns:40,resets:0}},{njs:12,offset:0,notes:1108,bombs:8,obstacles:32,nps:3.833,length:616,characteristic:"Standard",difficulty:"ExpertPlus",events:3742,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:288.75,paritySummary:{errors:65,warns:47,resets:0}}],downloadURL:"https://cdn.beatsaver.com/4638d271b9974ec5bb851bb8629976078e781c97.zip",coverURL:"https://cdn.beatsaver.com/4638d271b9974ec5bb851bb8629976078e781c97.jpg",previewURL:"https://cdn.beatsaver.com/4638d271b9974ec5bb851bb8629976078e781c97.mp3"}],createdAt:"2018-10-04T00:33:41Z",updatedAt:"2018-10-04T00:33:41Z",lastPublishedAt:"2018-10-04T00:33:41Z"},{id:"9a36",name:"[Tokyo Machine Pack] Tokyo Machine - PLAY",description:"4/6\nPart of the Tokyo Machine Pack, a collab between Firestrike, Cyansnow and I.\nMap by me, lights by FireStrike.\n\nFireStrike's account: https://beatsaver.com/uploader/5cff0b7698cc5a672c85479f\nCyanSnow's account: https://beatsaver.com/uploader/5cff0b7698cc5a672c8543ac\n\nPlaylist: https://bsaber.com/tokyo-machine-pack/\n\nCheck out the trailer for the pack here: https://www.youtube.com/watch?v=lStPUnecsD8",uploader:{id:57657,name:"pixelguymm",uniqueSet:!0,hash:"5cff0b7698cc5a672c8541a8",avatar:"https://cdn.beatsaver.com/avatar/434386941547511818.png",type:"DISCORD"},metadata:{bpm:128,duration:185,songName:"PLAY",songSubName:"",songAuthorName:"Tokyo Machine",levelAuthorName:"FireStrike & Pixel"},stats:{plays:0,downloads:1813,upvotes:598,downvotes:8,score:.9161},uploaded:"2020-04-12T18:07:52.070Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a9e447b8ea158c2b68f546935f704b270277f7f8",key:"9a36",state:"Published",createdAt:"2020-04-12T18:07:52.070Z",sageScore:5,diffs:[{njs:16,offset:-.3,notes:754,bombs:43,obstacles:0,nps:4.189,length:384,characteristic:"Standard",difficulty:"ExpertPlus",events:4444,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a9e447b8ea158c2b68f546935f704b270277f7f8.zip",coverURL:"https://cdn.beatsaver.com/a9e447b8ea158c2b68f546935f704b270277f7f8.jpg",previewURL:"https://cdn.beatsaver.com/a9e447b8ea158c2b68f546935f704b270277f7f8.mp3"}],createdAt:"2020-04-12T18:07:52.070Z",updatedAt:"2020-04-12T18:07:52.070Z",lastPublishedAt:"2020-04-12T18:07:52.070Z"},{id:"8108",name:"[Noodlegames] Ephixa - Wisdom (Zelda's Lullaby)",description:"The Ramen Noodle group is here to bring you a map pack full of our favorite video game soundtracks and game-inspired music! Ephixa's wonderful remix of Zelda's Lullaby is iconic, and a fantastic way to honor the beautiful rhythms in Ocarina of Time.",uploader:{id:4284569,name:"checkthepan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f3d5",avatar:"https://cdn.beatsaver.com/avatar/184355369189900290.png",type:"DISCORD"},metadata:{bpm:140,duration:241,songName:"Wisdom (Zelda's Lullaby Link to the Future) ",songSubName:"[feat. Will & Tim] [From Legend of Zelda: Ocarina of Time]",songAuthorName:"Ephixa",levelAuthorName:"Checkthepan"},stats:{plays:0,downloads:2384,upvotes:696,downvotes:12,score:.9161},uploaded:"2020-01-24T23:15:35.818Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a603656eb8cdadcb6eda85ef408902c1f6125a8f",key:"8108",state:"Published",createdAt:"2020-01-24T23:15:35.818Z",sageScore:3,diffs:[{njs:11,offset:.25,notes:331,bombs:0,obstacles:28,nps:1.43,length:540.031,characteristic:"Standard",difficulty:"Normal",events:13016,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.442,paritySummary:{errors:77,warns:4,resets:0}},{njs:13,offset:.25,notes:560,bombs:16,obstacles:26,nps:2.42,length:540.031,characteristic:"Standard",difficulty:"Hard",events:13016,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.442,paritySummary:{errors:1,warns:1,resets:3}},{njs:16,offset:0,notes:769,bombs:24,obstacles:26,nps:3.323,length:540.031,characteristic:"Standard",difficulty:"Expert",events:13016,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.442,paritySummary:{errors:1,warns:0,resets:3}},{njs:19,offset:-.25,notes:930,bombs:65,obstacles:26,nps:4.018,length:540.031,characteristic:"Standard",difficulty:"ExpertPlus",events:13016,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.442,paritySummary:{errors:1,warns:0,resets:13}}],downloadURL:"https://cdn.beatsaver.com/a603656eb8cdadcb6eda85ef408902c1f6125a8f.zip",coverURL:"https://cdn.beatsaver.com/a603656eb8cdadcb6eda85ef408902c1f6125a8f.jpg",previewURL:"https://cdn.beatsaver.com/a603656eb8cdadcb6eda85ef408902c1f6125a8f.mp3"}],createdAt:"2020-01-24T23:15:35.818Z",updatedAt:"2020-01-24T23:15:35.818Z",lastPublishedAt:"2020-01-24T23:15:35.818Z"},{id:"4227",name:"Aladdin - A Whole New World",description:"This song makes me smile. Such a classic Disney song.\r\nAdded easy and normal difficulties. Hard is a bit slower now . Expert is the same speed as the previous upload.",uploader:{id:4285018,name:"majorpickle",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f792",avatar:"https://cdn.beatsaver.com/avatar/450358937657671680.png",type:"DISCORD"},metadata:{bpm:123,duration:162,songName:"A Whole New World (From Disney's ''Aladdin'')",songSubName:"Lea Salonga & Brad Kane",songAuthorName:"Majorpickle",levelAuthorName:"majorpickle"},stats:{plays:0,downloads:5615,upvotes:1291,downvotes:40,score:.9161},uploaded:"2019-03-30T22:52:43Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"882f3fd9b97b4ce107c1e9e1f944c491b86c47fe",key:"4227",state:"Published",createdAt:"2019-03-30T22:52:43Z",sageScore:5,diffs:[{njs:10,offset:0,notes:236,bombs:0,obstacles:118,nps:1.591,length:304,characteristic:"Standard",difficulty:"Easy",events:540,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:148.293,paritySummary:{errors:0,warns:0,resets:0}},{njs:10,offset:0,notes:242,bombs:0,obstacles:117,nps:1.631,length:304,characteristic:"Standard",difficulty:"Normal",events:540,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:148.293,paritySummary:{errors:22,warns:0,resets:0}},{njs:10,offset:0,notes:420,bombs:0,obstacles:85,nps:2.83,length:304.125,characteristic:"Standard",difficulty:"Hard",events:539,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:148.354,paritySummary:{errors:12,warns:11,resets:0}},{njs:11,offset:0,notes:420,bombs:0,obstacles:85,nps:2.83,length:304.125,characteristic:"Standard",difficulty:"Expert",events:539,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:148.354,paritySummary:{errors:12,warns:11,resets:0}}],downloadURL:"https://cdn.beatsaver.com/882f3fd9b97b4ce107c1e9e1f944c491b86c47fe.zip",coverURL:"https://cdn.beatsaver.com/882f3fd9b97b4ce107c1e9e1f944c491b86c47fe.jpg",previewURL:"https://cdn.beatsaver.com/882f3fd9b97b4ce107c1e9e1f944c491b86c47fe.mp3"}],createdAt:"2019-03-30T22:52:43Z",updatedAt:"2019-03-30T22:52:43Z",lastPublishedAt:"2019-03-30T22:52:43Z"},{id:"2569",name:"Celtic Woman - Carol Of The Bells",description:"Hard/Expert | BPM: 190 | Length: 2:18 | Notes: 333/560\r\n\r\nMerry Christmas and Happy Holidays! \r\nHad fun charting this one, I hope you have fun playing it :D\r\n\r\n16th Map.\r\n\r\nPreview:\r\nhttps://www.youtube.com/watch?v=zh9-XC1D5aU",uploader:{id:4285825,name:"fefeland",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f3bb",avatar:"https://cdn.beatsaver.com/avatar/119360573191225344.png",type:"DISCORD"},metadata:{bpm:190,duration:139,songName:"Carol Of The Bells",songSubName:"Celtic Woman",songAuthorName:"FEFELAND",levelAuthorName:"fefeland"},stats:{plays:0,downloads:1307,upvotes:598,downvotes:8,score:.9161},uploaded:"2018-12-13T02:40:05Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1df1374196f03c9bba1aed018e3de2595f79dce1",key:"2569",state:"Published",createdAt:"2018-12-13T02:40:05Z",sageScore:5,diffs:[{njs:12,offset:0,notes:333,bombs:0,obstacles:101,nps:2.491,length:423.375,characteristic:"Standard",difficulty:"Hard",events:790,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:133.697,paritySummary:{errors:20,warns:18,resets:0}},{njs:15,offset:0,notes:560,bombs:0,obstacles:105,nps:4.189,length:423.375,characteristic:"Standard",difficulty:"Expert",events:790,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:133.697,paritySummary:{errors:15,warns:9,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1df1374196f03c9bba1aed018e3de2595f79dce1.zip",coverURL:"https://cdn.beatsaver.com/1df1374196f03c9bba1aed018e3de2595f79dce1.jpg",previewURL:"https://cdn.beatsaver.com/1df1374196f03c9bba1aed018e3de2595f79dce1.mp3"}],createdAt:"2018-12-13T02:40:05Z",updatedAt:"2018-12-13T02:40:05Z",lastPublishedAt:"2018-12-13T02:40:05Z"},{id:"16894",name:"Joe Hisaishi - Merry-Go-Round (from 'Howl's Moving Castle')",description:"The popular theme from Studio Ghibli's 'Howl's Moving Castle'. Version from Joe Hisaishi's 'Dream Songs' album.\n\nThanks to Cyrix and vaser888 for early testplays, Timbo and Uninstaller for the excellent mods, and Qwasyx for further suggestions for improvement.\n\nZelazowa#3625",uploader:{id:4284834,name:"zelazowa",uniqueSet:!0,hash:"5ea5367d16c968000632663c",avatar:"https://cdn.beatsaver.com/avatar/94962140443578368.png",type:"DISCORD"},metadata:{bpm:160,duration:312,songName:"Merry-Go-Round",songSubName:"(from 'Howl's Moving Castle')",songAuthorName:"Joe Hisaishi",levelAuthorName:"Zelazowa"},stats:{plays:0,downloads:5833,upvotes:813,downvotes:17,score:.9161},uploaded:"2021-04-11T02:32:37.687Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"d30db93f2c3c5a152b84ca364a691ef10c4efdb9",key:"16894",state:"Published",createdAt:"2021-04-11T02:32:37.687Z",sageScore:5,diffs:[{njs:10,offset:0,notes:441,bombs:0,obstacles:94,nps:1.459,length:806.257,characteristic:"Standard",difficulty:"Easy",events:1833,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:302.346,paritySummary:{errors:169,warns:8,resets:0},stars:.91},{njs:12,offset:-.75,notes:594,bombs:0,obstacles:83,nps:1.964,length:806.324,characteristic:"Standard",difficulty:"Normal",events:1833,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:302.372,paritySummary:{errors:9,warns:4,resets:0},stars:1.22},{njs:14,offset:.75,notes:847,bombs:0,obstacles:34,nps:2.801,length:806.324,characteristic:"Standard",difficulty:"Hard",events:1834,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:302.372,paritySummary:{errors:0,warns:0,resets:0},stars:1.71},{njs:16,offset:.25,notes:1075,bombs:0,obstacles:30,nps:3.555,length:806.392,characteristic:"Standard",difficulty:"Expert",events:1834,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:302.397,paritySummary:{errors:0,warns:0,resets:0},stars:2.47},{njs:18,offset:-.1,notes:1236,bombs:0,obstacles:18,nps:4.088,length:806.257,characteristic:"Standard",difficulty:"ExpertPlus",events:1833,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:302.346,paritySummary:{errors:0,warns:0,resets:0},stars:5}],downloadURL:"https://cdn.beatsaver.com/d30db93f2c3c5a152b84ca364a691ef10c4efdb9.zip",coverURL:"https://cdn.beatsaver.com/d30db93f2c3c5a152b84ca364a691ef10c4efdb9.jpg",previewURL:"https://cdn.beatsaver.com/d30db93f2c3c5a152b84ca364a691ef10c4efdb9.mp3"}],createdAt:"2021-04-11T02:32:37.687Z",updatedAt:"2021-04-11T02:32:37.687Z",lastPublishedAt:"2021-04-11T02:32:37.687Z"},{id:"c213",name:"Pegboard Nerds - Rhythm Is A Dancer (ft. Tia Simone)",description:"The Pegboard Nerds Pack was planned months before I joined AlphaBeat, so obviously I wasn't planned in for it. \n\nI still felt like mapping a Pegboard Nerds song and the new track from the Monstercat Anniversary seemed like a good fit. You could see this as some kind of bonus map for the Pack, but it wont be included in the Playlist, because having 11 songs instead of 10 feels weird. \n\nIt's not as fleshed out as the maps in the Pack because I only joined a few days ago and wanted to release this around the same time the Pack comes out.\n\nI hope you enjoy it nevertheless!\n\nPreview: https://youtu.be/HEr8pkcDM7M\n\nFeedback on Discord: nitronik.exe#7974",uploader:{id:4284201,name:"nitronikexe",uniqueSet:!0,hash:"5cff0b7798cc5a672c855d84",avatar:"https://cdn.beatsaver.com/avatar/428230049704181760.png",type:"DISCORD"},metadata:{bpm:128,duration:225,songName:"Rhythm Is A Dancer",songSubName:"(ft. Tia Simone)",songAuthorName:"Pegboard Nerds",levelAuthorName:"nitronik.exe"},stats:{plays:0,downloads:2515,upvotes:942,downvotes:23,score:.916},uploaded:"2020-07-17T14:05:23.854Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"3255f65dd6a7d4dd3c9c1cb800e854d58f5d2e88",key:"c213",state:"Published",createdAt:"2020-07-17T14:05:23.854Z",sageScore:6,diffs:[{njs:10,offset:1,notes:185,bombs:0,obstacles:0,nps:.851,length:464,characteristic:"Standard",difficulty:"Easy",events:3954,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:217.5,paritySummary:{errors:69,warns:10,resets:0}},{njs:12,offset:.5,notes:328,bombs:0,obstacles:0,nps:1.508,length:464,characteristic:"Standard",difficulty:"Normal",events:3954,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:217.5,paritySummary:{errors:6,warns:0,resets:0}},{njs:14,offset:0,notes:561,bombs:0,obstacles:0,nps:2.561,length:467.25,characteristic:"Standard",difficulty:"Hard",events:3954,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:219.023,paritySummary:{errors:4,warns:0,resets:0}},{njs:16,offset:0,notes:812,bombs:0,obstacles:0,nps:3.707,length:467.25,characteristic:"Standard",difficulty:"Expert",events:3954,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:219.023,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:-.5,notes:1150,bombs:0,obstacles:2,nps:5.251,length:467.25,characteristic:"Standard",difficulty:"ExpertPlus",events:3954,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:219.023,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/3255f65dd6a7d4dd3c9c1cb800e854d58f5d2e88.zip",coverURL:"https://cdn.beatsaver.com/3255f65dd6a7d4dd3c9c1cb800e854d58f5d2e88.jpg",previewURL:"https://cdn.beatsaver.com/3255f65dd6a7d4dd3c9c1cb800e854d58f5d2e88.mp3"}],createdAt:"2020-07-17T14:05:23.854Z",updatedAt:"2020-07-17T14:05:23.854Z",lastPublishedAt:"2020-07-17T14:05:23.854Z"},{id:"6e1f",name:"Good Times Roll - GRiZ x Big Gigantic",description:"Huge thanks to Awfulnaut for letting me use his existing Good Times Roll map to create this updated version. <3",uploader:{id:4285169,name:"ryger",uniqueSet:!0,hash:"5cff0b7798cc5a672c855a42",avatar:"https://cdn.beatsaver.com/avatar/169266024502263808.png",type:"DISCORD"},metadata:{bpm:200,duration:146,songName:"Good Times Roll",songSubName:"",songAuthorName:"Griz x Big Gigantic",levelAuthorName:"Awfulnaut, Ryger"},stats:{plays:0,downloads:639,upvotes:434,downvotes:2,score:.916},uploaded:"2019-11-04T02:30:11.352Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6cb7b184a496b917739bc59a9012029ebb9e340c",key:"6e1f",state:"Published",createdAt:"2019-11-04T02:30:11.352Z",sageScore:4,diffs:[{njs:10,offset:0,notes:354,bombs:0,obstacles:11,nps:2.551,length:462.5,characteristic:"Standard",difficulty:"Hard",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:138.75,paritySummary:{errors:13,warns:6,resets:0}},{njs:14,offset:0,notes:518,bombs:0,obstacles:12,nps:3.733,length:462.5,characteristic:"Standard",difficulty:"Expert",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:138.75,paritySummary:{errors:10,warns:21,resets:0}},{njs:15,offset:.5,notes:652,bombs:0,obstacles:10,nps:4.679,length:464.5,characteristic:"Standard",difficulty:"ExpertPlus",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:139.35,paritySummary:{errors:33,warns:19,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6cb7b184a496b917739bc59a9012029ebb9e340c.zip",coverURL:"https://cdn.beatsaver.com/6cb7b184a496b917739bc59a9012029ebb9e340c.jpg",previewURL:"https://cdn.beatsaver.com/6cb7b184a496b917739bc59a9012029ebb9e340c.mp3"}],createdAt:"2019-11-04T02:30:11.352Z",updatedAt:"2019-11-04T02:30:11.352Z",lastPublishedAt:"2019-11-04T02:30:11.352Z"},{id:"5b95",name:"The Living Tombstone - I Can't Fix You",description:"This is probably on the easier end of Expert+ so it should be enjoyable for those looking to step up from Expert after a little practice. This song has officially been tested to oblivion, but I am happy to hear any feedback.\n\nDifficulty: Expert+\nBPM: 174\nNotes: 1212\nNJS: 15\nNPS: 4.65\nSong Duration: 4:21\n\nPreview video can be found here: https://youtu.be/EkcKRlikwMY\n\nSpecial Thanks to Kival Evan for their playtesting and feedback!",uploader:{id:34679,name:"lukemortora",uniqueSet:!0,hash:"5cff0b7798cc5a672c855c16",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855c16?d=retro",type:"SIMPLE"},metadata:{bpm:174,duration:261,songName:"I Can't Fix You",songSubName:"",songAuthorName:"The Living Tombstone",levelAuthorName:"LukeMortora"},stats:{plays:0,downloads:1353,upvotes:1043,downvotes:28,score:.9159},uploaded:"2019-08-09T15:10:13.751Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d074bc64340208a777eea440ba5e5a24f9d65d54",key:"5b95",state:"Published",createdAt:"2019-08-09T15:10:13.751Z",sageScore:6,diffs:[{njs:15,offset:0,notes:1212,bombs:117,obstacles:26,nps:4.971,length:707,characteristic:"Standard",difficulty:"ExpertPlus",events:2214,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:243.793,paritySummary:{errors:114,warns:78,resets:11}}],downloadURL:"https://cdn.beatsaver.com/d074bc64340208a777eea440ba5e5a24f9d65d54.zip",coverURL:"https://cdn.beatsaver.com/d074bc64340208a777eea440ba5e5a24f9d65d54.jpg",previewURL:"https://cdn.beatsaver.com/d074bc64340208a777eea440ba5e5a24f9d65d54.mp3"}],createdAt:"2019-08-09T15:10:13.751Z",updatedAt:"2019-08-09T15:10:13.751Z",lastPublishedAt:"2019-08-09T15:10:13.751Z"},{id:"3c1d",name:"Sound of an Orchestra - MIKA",description:"Expert Playthrough : https://youtu.be/Ql0bAjfNQ5M",uploader:{id:13320,name:"novashaft",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ee55",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee55?d=retro",type:"SIMPLE"},metadata:{bpm:127,duration:180,songName:"Sound Of An Orchestra",songSubName:"MIKA",songAuthorName:"NovaShaft",levelAuthorName:"novashaft"},stats:{plays:0,downloads:2681,upvotes:693,downvotes:12,score:.9159},uploaded:"2019-03-06T16:56:54Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ab5ec7d8c0976c8acb1ed48889fce51666fabf45",key:"3c1d",state:"Published",createdAt:"2019-03-06T16:56:54Z",sageScore:5,diffs:[{njs:11,offset:0,notes:325,bombs:0,obstacles:24,nps:1.869,length:368,characteristic:"Standard",difficulty:"Normal",events:869,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:173.858,paritySummary:{errors:18,warns:7,resets:0}},{njs:13,offset:0,notes:386,bombs:0,obstacles:24,nps:2.22,length:368,characteristic:"Standard",difficulty:"Hard",events:869,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:173.858,paritySummary:{errors:36,warns:32,resets:0}},{njs:15,offset:0,notes:482,bombs:0,obstacles:24,nps:2.772,length:368,characteristic:"Standard",difficulty:"Expert",events:869,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:173.858,paritySummary:{errors:40,warns:45,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ab5ec7d8c0976c8acb1ed48889fce51666fabf45.zip",coverURL:"https://cdn.beatsaver.com/ab5ec7d8c0976c8acb1ed48889fce51666fabf45.jpg",previewURL:"https://cdn.beatsaver.com/ab5ec7d8c0976c8acb1ed48889fce51666fabf45.mp3"}],createdAt:"2019-03-06T16:56:54Z",updatedAt:"2019-03-06T16:56:54Z",lastPublishedAt:"2019-03-06T16:56:54Z"},{id:"ae9d",name:"A Cruel Angel's Thesis [22/7 Soundtrack] - Sakura Fujima",description:"A Cruel Angel's Thesis (Zankoku na Tenshi no Thesis) as covered by Sakura Fujima (CV: Sally Amaki.) from 22/7. It was originally sung by Takahashi Yoko as the opening of the anime Neon Genesis Evangelion. ",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:128,duration:92,songName:"A Cruel Angel's Thesis",songSubName:"",songAuthorName:"Sakura Fujima",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:4289,upvotes:1204,downvotes:36,score:.9158},uploaded:"2020-06-05T07:07:17.017Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"40e47564d01e50840b0aa9a3191ff09a2e5b56a1",key:"ae9d",state:"Published",createdAt:"2020-06-05T07:07:17.017Z",sageScore:4,diffs:[{njs:12,offset:0,notes:222,bombs:0,obstacles:32,nps:2.536,length:186.75,characteristic:"Standard",difficulty:"Hard",events:2286,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.539,paritySummary:{errors:2,warns:2,resets:0}},{njs:14,offset:0,notes:347,bombs:0,obstacles:32,nps:3.932,length:188.25,characteristic:"Standard",difficulty:"Expert",events:2286,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:88.242,paritySummary:{errors:0,warns:2,resets:0}},{njs:16,offset:-.2,notes:413,bombs:0,obstacles:22,nps:4.68,length:188.25,characteristic:"Standard",difficulty:"ExpertPlus",events:2280,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:88.242,paritySummary:{errors:0,warns:3,resets:0}}],downloadURL:"https://cdn.beatsaver.com/40e47564d01e50840b0aa9a3191ff09a2e5b56a1.zip",coverURL:"https://cdn.beatsaver.com/40e47564d01e50840b0aa9a3191ff09a2e5b56a1.jpg",previewURL:"https://cdn.beatsaver.com/40e47564d01e50840b0aa9a3191ff09a2e5b56a1.mp3"}],createdAt:"2020-06-05T07:07:17.017Z",updatedAt:"2020-06-05T07:07:17.017Z",lastPublishedAt:"2020-06-05T07:07:17.017Z"},{id:"65b7",name:"My First Kiss - Nightcore",description:"Youtube Preview: https://youtu.be/KxdCEgDG-AI",uploader:{id:23751,name:"monteblanco",uniqueSet:!0,hash:"5cff0b7798cc5a672c855ef5",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855ef5?d=retro",type:"SIMPLE"},metadata:{bpm:174.803,duration:156,songName:"My First Kiss - Nightcore",songSubName:"",songAuthorName:"Nightcore",levelAuthorName:"Monteblanco"},stats:{plays:0,downloads:709,upvotes:713,downvotes:13,score:.9158},uploaded:"2019-09-25T01:39:37.237Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5723e29f0a39dcec76926c1fa8baf6e9a32c185b",key:"65b7",state:"Published",createdAt:"2019-09-25T01:39:37.237Z",sageScore:4,diffs:[{njs:15,offset:0,notes:623,bombs:4,obstacles:48,nps:4.134,length:439,characteristic:"Standard",difficulty:"Expert",events:743,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:150.684,paritySummary:{errors:0,warns:0,resets:1}}],downloadURL:"https://cdn.beatsaver.com/5723e29f0a39dcec76926c1fa8baf6e9a32c185b.zip",coverURL:"https://cdn.beatsaver.com/5723e29f0a39dcec76926c1fa8baf6e9a32c185b.jpg",previewURL:"https://cdn.beatsaver.com/5723e29f0a39dcec76926c1fa8baf6e9a32c185b.mp3"}],createdAt:"2019-09-25T01:39:37.237Z",updatedAt:"2019-09-25T01:39:37.237Z",lastPublishedAt:"2019-09-25T01:39:37.237Z"},{id:"4a4c",name:"[Anniversary] The Thrill - Nero, Porter Robinson [Ruckus]",description:"Part of the Anniversary Song Pack",uploader:{id:37070,name:"anniversaryteam",uniqueSet:!0,hash:"5cff0b7798cc5a672c8565a3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro",type:"SIMPLE"},metadata:{bpm:160,duration:204,songName:"The Thrill (Porter Robinson Remix)",songSubName:"NERO, Porter Robinson",songAuthorName:"Ruckus",levelAuthorName:"AnniversaryTeam"},stats:{plays:0,downloads:2144,upvotes:1321,downvotes:42,score:.9158},uploaded:"2019-05-03T14:13:21Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"68496811309fe62303edde686eb160f8e45aa9ce",key:"4a4c",state:"Published",createdAt:"2019-05-03T14:13:21Z",sageScore:7,diffs:[{njs:10,offset:0,notes:232,bombs:0,obstacles:70,nps:1.197,length:516.688,characteristic:"Standard",difficulty:"Easy",events:9122,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.758,paritySummary:{errors:17,warns:7,resets:0}},{njs:12,offset:0,notes:489,bombs:0,obstacles:60,nps:2.524,length:516.692,characteristic:"Standard",difficulty:"Normal",events:9127,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.76,paritySummary:{errors:29,warns:20,resets:0}},{njs:13,offset:0,notes:635,bombs:0,obstacles:64,nps:3.274,length:517.188,characteristic:"Standard",difficulty:"Hard",events:9117,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.945,paritySummary:{errors:34,warns:35,resets:0}},{njs:18,offset:0,notes:1128,bombs:0,obstacles:36,nps:5.816,length:517.188,characteristic:"Standard",difficulty:"Expert",events:9117,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.945,paritySummary:{errors:36,warns:35,resets:0}},{njs:20,offset:0,notes:1115,bombs:0,obstacles:46,nps:5.749,length:517.188,characteristic:"Standard",difficulty:"ExpertPlus",events:9117,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.945,paritySummary:{errors:49,warns:73,resets:0}}],downloadURL:"https://cdn.beatsaver.com/68496811309fe62303edde686eb160f8e45aa9ce.zip",coverURL:"https://cdn.beatsaver.com/68496811309fe62303edde686eb160f8e45aa9ce.jpg",previewURL:"https://cdn.beatsaver.com/68496811309fe62303edde686eb160f8e45aa9ce.mp3"}],createdAt:"2019-05-03T14:13:21Z",updatedAt:"2019-05-03T14:13:21Z",lastPublishedAt:"2019-05-03T14:13:21Z"},{id:"a692",name:"[Noodle Touhou] Tare - VOLUPTE",description:"Easy, normal, hard, expert, expert+\r\n\r\nThis map is part of the first Touhou map pack brought to you by the Ramen Noodle mapper group! It contains all sorts of covers, arrangements and remix of the original Touhou soundtrack. We hope you enjoy it a lot!",uploader:{id:4235138,name:"CyanSnow",uniqueSet:!0,hash:"5cff0b7698cc5a672c8543ac",avatar:"https://cdn.beatsaver.com/avatar/154341137694326784.png",type:"DISCORD"},metadata:{bpm:128,duration:184,songName:"VOLUPTE",songSubName:"",songAuthorName:"Tare",levelAuthorName:"Aeroluna & CyanSnow"},stats:{plays:0,downloads:2792,upvotes:638,downvotes:10,score:.9156},uploaded:"2020-05-15T18:20:58.233Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"01ce5a3adc19e360ba0ffd8347f91b5dc974eb7c",key:"a692",state:"Published",createdAt:"2020-05-15T18:20:58.233Z",sageScore:6,diffs:[{njs:12,offset:.5,notes:254,bombs:0,obstacles:0,nps:1.411,length:384,characteristic:"Standard",difficulty:"Easy",events:13825,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:180,paritySummary:{errors:6,warns:0,resets:0}},{njs:12,offset:.5,notes:404,bombs:0,obstacles:0,nps:2.244,length:384,characteristic:"Standard",difficulty:"Normal",events:13825,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:180,paritySummary:{errors:1,warns:0,resets:0}},{njs:13,offset:.25,notes:541,bombs:0,obstacles:0,nps:3.006,length:384,characteristic:"Standard",difficulty:"Hard",events:13825,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:180,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:-.25,notes:763,bombs:0,obstacles:0,nps:4.236,length:384.25,characteristic:"Standard",difficulty:"Expert",events:13825,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:180.117,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:-.5,notes:1009,bombs:0,obstacles:0,nps:5.602,length:384.25,characteristic:"Standard",difficulty:"ExpertPlus",events:13825,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:180.117,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/01ce5a3adc19e360ba0ffd8347f91b5dc974eb7c.zip",coverURL:"https://cdn.beatsaver.com/01ce5a3adc19e360ba0ffd8347f91b5dc974eb7c.jpg",previewURL:"https://cdn.beatsaver.com/01ce5a3adc19e360ba0ffd8347f91b5dc974eb7c.mp3"}],createdAt:"2020-05-15T18:20:58.233Z",updatedAt:"2020-05-15T18:20:58.233Z",lastPublishedAt:"2020-05-15T18:20:58.233Z"},{id:"9fab",name:"Doom Crossing: Eternal Horizons",description:"3 Difficulties Included! \n\nAnother side release of mine! This song's chorus is so catchy, it got stuck in my head for days! Also I've been playing a ton of Animal Crossing ^^ \n\nDoom Crossing: Eternal Horizons by The Chalkeaters ft. Natalia Natchan\n\nBPM: 160\n\nLights by Loloppe's autolighter, Lolighter! With some manual touch ups!",uploader:{id:4289037,name:"mystikmol",uniqueSet:!0,hash:"5cff0b7298cc5a672c84eb52",avatar:"https://cdn.beatsaver.com/avatar/67941140636114944.png",type:"DISCORD"},metadata:{bpm:160,duration:83,songName:"Doom Crossing: Eternal Horizons",songSubName:"Short ver.",songAuthorName:"The Chalkeaters ft. Natalia Natchan",levelAuthorName:"Mystikmol"},stats:{plays:0,downloads:3574,upvotes:1563,downvotes:55,score:.9156},uploaded:"2020-04-27T15:22:22.520Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f8b391a5fd0922062f7e3c10ccc1967f91da20a2",key:"9fab",state:"Published",createdAt:"2020-04-27T15:22:22.520Z",sageScore:3,diffs:[{njs:12,offset:0,notes:153,bombs:0,obstacles:0,nps:2.082,length:196,characteristic:"Standard",difficulty:"Normal",events:1926,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:73.5,paritySummary:{errors:0,warns:0,resets:0}},{njs:15,offset:0,notes:261,bombs:0,obstacles:1,nps:3.551,length:196,characteristic:"Standard",difficulty:"Hard",events:1926,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:73.5,paritySummary:{errors:0,warns:0,resets:0}},{njs:20,offset:0,notes:491,bombs:0,obstacles:0,nps:6.68,length:196,characteristic:"Standard",difficulty:"ExpertPlus",events:1927,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:73.5,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f8b391a5fd0922062f7e3c10ccc1967f91da20a2.zip",coverURL:"https://cdn.beatsaver.com/f8b391a5fd0922062f7e3c10ccc1967f91da20a2.jpg",previewURL:"https://cdn.beatsaver.com/f8b391a5fd0922062f7e3c10ccc1967f91da20a2.mp3"}],createdAt:"2020-04-27T15:22:22.520Z",updatedAt:"2020-04-27T15:22:22.520Z",lastPublishedAt:"2020-04-27T15:22:22.520Z"},{id:"12377",name:"Sangatsu no Phantasia - Pastel Rain",description:"use CHROMA mod for\n- cool lights\n- if you dont have chroma it'll just be greyed out PepeLaugh\n\nHappy New Years\n\nBPM | 135\nExpert+\nExpert\nHard\n\nThanks JohnnyDee for the playtest, what a qt\n\npreview: https://www.youtube.com/watch?v=hGq0EEsqgQQ\n\nthank you for playing\n\nDM any feedback on Discord\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:135,duration:212,songName:"Pastel Rain",songSubName:"",songAuthorName:"Sangatsu no Phantasia",levelAuthorName:"ETAN"},stats:{plays:0,downloads:4912,upvotes:776,downvotes:16,score:.9155},uploaded:"2021-01-03T08:08:53.577Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"2c01774fdb9c4bcc53df1707ade85cea6f043477",key:"12377",state:"Published",createdAt:"2021-01-03T08:08:53.577Z",sageScore:5,diffs:[{njs:12,offset:.5,notes:576,bombs:0,obstacles:58,nps:2.775,length:467,characteristic:"Standard",difficulty:"Hard",events:16659,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:207.556,paritySummary:{errors:0,warns:0,resets:0}},{njs:15,offset:0,notes:882,bombs:0,obstacles:58,nps:4.249,length:467,characteristic:"Standard",difficulty:"Expert",events:16659,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:207.556,paritySummary:{errors:0,warns:1,resets:0}},{njs:19,offset:-.5,notes:1180,bombs:0,obstacles:57,nps:5.685,length:467,characteristic:"Standard",difficulty:"ExpertPlus",events:16659,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:207.556,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/2c01774fdb9c4bcc53df1707ade85cea6f043477.zip",coverURL:"https://cdn.beatsaver.com/2c01774fdb9c4bcc53df1707ade85cea6f043477.jpg",previewURL:"https://cdn.beatsaver.com/2c01774fdb9c4bcc53df1707ade85cea6f043477.mp3"}],createdAt:"2021-01-03T08:08:53.577Z",updatedAt:"2021-01-03T08:08:53.577Z",lastPublishedAt:"2021-01-03T08:08:53.577Z"},{id:"1814",name:"Ghost",description:"???? ???? ? ????? ???? ?????????~\r\n\r\nEDIT: Fixed a double-down note.",uploader:{id:10509,name:"krydar",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fe84",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84fe84?d=retro",type:"SIMPLE"},metadata:{bpm:120,duration:262,songName:"Ghost",songSubName:"Mystery Skulls",songAuthorName:"Kry",levelAuthorName:"Krydar"},stats:{plays:0,downloads:509,upvotes:1012,downvotes:27,score:.9155},uploaded:"2018-09-30T15:03:57Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9430ecb46ce581ac51481d3a61e6fe3356dd4e61",key:"1814",state:"Published",createdAt:"2018-09-30T15:03:57Z",sageScore:5,diffs:[{njs:14,offset:0,notes:847,bombs:0,obstacles:138,nps:3.785,length:447.5,characteristic:"Standard",difficulty:"ExpertPlus",events:2331,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:223.75,paritySummary:{errors:35,warns:17,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9430ecb46ce581ac51481d3a61e6fe3356dd4e61.zip",coverURL:"https://cdn.beatsaver.com/9430ecb46ce581ac51481d3a61e6fe3356dd4e61.jpg",previewURL:"https://cdn.beatsaver.com/9430ecb46ce581ac51481d3a61e6fe3356dd4e61.mp3"}],createdAt:"2018-09-30T15:03:57Z",updatedAt:"2018-09-30T15:03:57Z",lastPublishedAt:"2018-09-30T15:03:57Z"},{id:"6773",name:"Survive Said The Prophet - MUKANJYO - Vinland Saga OP song",description:"Youtube Preview: https://youtu.be/EHrf40IwTR8",uploader:{id:23751,name:"monteblanco",uniqueSet:!0,hash:"5cff0b7798cc5a672c855ef5",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855ef5?d=retro",type:"SIMPLE"},metadata:{bpm:190,duration:188,songName:"Survive Said The Prophet",songSubName:"",songAuthorName:"MUKANJYO",levelAuthorName:"Monteblanco"},stats:{plays:0,downloads:924,upvotes:561,downvotes:7,score:.9154},uploaded:"2019-10-03T00:15:52.884Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"cee8a59f1ec8c8cd4672c5428dda6999777870ff",key:"6773",state:"Published",createdAt:"2019-10-03T00:15:52.884Z",sageScore:5,diffs:[{njs:16,offset:0,notes:975,bombs:8,obstacles:6,nps:5.305,length:582,characteristic:"Standard",difficulty:"ExpertPlus",events:1135,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.789,paritySummary:{errors:0,warns:0,resets:1}}],downloadURL:"https://cdn.beatsaver.com/cee8a59f1ec8c8cd4672c5428dda6999777870ff.zip",coverURL:"https://cdn.beatsaver.com/cee8a59f1ec8c8cd4672c5428dda6999777870ff.jpg",previewURL:"https://cdn.beatsaver.com/cee8a59f1ec8c8cd4672c5428dda6999777870ff.mp3"}],createdAt:"2019-10-03T00:15:52.884Z",updatedAt:"2019-10-03T00:15:52.884Z",lastPublishedAt:"2019-10-03T00:15:52.884Z"},{id:"5281",name:"TheFatRat & Phaera - Sunlight",description:"Aww Yeah, it's glitch-hop baby! Colors of the map are Orange(ish) and Dark Blue (similar to the cover image). I had a lot of fun making this map and I hope you enjoy as well!\r\n\r\nPreview: https://www.youtube.com/watch?v=MLAjVcqpBlY",uploader:{id:57657,name:"pixelguymm",uniqueSet:!0,hash:"5cff0b7698cc5a672c8541a8",avatar:"https://cdn.beatsaver.com/avatar/434386941547511818.png",type:"DISCORD"},metadata:{bpm:106,duration:171,songName:"Sunlight",songSubName:"TheFatRat & Phaera",songAuthorName:"Pixelguy",levelAuthorName:"pixelguymm"},stats:{plays:0,downloads:701,upvotes:586,downvotes:8,score:.9154},uploaded:"2019-06-09T06:35:30Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"2d0ba779b5c8217f06a4c1267e8d872d4b46a4bb",key:"5281",state:"Published",createdAt:"2019-06-09T06:35:30Z",sageScore:4,diffs:[{njs:14,offset:0,notes:644,bombs:8,obstacles:36,nps:3.954,length:287.75,characteristic:"Standard",difficulty:"Expert",events:814,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:162.877,paritySummary:{errors:2,warns:2,resets:4}}],downloadURL:"https://cdn.beatsaver.com/2d0ba779b5c8217f06a4c1267e8d872d4b46a4bb.zip",coverURL:"https://cdn.beatsaver.com/2d0ba779b5c8217f06a4c1267e8d872d4b46a4bb.jpg",previewURL:"https://cdn.beatsaver.com/2d0ba779b5c8217f06a4c1267e8d872d4b46a4bb.mp3"}],createdAt:"2019-06-09T06:35:30Z",updatedAt:"2019-06-09T06:35:30Z",lastPublishedAt:"2019-06-09T06:35:30Z"},{id:"553e",name:"Happy Together (V2)",description:"Old map was borked since the last update, so here is a remade version, some patterns changed for more smooth, hard difficulty added.\n\nLights will feel old compare to what I do now",uploader:{id:4235153,name:"skeelie",uniqueSet:!0,hash:"5cff0b7698cc5a672c85507f",avatar:"https://cdn.beatsaver.com/avatar/119467937928052748.png",type:"DISCORD"},metadata:{bpm:121.2,duration:173,songName:"Happy Together",songSubName:"",songAuthorName:"The Turtles",levelAuthorName:"Skeelie"},stats:{plays:0,downloads:3463,upvotes:656,downvotes:11,score:.9153},uploaded:"2019-07-01T16:58:53.827Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"99d1d214dde61f736d5efd47da936476a5bd1e4e",key:"553e",state:"Published",createdAt:"2019-07-01T16:58:53.827Z",sageScore:3,diffs:[{njs:11,offset:0,notes:412,bombs:0,obstacles:0,nps:2.515,length:330.966,characteristic:"Standard",difficulty:"Hard",events:2137,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.845,paritySummary:{errors:32,warns:17,resets:0}},{njs:13,offset:0,notes:580,bombs:0,obstacles:0,nps:3.54,length:330.966,characteristic:"Standard",difficulty:"Expert",events:2137,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.845,paritySummary:{errors:52,warns:26,resets:0}}],downloadURL:"https://cdn.beatsaver.com/99d1d214dde61f736d5efd47da936476a5bd1e4e.zip",coverURL:"https://cdn.beatsaver.com/99d1d214dde61f736d5efd47da936476a5bd1e4e.jpg",previewURL:"https://cdn.beatsaver.com/99d1d214dde61f736d5efd47da936476a5bd1e4e.mp3"}],createdAt:"2019-07-01T16:58:53.827Z",updatedAt:"2019-07-01T16:58:53.827Z",lastPublishedAt:"2019-07-01T16:58:53.827Z"},{id:"540b",name:"Keep The Rave Alive - Jauz x Laser Laser Laser (collab w/Heisenberg)",description:"Requires Mapping Extensions Mod. Do not use Left-Handed/Mirror mode!\n\n128 BPM / 5:00 Runtime\nHard - 488 Notes\nExpert - 794 Notes\nExpert+ - 1157 Notes\n\nGameplay: https://youtu.be/lxfCwV_NZCA",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:128,duration:300,songName:"Keep The Rave Alive",songSubName:"Lazer Lazer Lazer",songAuthorName:"Jauz",levelAuthorName:"Skyler Wallace & Heisenberg"},stats:{plays:0,downloads:2589,upvotes:1571,downvotes:56,score:.9153},uploaded:"2019-06-22T18:12:49.515Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"511bfb7e192faa0615691c4e4e8d21bc162a84cf",key:"540b",state:"Published",createdAt:"2019-06-22T18:12:49.515Z",sageScore:8,diffs:[{njs:12,offset:1,notes:488,bombs:0,obstacles:1105,nps:1.712,length:608,characteristic:"Standard",difficulty:"Hard",events:16325,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:285,paritySummary:{errors:74,warns:77,resets:0}},{njs:16,offset:0,notes:794,bombs:8,obstacles:1105,nps:2.786,length:608,characteristic:"Standard",difficulty:"Expert",events:16325,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:285,paritySummary:{errors:51,warns:62,resets:4}},{njs:16,offset:0,notes:1157,bombs:0,obstacles:1105,nps:4.06,length:608,characteristic:"Standard",difficulty:"ExpertPlus",events:16325,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:285,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:16325,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:0,notes:0,bombs:0,obstacles:1105,nps:0,length:0,characteristic:"Lightshow",difficulty:"Normal",events:16325,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/511bfb7e192faa0615691c4e4e8d21bc162a84cf.zip",coverURL:"https://cdn.beatsaver.com/511bfb7e192faa0615691c4e4e8d21bc162a84cf.jpg",previewURL:"https://cdn.beatsaver.com/511bfb7e192faa0615691c4e4e8d21bc162a84cf.mp3"}],createdAt:"2019-06-22T18:12:49.515Z",updatedAt:"2019-06-22T18:12:49.515Z",lastPublishedAt:"2019-06-22T18:12:49.515Z"},{id:"321d",name:"Black Bullet [Black Bullet Opening] - fripSide",description:"Black Bullet, the opening song for the anime of the same name by Fripside!",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:155,duration:262,songName:"Black Bullet",songSubName:"FripSide",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:1907,upvotes:880,downvotes:21,score:.9152},uploaded:"2019-01-29T15:26:42Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9e25062d995e1e0958b4eba4e7ba56f053e00b2c",key:"321d",state:"Published",createdAt:"2019-01-29T15:26:42Z",sageScore:6,diffs:[{njs:15,offset:0,notes:1252,bombs:0,obstacles:44,nps:4.878,length:663,characteristic:"Standard",difficulty:"Expert",events:3992,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:256.645,paritySummary:{errors:80,warns:87,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9e25062d995e1e0958b4eba4e7ba56f053e00b2c.zip",coverURL:"https://cdn.beatsaver.com/9e25062d995e1e0958b4eba4e7ba56f053e00b2c.jpg",previewURL:"https://cdn.beatsaver.com/9e25062d995e1e0958b4eba4e7ba56f053e00b2c.mp3"}],createdAt:"2019-01-29T15:26:42Z",updatedAt:"2019-01-29T15:26:42Z",lastPublishedAt:"2019-01-29T15:26:42Z"},{id:"1e9b",name:"Du Hast by Rammstein (Kole Edit) [One Saber]",description:"UPDATED 6th november 2018: There were some misdirected notes and some minor flow issues that has now been corrected.You should now be able to get Full Combo much more intuitively! Please download again if you've played the map before as the scoreboards are reset. Sorry for the trouble!\r\n\r\nCan't have enough of Du Hast by Rammstein? Good! Cause here is a One Saber version of that song! If you play the regular (Dual Saber) version of this map then you'll find it familiar to that version.\r\n\r\nSong has been edited (shortened) to be tighter and not too repetitive.\r\n\r\n!! ONE SABER MODE MAP, start it from the ONE SABER MENU for best experience! !!\r\n\r\nPreview:\r\nhttps://youtu.be/wTAUDviTUcQ\r\n\r\nBPM: 125.09\r\nDuration: 2:57\r\nHard, Expert and Expert+ difficulties.\r\n\r\nHard: 331 notes, 0 obstacles, 0 mines\r\nExpert: 502 notes, 0 obstacles, 0 mines\r\nExpert+: 646 notes, 0 obstacles, 0 mines\r\n\r\nThanks to Hen Tie, ManDynasty, Red Magi and Civ for playtesting!\r\n\r\nRegular (Dual Saber) version here:\r\nhttps://beatsaver.com/browse/detail/6707-6348\r\n\r\nEnjoy!",uploader:{id:4285318,name:"kolezan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fcbb",avatar:"https://cdn.beatsaver.com/avatar/220513618763055106.png",type:"DISCORD"},metadata:{bpm:125,duration:177,songName:"Du Hast (One Saber)",songSubName:"Rammstein",songAuthorName:"Level by Kolezan",levelAuthorName:"Kolezan"},stats:{plays:0,downloads:2751,upvotes:879,downvotes:21,score:.9152},uploaded:"2018-11-06T21:46:57Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e6cb01196d2256586c805df1baf910f8036005a7",key:"1e9b",state:"Published",createdAt:"2018-11-06T21:46:57Z",sageScore:4,diffs:[{njs:12,offset:0,notes:331,bombs:0,obstacles:0,nps:1.96,length:352,characteristic:"OneSaber",difficulty:"Hard",events:581,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.96,paritySummary:{errors:40,warns:38,resets:0}},{njs:12,offset:0,notes:501,bombs:0,obstacles:0,nps:2.967,length:352,characteristic:"OneSaber",difficulty:"Expert",events:581,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.96,paritySummary:{errors:42,warns:50,resets:0}},{njs:12,offset:0,notes:643,bombs:0,obstacles:0,nps:3.808,length:352,characteristic:"OneSaber",difficulty:"ExpertPlus",events:581,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.96,paritySummary:{errors:47,warns:51,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e6cb01196d2256586c805df1baf910f8036005a7.zip",coverURL:"https://cdn.beatsaver.com/e6cb01196d2256586c805df1baf910f8036005a7.jpg",previewURL:"https://cdn.beatsaver.com/e6cb01196d2256586c805df1baf910f8036005a7.mp3"}],createdAt:"2018-11-06T21:46:57Z",updatedAt:"2018-11-06T21:46:57Z",lastPublishedAt:"2018-11-06T21:46:57Z"},{id:"68a4",name:"Paramore - Misery Business",description:"A true story about the hardships of young love, from one of the leading pioneers of alternative rock. The patterns aim to capture the same fiery energy and jumpiness from its prime. Cheers!\n\nINFO:\nBPM: 173.01\nLength: 3:19\nAll Standard Difficulties\n\nCONTRIBUTORS:\nKival Evan - Tester (Expert+)\nHelenCarnate - Tester (Expert)\nCyanSnow - Tester (Expert+)\nLaser Wrath - Tester (All Standard Difficulties)",uploader:{id:4284238,name:"officialMECH",uniqueSet:!0,hash:"5d51c536c53019000612f266",avatar:"https://cdn.beatsaver.com/avatar/386290335401246721.png",type:"DISCORD"},metadata:{bpm:173.01,duration:200,songName:"Misery Business",songSubName:"",songAuthorName:"Paramore",levelAuthorName:"officialMECH"},stats:{plays:0,downloads:5443,upvotes:1673,downvotes:62,score:.9151},uploaded:"2019-10-08T16:59:29.069Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a46e07bb84c22dd1f371df0876fd828195b2c8ef",key:"68a4",state:"Published",createdAt:"2019-10-08T16:59:29.069Z",sageScore:8,diffs:[{njs:11,offset:0,notes:272,bombs:0,obstacles:38,nps:1.406,length:558,characteristic:"Standard",difficulty:"Easy",events:5e3,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.515,paritySummary:{errors:20,warns:13,resets:0}},{njs:11,offset:0,notes:360,bombs:0,obstacles:38,nps:1.86,length:558,characteristic:"Standard",difficulty:"Normal",events:5e3,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.515,paritySummary:{errors:54,warns:45,resets:0}},{njs:12,offset:0,notes:572,bombs:0,obstacles:38,nps:2.956,length:558,characteristic:"Standard",difficulty:"Hard",events:5e3,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.515,paritySummary:{errors:12,warns:8,resets:0}},{njs:15,offset:1,notes:946,bombs:2,obstacles:38,nps:4.889,length:558,characteristic:"Standard",difficulty:"Expert",events:5e3,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.515,paritySummary:{errors:6,warns:0,resets:0}},{njs:18,offset:.5,notes:1240,bombs:4,obstacles:38,nps:6.408,length:558,characteristic:"Standard",difficulty:"ExpertPlus",events:5e3,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.515,paritySummary:{errors:2,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a46e07bb84c22dd1f371df0876fd828195b2c8ef.zip",coverURL:"https://cdn.beatsaver.com/a46e07bb84c22dd1f371df0876fd828195b2c8ef.jpg",previewURL:"https://cdn.beatsaver.com/a46e07bb84c22dd1f371df0876fd828195b2c8ef.mp3"}],createdAt:"2019-10-08T16:59:29.069Z",updatedAt:"2019-10-08T16:59:29.069Z",lastPublishedAt:"2019-10-08T16:59:29.069Z"},{id:"225",name:"Clint Eastwood - Gorillaz",description:"Easy/Normal/Hard/Expert - Audio is as loud without clipping I swear! 100% Expert Playthrough: https://bit.ly/2LuFcxq\r\n\r\nHave fun! =D\r\n\r\n- Freeek =)",uploader:{id:47581,name:"freeek",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8ad",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8ad?d=retro",type:"SIMPLE"},metadata:{bpm:84,duration:200,songName:"Clint Eastwood",songSubName:"Gorillaz",songAuthorName:"unknow",levelAuthorName:"freeek"},stats:{plays:0,downloads:7585,upvotes:7017,downvotes:404,score:.9151},uploaded:"2018-05-25T20:58:36Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"507f0e09326d37e09dca08e3c2597f027dbe1940",key:"225",state:"Published",createdAt:"2018-05-25T20:58:36Z",sageScore:6,diffs:[{njs:10,offset:0,notes:297,bombs:0,obstacles:57,nps:1.575,length:264,characteristic:"Standard",difficulty:"Easy",events:1281,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.571,paritySummary:{errors:0,warns:0,resets:0}},{njs:10,offset:0,notes:358,bombs:0,obstacles:62,nps:1.906,length:263,characteristic:"Standard",difficulty:"Normal",events:1281,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:187.857,paritySummary:{errors:37,warns:18,resets:0}},{njs:10,offset:0,notes:514,bombs:0,obstacles:67,nps:2.721,length:264.5,characteristic:"Standard",difficulty:"Hard",events:1281,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.929,paritySummary:{errors:65,warns:85,resets:0}},{njs:10,offset:0,notes:681,bombs:0,obstacles:67,nps:3.473,length:274.5,characteristic:"Standard",difficulty:"Expert",events:1281,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:196.071,paritySummary:{errors:97,warns:102,resets:0}}],downloadURL:"https://cdn.beatsaver.com/507f0e09326d37e09dca08e3c2597f027dbe1940.zip",coverURL:"https://cdn.beatsaver.com/507f0e09326d37e09dca08e3c2597f027dbe1940.jpg",previewURL:"https://cdn.beatsaver.com/507f0e09326d37e09dca08e3c2597f027dbe1940.mp3"}],createdAt:"2018-05-25T20:58:36Z",updatedAt:"2018-05-25T20:58:36Z",lastPublishedAt:"2018-05-25T20:58:36Z"},{id:"3dd6",name:"Saeed - Infected Mushroom",description:"Collab between Bomb, Heisenberg, Rexxz and Ruckus\r\nBomb: 0 - 1:32\r\nHeisenberg: 1:32 - 3:03\r\nRexxz: 3:03 - 5:22\r\nRuckus: 5:22 ->",uploader:{id:4284846,name:"rexxz",uniqueSet:!0,hash:"5cff0b7598cc5a672c85311e",avatar:"https://cdn.beatsaver.com/avatar/101849894876106752.png",type:"DISCORD"},metadata:{bpm:145,duration:397,songName:"Saeed",songSubName:"Infected Mushroom",songAuthorName:"Bomb, Heisenberg, Rexxz, Ruckus",levelAuthorName:"Rexxz"},stats:{plays:0,downloads:1406,upvotes:1143,downvotes:34,score:.9151},uploaded:"2019-03-13T20:51:03Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"3f3d4ad451b3671e881776c88a67148326ccc9c5",key:"3dd6",state:"Published",createdAt:"2019-03-13T20:51:03Z",sageScore:6,diffs:[{njs:14,offset:0,notes:821,bombs:0,obstacles:76,nps:2.176,length:912,characteristic:"Standard",difficulty:"Normal",events:22078,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:377.379,paritySummary:{errors:80,warns:20,resets:0}},{njs:15,offset:0,notes:1316,bombs:209,obstacles:43,nps:3.427,length:928,characteristic:"Standard",difficulty:"Expert",events:22039,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:384,paritySummary:{errors:57,warns:88,resets:2}},{njs:18,offset:0,notes:2169,bombs:470,obstacles:61,nps:5.57,length:941,characteristic:"Standard",difficulty:"ExpertPlus",events:22077,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:389.379,paritySummary:{errors:70,warns:68,resets:8}}],downloadURL:"https://cdn.beatsaver.com/3f3d4ad451b3671e881776c88a67148326ccc9c5.zip",coverURL:"https://cdn.beatsaver.com/3f3d4ad451b3671e881776c88a67148326ccc9c5.jpg",previewURL:"https://cdn.beatsaver.com/3f3d4ad451b3671e881776c88a67148326ccc9c5.mp3"}],createdAt:"2019-03-13T20:51:03Z",updatedAt:"2019-03-13T20:51:03Z",lastPublishedAt:"2019-03-13T20:51:03Z"},{id:"e4ae",name:"[Alphabeat - Marshmello Pack] Anne-Marie & Marshmello - FRIENDS",description:"Part of the Marshmello Music Pack - Presented by the Alphabeat Mapping Group.\n\nAlphabeat is back once again! This time, we bring a Marshmello Music Pack - mapped by 3 members of the group over 6 different songs (with a bonus Expert+ only song)!\n\nPreview:\nhttps://www.youtube.com/watch?v=bW00nvk7JgU\n\nTimeweaver: https://beatsaver.com/uploader/5d47d586c5301900060b2f6c\nNitronik.exe: https://beatsaver.com/uploader/5cff0b7798cc5a672c855d84\nFirestrike: https://beatsaver.com/uploader/5cff0b7698cc5a672c85479f\n\nWatch the Marshmello Music Pack Trailer, created by Pixelguy: \nhttps://youtu.be/pzNkJ7tFcHM\n\nAll songs included in this pack:\n- Be Kind (Firestrike)\n- Wolves (Timeweaver)\n- Summer (Firestrike)\n- FRIENDS (Nitronik.exe)\n- Falling To Pieces (Nitronik.exe)\n- Rescue Me (Nitronik.exe)\n- [Bonus Song] Chasing Colors (Timeweaver)\n\nChroma is recommended for the best experience.\nDon't forget to grab the Mello Notes created alongside this pack, by Nitronik.exe: https://modelsaber.com/Bloqs/?id=1599384157&pc\nGet the playlist here: https://bsaber.com/marshmello-pack/",uploader:{id:4284201,name:"nitronikexe",uniqueSet:!0,hash:"5cff0b7798cc5a672c855d84",avatar:"https://cdn.beatsaver.com/avatar/428230049704181760.png",type:"DISCORD"},metadata:{bpm:190,duration:204,songName:"FRIENDS",songSubName:"(ft. Anne Marie)",songAuthorName:"Marshmello",levelAuthorName:"nitronik.exe"},stats:{plays:0,downloads:4733,upvotes:874,downvotes:21,score:.915},uploaded:"2020-09-06T11:06:01.474Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6afef6c5baaf7348d0bb4107c78dc4e59ca511e2",key:"e4ae",state:"Published",createdAt:"2020-09-06T11:06:01.474Z",sageScore:7,diffs:[{njs:10,offset:.5,notes:171,bombs:0,obstacles:0,nps:.849,length:638,characteristic:"Standard",difficulty:"Easy",events:12015,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:201.474,paritySummary:{errors:169,warns:0,resets:0}},{njs:12,offset:0,notes:345,bombs:0,obstacles:0,nps:1.712,length:638,characteristic:"Standard",difficulty:"Normal",events:12015,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:201.474,paritySummary:{errors:0,warns:0,resets:0}},{njs:14,offset:-.5,notes:526,bombs:0,obstacles:0,nps:2.611,length:638,characteristic:"Standard",difficulty:"Hard",events:12015,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:201.474,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:.75,notes:710,bombs:0,obstacles:0,nps:3.516,length:639.5,characteristic:"Standard",difficulty:"Expert",events:12016,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:201.947,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:.25,notes:930,bombs:12,obstacles:16,nps:4.605,length:639.5,characteristic:"Standard",difficulty:"ExpertPlus",events:12015,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:201.947,paritySummary:{errors:0,warns:3,resets:2}}],downloadURL:"https://cdn.beatsaver.com/6afef6c5baaf7348d0bb4107c78dc4e59ca511e2.zip",coverURL:"https://cdn.beatsaver.com/6afef6c5baaf7348d0bb4107c78dc4e59ca511e2.jpg",previewURL:"https://cdn.beatsaver.com/6afef6c5baaf7348d0bb4107c78dc4e59ca511e2.mp3"}],createdAt:"2020-09-06T11:06:01.474Z",updatedAt:"2020-09-06T11:06:01.474Z",lastPublishedAt:"2020-09-06T11:06:01.474Z"},{id:"ca40",name:"Kings & Queens - Ava Max",description:"A map requested by my sister so she can play it when she borrows my Quest for extended periods of time to practice her Beat Saber skills. ^_^\nShe helped me decide on some of the mapping decisions on this and helped me with play testing so some credit does go to her :D\n\nIf you have any suggestions about the map and would like to get in touch my discord is Edmard#5334\nNuff luv peeps!",uploader:{id:4285633,name:"edmard",uniqueSet:!0,hash:"5cff0b7798cc5a672c856604",avatar:"https://cdn.beatsaver.com/avatar/157188812462620672.png",type:"DISCORD"},metadata:{bpm:130,duration:162,songName:"Kings & Queens",songSubName:"",songAuthorName:"Ava Max",levelAuthorName:"Edmard"},stats:{plays:0,downloads:5634,upvotes:1649,downvotes:61,score:.915},uploaded:"2020-07-29T22:38:29.144Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"41d7c7b621d397db0723b55f75ab2ef6be1891e8",key:"ca40",state:"Published",createdAt:"2020-07-29T22:38:29.144Z",sageScore:3,diffs:[{njs:14,offset:0,notes:424,bombs:0,obstacles:29,nps:2.857,length:321.5,characteristic:"Standard",difficulty:"Hard",events:2338,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:148.385,paritySummary:{errors:0,warns:0,resets:0},stars:1.71},{njs:15,offset:0,notes:606,bombs:0,obstacles:25,nps:4.084,length:321.5,characteristic:"Standard",difficulty:"Expert",events:2338,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:148.385,paritySummary:{errors:0,warns:0,resets:0},stars:2.6},{njs:15,offset:-.3,notes:661,bombs:0,obstacles:22,nps:4.455,length:321.5,characteristic:"Standard",difficulty:"ExpertPlus",events:2338,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:148.385,paritySummary:{errors:0,warns:2,resets:0},stars:5.85}],downloadURL:"https://cdn.beatsaver.com/41d7c7b621d397db0723b55f75ab2ef6be1891e8.zip",coverURL:"https://cdn.beatsaver.com/41d7c7b621d397db0723b55f75ab2ef6be1891e8.jpg",previewURL:"https://cdn.beatsaver.com/41d7c7b621d397db0723b55f75ab2ef6be1891e8.mp3"}],createdAt:"2020-07-29T22:38:29.144Z",updatedAt:"2020-07-29T22:38:29.144Z",lastPublishedAt:"2020-07-29T22:38:29.144Z"},{id:"9a35",name:"[Tokyo Machine Pack] Tokyo Machine - PIXEL",description:"3/6\nPart of the Tokyo Machine Pack, a collab between Firestrike, Cyansnow and I.\nMap by me, lights by FireStrike.\n\nFireStrike's account: https://beatsaver.com/uploader/5cff0b7698cc5a672c85479f\nCyanSnow's account: https://beatsaver.com/uploader/5cff0b7698cc5a672c8543ac\n\nPlaylist: https://bsaber.com/tokyo-machine-pack/\n\nCheck out the trailer for the pack here: https://www.youtube.com/watch?v=lStPUnecsD8",uploader:{id:57657,name:"pixelguymm",uniqueSet:!0,hash:"5cff0b7698cc5a672c8541a8",avatar:"https://cdn.beatsaver.com/avatar/434386941547511818.png",type:"DISCORD"},metadata:{bpm:128,duration:201,songName:"PIXEL",songSubName:"",songAuthorName:"Tokyo Machine",levelAuthorName:"FireStrike & Pixel"},stats:{plays:0,downloads:1838,upvotes:650,downvotes:11,score:.915},uploaded:"2020-04-12T18:07:43.267Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b5d3d5f97d34fc85c0a2cf694631bdf125229304",key:"9a35",state:"Published",createdAt:"2020-04-12T18:07:43.267Z",sageScore:4,diffs:[{njs:18,offset:-.3,notes:1172,bombs:54,obstacles:4,nps:6.016,length:415.625,characteristic:"Standard",difficulty:"ExpertPlus",events:4372,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.824,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b5d3d5f97d34fc85c0a2cf694631bdf125229304.zip",coverURL:"https://cdn.beatsaver.com/b5d3d5f97d34fc85c0a2cf694631bdf125229304.jpg",previewURL:"https://cdn.beatsaver.com/b5d3d5f97d34fc85c0a2cf694631bdf125229304.mp3"}],createdAt:"2020-04-12T18:07:43.267Z",updatedAt:"2020-04-12T18:07:43.267Z",lastPublishedAt:"2020-04-12T18:07:43.267Z"},{id:"c1d",name:"Good Times Roll",description:"Be sure to check out the other difficulties! There were certain patterns that I loved that only worked for some of the difficulties, and they're all super fun! Anyone playing Easy will find that Normal teaches you how to play harder maps while being very forgiving.\r\n\r\nAlso, I'm going on hiatus! This will be my last map for a good while since I'm back in school and also working full time. I'll still play here and there and maybe try to map a bit, but I likely won't release anything for several months. Hopefully this map will keep people satisfied for a while ;)\r\n\r\nhttps://youtu.be/vCbgECLTxpU",uploader:{id:44595,name:"awfulnaut",uniqueSet:!0,hash:"5cff0b7398cc5a672c84edac",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84edac?d=retro",type:"SIMPLE"},metadata:{bpm:200,duration:146,songName:"Good Times Roll",songSubName:"Griz x Big Gigantic",songAuthorName:"Awfulnaut",levelAuthorName:"awfulnaut"},stats:{plays:0,downloads:6704,upvotes:3141,downvotes:149,score:.915},uploaded:"2018-07-27T15:47:05Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"f22061809c798178786ca1b6e61b10ccbcbe8d28",key:"c1d",state:"Published",createdAt:"2018-07-27T15:47:05Z",sageScore:4,diffs:[{njs:10,offset:0,notes:356,bombs:8,obstacles:11,nps:2.566,length:462.5,characteristic:"Standard",difficulty:"Normal",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:138.75,paritySummary:{errors:95,warns:15,resets:4},stars:1.45},{njs:10,offset:0,notes:469,bombs:8,obstacles:11,nps:3.38,length:462.5,characteristic:"Standard",difficulty:"Hard",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:138.75,paritySummary:{errors:44,warns:29,resets:1},stars:1.88},{njs:10,offset:0,notes:519,bombs:0,obstacles:12,nps:3.741,length:462.5,characteristic:"Standard",difficulty:"Expert",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:138.75,paritySummary:{errors:24,warns:41,resets:0},stars:2.25},{njs:10,offset:0,notes:634,bombs:0,obstacles:12,nps:4.569,length:462.5,characteristic:"Standard",difficulty:"ExpertPlus",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:138.75,paritySummary:{errors:34,warns:48,resets:0},stars:2.74}],downloadURL:"https://cdn.beatsaver.com/f22061809c798178786ca1b6e61b10ccbcbe8d28.zip",coverURL:"https://cdn.beatsaver.com/f22061809c798178786ca1b6e61b10ccbcbe8d28.jpg",previewURL:"https://cdn.beatsaver.com/f22061809c798178786ca1b6e61b10ccbcbe8d28.mp3"}],createdAt:"2018-07-27T15:47:05Z",updatedAt:"2018-07-27T15:47:05Z",lastPublishedAt:"2018-07-27T15:47:05Z"},{id:"e7ce",name:"[NoodleGames Vol.2] Rivers in the Desert - Persona 5",description:"The Ramen Noodle group is back again to bring you a map pack full of our favorite video game soundtracks and game-inspired music!\n\nHere's one of my 4 Persona maps for the pack! Hope you enjoy.",uploader:{id:15368,name:"theab",uniqueSet:!0,hash:"5cff0b7698cc5a672c853a14",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c853a14?d=retro",type:"SIMPLE"},metadata:{bpm:130,duration:224,songName:"Rivers In the Desert",songSubName:"(Short Ver.)",songAuthorName:"Shoji Meguro",levelAuthorName:"Ab"},stats:{plays:0,downloads:3270,upvotes:741,downvotes:15,score:.9149},uploaded:"2020-09-10T19:20:12.870Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6dd531f3920735b2b1b64f39442fcb753b4a52a7",key:"e7ce",state:"Published",createdAt:"2020-09-10T19:20:12.870Z",sageScore:4,diffs:[{njs:16,offset:-.25,notes:760,bombs:0,obstacles:0,nps:3.441,length:478.5,characteristic:"Standard",difficulty:"Expert",events:941,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.846,paritySummary:{errors:2,warns:2,resets:0}},{njs:17,offset:-.35,notes:824,bombs:0,obstacles:0,nps:3.731,length:478.5,characteristic:"Standard",difficulty:"ExpertPlus",events:946,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.846,paritySummary:{errors:2,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6dd531f3920735b2b1b64f39442fcb753b4a52a7.zip",coverURL:"https://cdn.beatsaver.com/6dd531f3920735b2b1b64f39442fcb753b4a52a7.jpg",previewURL:"https://cdn.beatsaver.com/6dd531f3920735b2b1b64f39442fcb753b4a52a7.mp3"}],createdAt:"2020-09-10T19:20:12.870Z",updatedAt:"2020-09-10T19:20:12.870Z",lastPublishedAt:"2020-09-10T19:20:12.870Z"},{id:"d0be",name:"Bohemian Rhapsody - Queen",description:"Honestly, I never really liked that other version. And I'm sure some people would agree, so since it seemed like no one else was going fix it, I went and mapped it myself.\r\nEnjoy.\r\n\r\nP.S. - If kingpeuche ever plays this, good job man. Bohemian Rhapsody isn't an easy song to map, so I have some genuine respect for you.\r\n\r\nPlay kingpeuche's version(s) here: \r\nhttps://beatsaver.com/beatmap/4a6\r\nhttps://beatsaver.com/beatmap/77c\r\n\r\nSong Info:\r\nhttps://en.wikipedia.org/wiki/Bohemian_Rhapsody",uploader:{id:4284694,name:"jokidum",uniqueSet:!0,hash:"5e15518d47f1600006e912cc",avatar:"https://cdn.beatsaver.com/avatar/494282373094047745.png",type:"DISCORD"},metadata:{bpm:120,duration:356,songName:"Bohemian Rhapsody",songSubName:"- Queen",songAuthorName:"Queen",levelAuthorName:"Jokidum"},stats:{plays:0,downloads:8506,upvotes:1666,downvotes:62,score:.9149},uploaded:"2020-08-07T20:00:07.052Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d19b4abf7d83d2882a5bf1f2bdc3b03491ef3eaf",key:"d0be",state:"Published",createdAt:"2020-08-07T20:00:07.052Z",sageScore:2,diffs:[{njs:12,offset:0,notes:1100,bombs:0,obstacles:0,nps:3.303,length:666,characteristic:"Standard",difficulty:"Expert",events:2875,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:333,paritySummary:{errors:4,warns:2,resets:0}},{njs:16,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:2875,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/d19b4abf7d83d2882a5bf1f2bdc3b03491ef3eaf.zip",coverURL:"https://cdn.beatsaver.com/d19b4abf7d83d2882a5bf1f2bdc3b03491ef3eaf.jpg",previewURL:"https://cdn.beatsaver.com/d19b4abf7d83d2882a5bf1f2bdc3b03491ef3eaf.mp3"}],createdAt:"2020-08-07T20:00:07.052Z",updatedAt:"2020-08-07T20:00:07.052Z",lastPublishedAt:"2020-08-07T20:00:07.052Z"},{id:"96ff",name:"Imagine Dragons - Warriors (2020 ReMap)",description:"Two years ago on the 24th July 2018 I released my first beat saber map of Warriors by Imagine Dragons. Well now its back! and its BIGGER, LOUDER and more EPIC than ever! \n\nThe map was completely remade from the ground up, so new audio, new lights and completely new difficulties. Don't worry though, the old warriors will still remain on beatsaver just in case anyone prefers playing it.\n\nThanks to Strofan and Layanmeta for playtesting :P\n\nMap preview: https://youtu.be/pdb5F0Q1cwo",uploader:{id:4785,name:"stumi",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f720",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro",type:"SIMPLE"},metadata:{bpm:78,duration:172,songName:"Warriors (2020 ReMap)",songSubName:"",songAuthorName:"Imagine Dragons",levelAuthorName:"Stumi"},stats:{plays:0,downloads:7111,upvotes:1861,downvotes:73,score:.9149},uploaded:"2020-04-03T16:29:45.360Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8ee2cc6242db4d138e620a347e3a2904f2a5b902",key:"96ff",state:"Published",createdAt:"2020-04-03T16:29:45.360Z",sageScore:5,diffs:[{njs:10,offset:0,notes:169,bombs:0,obstacles:67,nps:1.036,length:212,characteristic:"Standard",difficulty:"Easy",events:2808,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.077,paritySummary:{errors:32,warns:9,resets:0}},{njs:11,offset:0,notes:317,bombs:0,obstacles:82,nps:1.944,length:212,characteristic:"Standard",difficulty:"Normal",events:2808,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.077,paritySummary:{errors:52,warns:18,resets:0}},{njs:12,offset:.4,notes:506,bombs:4,obstacles:97,nps:3.103,length:212,characteristic:"Standard",difficulty:"Hard",events:2807,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.077,paritySummary:{errors:29,warns:11,resets:0}},{njs:16,offset:.2,notes:673,bombs:64,obstacles:130,nps:4.127,length:212,characteristic:"Standard",difficulty:"Expert",events:2808,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.077,paritySummary:{errors:20,warns:40,resets:11}}],downloadURL:"https://cdn.beatsaver.com/8ee2cc6242db4d138e620a347e3a2904f2a5b902.zip",coverURL:"https://cdn.beatsaver.com/8ee2cc6242db4d138e620a347e3a2904f2a5b902.jpg",previewURL:"https://cdn.beatsaver.com/8ee2cc6242db4d138e620a347e3a2904f2a5b902.mp3"}],createdAt:"2020-04-03T16:29:45.360Z",updatedAt:"2020-04-03T16:29:45.360Z",lastPublishedAt:"2020-04-03T16:29:45.360Z"},{id:"8f65",name:"Jump in the Line - Harry Belafonte",description:"My parents were big Harry Belafonte fans, and I grew up listening to this 1961 hit, Jump in the Line. In 1988, this song was a major part of the 1988 Michael Keaton classic, Beetlejuice. Who can forget Winona Ryder dancing in the air? Now you can dance along with her while slicing flying blocks!\n\nFully mapped Easy, Normal, Hard, Expert, Expert Plus Standard, and Expert Plus 360.\n\nThis song is part of my new song pack collaboration with MajorPickle: PickleTech Goes to the Movies - The 1980s.\n\nhttps://youtu.be/cbLl1ofeBZY",uploader:{id:78593,name:"techbutterfly",uniqueSet:!0,hash:"5cff0b7798cc5a672c8566f7",avatar:"https://cdn.beatsaver.com/avatar/527111497617506304.png",type:"DISCORD"},metadata:{bpm:115,duration:223,songName:"Jump in the Line",songSubName:"",songAuthorName:"Harry Belafonte",levelAuthorName:"TechButterfly"},stats:{plays:0,downloads:2510,upvotes:830,downvotes:19,score:.9149},uploaded:"2020-03-13T04:10:43.592Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ba3e5d8bca161ef9e9f70383b6c33f83ecf8998a",key:"8f65",state:"Published",createdAt:"2020-03-13T04:10:43.592Z",sageScore:5,diffs:[{njs:8,offset:0,notes:274,bombs:0,obstacles:2,nps:1.256,length:418,characteristic:"Standard",difficulty:"Easy",events:919,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.087,paritySummary:{errors:67,warns:33,resets:0}},{njs:10,offset:0,notes:407,bombs:0,obstacles:2,nps:1.864,length:418.5,characteristic:"Standard",difficulty:"Normal",events:919,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.348,paritySummary:{errors:71,warns:55,resets:0}},{njs:12,offset:.5,notes:634,bombs:5,obstacles:2,nps:2.904,length:418.5,characteristic:"Standard",difficulty:"Hard",events:919,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.348,paritySummary:{errors:47,warns:51,resets:2}},{njs:12,offset:.5,notes:793,bombs:0,obstacles:2,nps:3.632,length:418.5,characteristic:"Standard",difficulty:"Expert",events:919,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.348,paritySummary:{errors:35,warns:46,resets:0}},{njs:13,offset:.5,notes:920,bombs:0,obstacles:2,nps:4.213,length:418.5,characteristic:"Standard",difficulty:"ExpertPlus",events:920,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.348,paritySummary:{errors:69,warns:77,resets:0}},{njs:13,offset:.5,notes:793,bombs:0,obstacles:2,nps:3.632,length:418.5,characteristic:"360Degree",difficulty:"ExpertPlus",events:1125,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.348,paritySummary:{errors:35,warns:46,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ba3e5d8bca161ef9e9f70383b6c33f83ecf8998a.zip",coverURL:"https://cdn.beatsaver.com/ba3e5d8bca161ef9e9f70383b6c33f83ecf8998a.jpg",previewURL:"https://cdn.beatsaver.com/ba3e5d8bca161ef9e9f70383b6c33f83ecf8998a.mp3"}],createdAt:"2020-03-13T04:10:43.592Z",updatedAt:"2020-03-13T04:10:43.592Z",lastPublishedAt:"2020-03-13T04:10:43.592Z"},{id:"8e35",name:"Beat It [Punk Goes Pop Vol.2] - Fall Out Boy ft. John Mayer",description:"The first song in my up and coming Punk Goes Pop Volume 2 playlist! A punk rock cover of Beat It as covered by Fall Out Boy featuring John Mayer. Original song by Michael Jackson.",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:150,duration:227,songName:"Beat It",songSubName:"ft. John Mayer",songAuthorName:"Fall Out Boy",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:4056,upvotes:935,downvotes:24,score:.9149},uploaded:"2020-03-08T05:50:10.166Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"88474a324602552647553aa9533596c7cd882c60",key:"8e35",state:"Published",createdAt:"2020-03-08T05:50:10.166Z",sageScore:5,diffs:[{njs:10,offset:0,notes:396,bombs:0,obstacles:8,nps:1.827,length:542,characteristic:"Standard",difficulty:"Easy",events:7559,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.8,paritySummary:{errors:44,warns:39,resets:0}},{njs:12,offset:0,notes:531,bombs:0,obstacles:8,nps:2.405,length:552,characteristic:"Standard",difficulty:"Normal",events:7559,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.8,paritySummary:{errors:43,warns:55,resets:0}},{njs:13.5,offset:0,notes:863,bombs:0,obstacles:6,nps:3.909,length:552,characteristic:"Standard",difficulty:"Hard",events:7559,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.8,paritySummary:{errors:50,warns:49,resets:0}},{njs:15,offset:0,notes:878,bombs:0,obstacles:6,nps:3.976,length:552,characteristic:"Standard",difficulty:"Expert",events:7559,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.8,paritySummary:{errors:47,warns:54,resets:0}}],downloadURL:"https://cdn.beatsaver.com/88474a324602552647553aa9533596c7cd882c60.zip",coverURL:"https://cdn.beatsaver.com/88474a324602552647553aa9533596c7cd882c60.jpg",previewURL:"https://cdn.beatsaver.com/88474a324602552647553aa9533596c7cd882c60.mp3"}],createdAt:"2020-03-08T05:50:10.166Z",updatedAt:"2020-03-08T05:50:10.166Z",lastPublishedAt:"2020-03-08T05:50:10.166Z"},{id:"7395",name:"Bruh Sound Effect #2",description:"tried to get it ranked\nthey said common sense to me\nquite a bruh moment\n\nhaiku written by yours truly (its a true story btw)",uploader:{id:4285820,name:"ezconfirmed",uniqueSet:!0,hash:"5d6444b8589aee0006ff76ad",avatar:"https://cdn.beatsaver.com/avatar/343415744324960256.png",type:"DISCORD"},metadata:{bpm:120,duration:4,songName:"Bruh Sound Effect #2",songSubName:"",songAuthorName:"Jame Benedict",levelAuthorName:"eZconfirmed"},stats:{plays:0,downloads:908,upvotes:807,downvotes:18,score:.9149},uploaded:"2019-12-03T19:19:01.005Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1c30514852ae45a9651d476fe748d2c9926facfc",key:"7395",state:"Published",createdAt:"2019-12-03T19:19:01.005Z",sageScore:1,diffs:[{njs:16,offset:0,notes:4,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Standard",difficulty:"Normal",events:10,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1c30514852ae45a9651d476fe748d2c9926facfc.zip",coverURL:"https://cdn.beatsaver.com/1c30514852ae45a9651d476fe748d2c9926facfc.jpg",previewURL:"https://cdn.beatsaver.com/1c30514852ae45a9651d476fe748d2c9926facfc.mp3"}],createdAt:"2019-12-03T19:19:01.005Z",updatedAt:"2019-12-03T19:19:01.005Z",lastPublishedAt:"2019-12-03T19:19:01.005Z"},{id:"6361",name:"Choke - I DONT KNOW HOW BUT THEY FOUND ME",description:"Here's another fun and bouncy song! The lyrics are a bit...darker than the music would have you suggest though. So bite your tongue, and choke yourself to sleep.\n\nBPM: 120\nNPS: N - 2.45; H - 3.14; Ex - 3.96\nNotes: N - 482; H - 617; Ex - 778\nWalls: N - 28; H - 20; Ex - 17\nBombs: None!\n\nThanks to helencarnate and Checkthepan for testplaying!",uploader:{id:4285188,name:"fruhead",uniqueSet:!0,hash:"5cff0b7598cc5a672c852683",avatar:"https://cdn.beatsaver.com/avatar/174000100413145090.png",type:"DISCORD"},metadata:{bpm:120.251,duration:196,songName:"Choke",songSubName:"",songAuthorName:"I DONT KNOW HOW BUT THEY FOUND ME",levelAuthorName:"fruhead"},stats:{plays:0,downloads:1052,upvotes:388,downvotes:1,score:.9149},uploaded:"2019-09-14T17:56:33.555Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ea073ec1320fd83c3b9c5e5be5fe2cb58e846b3f",key:"6361",state:"Published",createdAt:"2019-09-14T17:56:33.555Z",sageScore:6,diffs:[{njs:12,offset:0,notes:482,bombs:0,obstacles:28,nps:2.518,length:383.667,characteristic:"Standard",difficulty:"Normal",events:4223,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.433,paritySummary:{errors:8,warns:0,resets:0}},{njs:14,offset:0,notes:617,bombs:0,obstacles:20,nps:3.223,length:383.667,characteristic:"Standard",difficulty:"Hard",events:4223,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.433,paritySummary:{errors:3,warns:0,resets:0}},{njs:16,offset:0,notes:778,bombs:0,obstacles:17,nps:4.064,length:383.667,characteristic:"Standard",difficulty:"Expert",events:4223,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.433,paritySummary:{errors:4,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ea073ec1320fd83c3b9c5e5be5fe2cb58e846b3f.zip",coverURL:"https://cdn.beatsaver.com/ea073ec1320fd83c3b9c5e5be5fe2cb58e846b3f.jpg",previewURL:"https://cdn.beatsaver.com/ea073ec1320fd83c3b9c5e5be5fe2cb58e846b3f.mp3"}],createdAt:"2019-09-14T17:56:33.555Z",updatedAt:"2019-09-14T17:56:33.555Z",lastPublishedAt:"2019-09-14T17:56:33.555Z"},{id:"8600",name:"Tom Sawyer - Rush",description:"My tribute to Rush.",uploader:{id:4285077,name:"ris",uniqueSet:!0,hash:"5cff0b7598cc5a672c8535df",avatar:"https://cdn.beatsaver.com/avatar/191597992061435904.png",type:"DISCORD"},metadata:{bpm:88,duration:273,songName:"Tom Sawyer",songSubName:"",songAuthorName:"Rush",levelAuthorName:"Ris"},stats:{plays:0,downloads:2010,upvotes:806,downvotes:18,score:.9148},uploaded:"2020-02-11T03:37:38.994Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1b39e3091cda17c7d35db7707e1f673a5e8ceb66",key:"8600",state:"Published",createdAt:"2020-02-11T03:37:38.994Z",sageScore:5,diffs:[{njs:10,offset:.5,notes:386,bombs:0,obstacles:0,nps:1.456,length:388.702,characteristic:"Standard",difficulty:"Normal",events:662,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:265.024,paritySummary:{errors:50,warns:42,resets:0}},{njs:12,offset:0,notes:748,bombs:0,obstacles:0,nps:2.822,length:388.702,characteristic:"Standard",difficulty:"Hard",events:662,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:265.024,paritySummary:{errors:74,warns:89,resets:0}},{njs:16,offset:.25,notes:1055,bombs:30,obstacles:0,nps:3.981,length:388.702,characteristic:"Standard",difficulty:"Expert",events:662,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:265.024,paritySummary:{errors:75,warns:86,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1b39e3091cda17c7d35db7707e1f673a5e8ceb66.zip",coverURL:"https://cdn.beatsaver.com/1b39e3091cda17c7d35db7707e1f673a5e8ceb66.jpg",previewURL:"https://cdn.beatsaver.com/1b39e3091cda17c7d35db7707e1f673a5e8ceb66.mp3"}],createdAt:"2020-02-11T03:37:38.994Z",updatedAt:"2020-02-11T03:37:38.994Z",lastPublishedAt:"2020-02-11T03:37:38.994Z"},{id:"55d1",name:"Short Skirt Long Jacket - Cake",description:"Swing along with Cake's 2001 hit, Short Skirt Long Jacket. Even if you're not a Cake fan, you might remember this as the theme song for the TV show Chuck.\n\nFully mapped Easy, Normal, Hard, and Expert. Quest friendly!\n\nhttps://www.youtube.com/watch?v=1RKRbWus-qM",uploader:{id:78593,name:"techbutterfly",uniqueSet:!0,hash:"5cff0b7798cc5a672c8566f7",avatar:"https://cdn.beatsaver.com/avatar/527111497617506304.png",type:"DISCORD"},metadata:{bpm:120,duration:203,songName:"Short Skirt Long Jacket",songSubName:"",songAuthorName:"Cake",levelAuthorName:"TechButterfly"},stats:{plays:0,downloads:1700,upvotes:671,downvotes:12,score:.9148},uploaded:"2019-07-07T01:49:57.642Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"20b9326bd71db4454aba08df06b035ea536322a9",key:"55d1",state:"Published",createdAt:"2019-07-07T01:49:57.642Z",sageScore:5,diffs:[{njs:12,offset:0,notes:234,bombs:0,obstacles:4,nps:1.188,length:394,characteristic:"Standard",difficulty:"Easy",events:6191,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197,paritySummary:{errors:69,warns:25,resets:0}},{njs:13,offset:0,notes:358,bombs:0,obstacles:4,nps:1.815,length:394.5,characteristic:"Standard",difficulty:"Normal",events:6191,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.25,paritySummary:{errors:90,warns:48,resets:0}},{njs:15,offset:0,notes:562,bombs:0,obstacles:44,nps:2.849,length:394.5,characteristic:"Standard",difficulty:"Hard",events:6191,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.25,paritySummary:{errors:31,warns:49,resets:0}},{njs:17,offset:0,notes:669,bombs:0,obstacles:32,nps:3.392,length:394.5,characteristic:"Standard",difficulty:"Expert",events:6195,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.25,paritySummary:{errors:45,warns:69,resets:0}}],downloadURL:"https://cdn.beatsaver.com/20b9326bd71db4454aba08df06b035ea536322a9.zip",coverURL:"https://cdn.beatsaver.com/20b9326bd71db4454aba08df06b035ea536322a9.jpg",previewURL:"https://cdn.beatsaver.com/20b9326bd71db4454aba08df06b035ea536322a9.mp3"}],createdAt:"2019-07-07T01:49:57.642Z",updatedAt:"2019-07-07T01:49:57.642Z",lastPublishedAt:"2019-07-07T01:49:57.642Z"},{id:"4a08",name:"Attack on Titan OP 5 | Shoukei to Shikabane no Michi | Shingeki no Kyojin OP 5| Mapped by Ab",description:"I offer all difficulties except Easy here. But Normal is pretty easy.\r\nSeizure warning I guess.",uploader:{id:15368,name:"theab",uniqueSet:!0,hash:"5cff0b7698cc5a672c853a14",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c853a14?d=retro",type:"SIMPLE"},metadata:{bpm:178,duration:89,songName:"Attack on Titan OP5 (Shoukei to Shikabane no Michi)",songSubName:"Linked Horizon",songAuthorName:"Ab",levelAuthorName:"TheAb"},stats:{plays:0,downloads:2844,upvotes:891,downvotes:22,score:.9148},uploaded:"2019-05-02T20:07:56Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"922afca4bfe670e6ebff75c18245035744193d22",key:"4a08",state:"Published",createdAt:"2019-05-02T20:07:56Z",sageScore:3,diffs:[{njs:10,offset:0,notes:146,bombs:5,obstacles:5,nps:1.685,length:257,characteristic:"Standard",difficulty:"Normal",events:5631,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:86.629,paritySummary:{errors:62,warns:1,resets:2}},{njs:13,offset:0,notes:238,bombs:12,obstacles:7,nps:2.747,length:257,characteristic:"Standard",difficulty:"Hard",events:5631,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:86.629,paritySummary:{errors:30,warns:9,resets:2}},{njs:15,offset:1,notes:373,bombs:4,obstacles:6,nps:4.306,length:257,characteristic:"Standard",difficulty:"Expert",events:5631,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:86.629,paritySummary:{errors:19,warns:20,resets:2}},{njs:18,offset:0,notes:555,bombs:1,obstacles:3,nps:6.599,length:249.5,characteristic:"Standard",difficulty:"ExpertPlus",events:5634,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:84.101,paritySummary:{errors:29,warns:39,resets:0}}],downloadURL:"https://cdn.beatsaver.com/922afca4bfe670e6ebff75c18245035744193d22.zip",coverURL:"https://cdn.beatsaver.com/922afca4bfe670e6ebff75c18245035744193d22.jpg",previewURL:"https://cdn.beatsaver.com/922afca4bfe670e6ebff75c18245035744193d22.mp3"}],createdAt:"2019-05-02T20:07:56Z",updatedAt:"2019-05-02T20:07:56Z",lastPublishedAt:"2019-05-02T20:07:56Z"},{id:"487c",name:"Don't Stop Me Now - Queen",description:"Huge thanks to WhipStickGoStop for the full combo vid!\r\nhttps://www.youtube.com/watch?v=RPDvDY2HT58\r\n\r\nPlaytesters <3 WhipStickGoStop, XORoseGold, MozzVR, Izzake",uploader:{id:4285169,name:"ryger",uniqueSet:!0,hash:"5cff0b7798cc5a672c855a42",avatar:"https://cdn.beatsaver.com/avatar/169266024502263808.png",type:"DISCORD"},metadata:{bpm:120,duration:214,songName:"Don't Stop Me Now",songSubName:"Queen",songAuthorName:"Ryger",levelAuthorName:"Ryger"},stats:{plays:0,downloads:5041,upvotes:1291,downvotes:42,score:.9148},uploaded:"2019-04-26T16:28:36Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9db67df13260c4715d33068e3982071ca6e3e815",key:"487c",state:"Published",createdAt:"2019-04-26T16:28:36Z",sageScore:6,diffs:[{njs:12,offset:0,notes:734,bombs:0,obstacles:1,nps:3.677,length:519.002,characteristic:"Standard",difficulty:"ExpertPlus",events:3998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:259.501,paritySummary:{errors:71,warns:56,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9db67df13260c4715d33068e3982071ca6e3e815.zip",coverURL:"https://cdn.beatsaver.com/9db67df13260c4715d33068e3982071ca6e3e815.jpg",previewURL:"https://cdn.beatsaver.com/9db67df13260c4715d33068e3982071ca6e3e815.mp3"}],createdAt:"2019-04-26T16:28:36Z",updatedAt:"2019-04-26T16:28:36Z",lastPublishedAt:"2019-04-26T16:28:36Z"},{id:"243c",name:"Ocarina of Time Medley [Smash Bros Map Pack]",description:"by Michiko Naruke\r\n\r\nPart of the Smash Bros map pack!\r\n\r\nVideo: https://youtu.be/lw7EN7Xu-9c",uploader:{id:39365,name:"todokete",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ee70",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee70?d=retro",type:"SIMPLE"},metadata:{bpm:145,duration:114,songName:"Ocarina of Time Medley",songSubName:"Michiko Naruke",songAuthorName:"Todokete",levelAuthorName:"todokete"},stats:{plays:0,downloads:4995,upvotes:2238,downvotes:95,score:.9148},uploaded:"2018-12-07T00:16:02Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"00b539e86ea3f0b1e966544a297fb4942e499e6f",key:"243c",state:"Published",createdAt:"2018-12-07T00:16:02Z",sageScore:5,diffs:[{njs:11,offset:0,notes:239,bombs:0,obstacles:0,nps:2.179,length:265,characteristic:"Standard",difficulty:"Hard",events:882,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:109.655,paritySummary:{errors:34,warns:8,resets:0},stars:1.33},{njs:14,offset:0,notes:330,bombs:0,obstacles:0,nps:3.008,length:265,characteristic:"Standard",difficulty:"Expert",events:882,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:109.655,paritySummary:{errors:37,warns:37,resets:0},stars:2.97}],downloadURL:"https://cdn.beatsaver.com/00b539e86ea3f0b1e966544a297fb4942e499e6f.zip",coverURL:"https://cdn.beatsaver.com/00b539e86ea3f0b1e966544a297fb4942e499e6f.jpg",previewURL:"https://cdn.beatsaver.com/00b539e86ea3f0b1e966544a297fb4942e499e6f.mp3"}],createdAt:"2018-12-07T00:16:02Z",updatedAt:"2018-12-07T00:16:02Z",lastPublishedAt:"2018-12-07T00:16:02Z"},{id:"115c2",name:"[Wall Map] Alan Walker - Darkside (feat. Au/Ra and Tomine Harket)",description:"-FALL INTO THE DARKSIDE-\n\nMy first big wall map to feature ne 1.2 pogger, be prepared for a long load time and possible lag spikes.\nThanks to Rizthesnuggie and Liams2005 for contributing their maps and for putting up with my shit throughout this :)\nThanks to Krueger for answering all my programming questions.\n\nKrueger's Beatsaber Vids: https://www.youtube.com/watch?v=Q0hNfhk4Ngs&t=142s\nPlaythrough: https://www.youtube.com/watch?v=9BqzyBwFPE4\n\nmy ne tool: https://github.com/thelightdesigner/ScuffedWalls/releases/tag/v0.5.0-beta\n\nRequirements:\nNoodle Extensions\nChroma\nCustom JSON Data",uploader:{id:73008,name:"thelightdesigner",uniqueSet:!0,hash:"5cff0b7798cc5a672c85627a",avatar:"https://cdn.beatsaver.com/avatar/480555157952659489.png",type:"DISCORD"},metadata:{bpm:170,duration:178,songName:"Darkside",songSubName:"(ft. Au/Ra & Tomine Harket)",songAuthorName:"Alan Walker",levelAuthorName:"Liam, Riz & KyleT"},stats:{plays:0,downloads:3946,upvotes:1365,downvotes:46,score:.9147},uploaded:"2020-11-27T05:08:50.986Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"713e301fc4f774edf4ea1001a19dd5bf7e3f4ce6",key:"115c2",state:"Published",createdAt:"2020-11-27T05:08:50.986Z",sageScore:1,diffs:[{njs:16,offset:0,notes:500,bombs:24,obstacles:65952,nps:2.905,length:487.667,characteristic:"Standard",difficulty:"Hard",events:1,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:172.118,paritySummary:{errors:0,warns:0,resets:0}},{njs:17,offset:0,notes:610,bombs:36,obstacles:65952,nps:3.571,length:484,characteristic:"Standard",difficulty:"Expert",events:1,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:170.824,paritySummary:{errors:1,warns:0,resets:12}},{njs:18,offset:0,notes:866,bombs:0,obstacles:65952,nps:5.07,length:484,characteristic:"Standard",difficulty:"ExpertPlus",events:1,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:170.824,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/713e301fc4f774edf4ea1001a19dd5bf7e3f4ce6.zip",coverURL:"https://cdn.beatsaver.com/713e301fc4f774edf4ea1001a19dd5bf7e3f4ce6.jpg",previewURL:"https://cdn.beatsaver.com/713e301fc4f774edf4ea1001a19dd5bf7e3f4ce6.mp3"}],createdAt:"2020-11-27T05:08:50.986Z",updatedAt:"2020-11-27T05:08:50.986Z",lastPublishedAt:"2020-11-27T05:08:50.986Z"},{id:"57cb",name:"CAN CAN WORLD",description:"Twitter: https://twitter.com/Dack731",uploader:{id:4285250,name:"dack",uniqueSet:!0,hash:"5cff0b7598cc5a672c852c6f",avatar:"https://cdn.beatsaver.com/avatar/297344689798119424.png",type:"DISCORD"},metadata:{bpm:158,duration:297,songName:"CAN CAN WORLD",songSubName:"",songAuthorName:"MAKKERONI",levelAuthorName:"Dack"},stats:{plays:0,downloads:813,upvotes:523,downvotes:6,score:.9147},uploaded:"2019-07-18T23:50:08.241Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d2dab61784b612b9b807e127260a81ed974315af",key:"57cb",state:"Published",createdAt:"2019-07-18T23:50:08.241Z",sageScore:3,diffs:[{njs:12,offset:0,notes:531,bombs:0,obstacles:114,nps:1.828,length:765,characteristic:"Standard",difficulty:"Normal",events:1776,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:290.506,paritySummary:{errors:14,warns:18,resets:0}},{njs:13,offset:0,notes:806,bombs:0,obstacles:114,nps:2.774,length:765,characteristic:"Standard",difficulty:"Hard",events:1776,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:290.506,paritySummary:{errors:12,warns:11,resets:0}},{njs:14,offset:0,notes:1150,bombs:0,obstacles:110,nps:3.959,length:765,characteristic:"Standard",difficulty:"Expert",events:1776,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:290.506,paritySummary:{errors:5,warns:9,resets:0}},{njs:17,offset:0,notes:1399,bombs:8,obstacles:114,nps:4.816,length:765,characteristic:"Standard",difficulty:"ExpertPlus",events:1784,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:290.506,paritySummary:{errors:31,warns:28,resets:2}}],downloadURL:"https://cdn.beatsaver.com/d2dab61784b612b9b807e127260a81ed974315af.zip",coverURL:"https://cdn.beatsaver.com/d2dab61784b612b9b807e127260a81ed974315af.jpg",previewURL:"https://cdn.beatsaver.com/d2dab61784b612b9b807e127260a81ed974315af.mp3"}],createdAt:"2019-07-18T23:50:08.241Z",updatedAt:"2019-07-18T23:50:08.241Z",lastPublishedAt:"2019-07-18T23:50:08.241Z"},{id:"66f",name:"This Is Gospel - Panic! At The Disco",description:"Expert - Hard - Normal Charts\nLighting Events\n\nhttps://twitter.com/TheDownyCat\nhttps://www.twitch.tv/downycat\nhttps://streamlabs.com/downycat/tip",uploader:{id:4285982,name:"downycat",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ede5",avatar:"https://cdn.beatsaver.com/avatar/173538829888782336.png",type:"DISCORD"},metadata:{bpm:156,duration:180,songName:"This Is Gospel",songSubName:"Panic! At The Disco",songAuthorName:"DownyCat",levelAuthorName:"downycat"},stats:{plays:0,downloads:2221,upvotes:1421,downvotes:49,score:.9147},uploaded:"2018-06-24T10:25:39Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e14ecfe4def439051ae404353aae6aabc7d1e05f",key:"66f",state:"Published",createdAt:"2018-06-24T10:25:39Z",sageScore:4,diffs:[{njs:10,offset:0,notes:382,bombs:0,obstacles:14,nps:2.178,length:455.999,characteristic:"Standard",difficulty:"Normal",events:970,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.384,paritySummary:{errors:47,warns:12,resets:0}},{njs:10,offset:0,notes:619,bombs:0,obstacles:14,nps:3.529,length:456,characteristic:"Standard",difficulty:"Hard",events:970,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.385,paritySummary:{errors:77,warns:55,resets:0}},{njs:10,offset:0,notes:733,bombs:0,obstacles:14,nps:4.179,length:456,characteristic:"Standard",difficulty:"Expert",events:970,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.385,paritySummary:{errors:33,warns:25,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e14ecfe4def439051ae404353aae6aabc7d1e05f.zip",coverURL:"https://cdn.beatsaver.com/e14ecfe4def439051ae404353aae6aabc7d1e05f.jpg",previewURL:"https://cdn.beatsaver.com/e14ecfe4def439051ae404353aae6aabc7d1e05f.mp3"}],createdAt:"2018-06-24T10:25:39Z",updatedAt:"2018-06-24T10:25:39Z",lastPublishedAt:"2018-06-24T10:25:39Z"},{id:"4739",name:"Paramore - Decode",description:"Twilight = Hard\r\nParamore = Expert",uploader:{id:4285107,name:"kikaeaeon",uniqueSet:!0,hash:"5cff0b7498cc5a672c85109b",avatar:"https://cdn.beatsaver.com/avatar/103715469822816256.png",type:"DISCORD"},metadata:{bpm:164,duration:262,songName:"Decode",songSubName:"Paramore",songAuthorName:"KikaeAeon",levelAuthorName:"kikaeaeon"},stats:{plays:0,downloads:1976,upvotes:950,downvotes:25,score:.9146},uploaded:"2019-04-20T06:10:32Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"964d8f8c41aaf56aa2cfc06072eff70f599d6a3f",key:"4739",state:"Published",createdAt:"2019-04-20T06:10:32Z",sageScore:6,diffs:[{njs:10,offset:0,notes:616,bombs:0,obstacles:16,nps:2.556,length:658.75,characteristic:"Standard",difficulty:"Hard",events:798,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:241.006,paritySummary:{errors:20,warns:8,resets:0}},{njs:15,offset:0,notes:983,bombs:0,obstacles:16,nps:4.079,length:658.75,characteristic:"Standard",difficulty:"Expert",events:1165,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:241.006,paritySummary:{errors:28,warns:23,resets:0}}],downloadURL:"https://cdn.beatsaver.com/964d8f8c41aaf56aa2cfc06072eff70f599d6a3f.zip",coverURL:"https://cdn.beatsaver.com/964d8f8c41aaf56aa2cfc06072eff70f599d6a3f.jpg",previewURL:"https://cdn.beatsaver.com/964d8f8c41aaf56aa2cfc06072eff70f599d6a3f.mp3"}],createdAt:"2019-04-20T06:10:32Z",updatedAt:"2019-04-20T06:10:32Z",lastPublishedAt:"2019-04-20T06:10:32Z"},{id:"9a3f",name:"[Tokyo Machine Pack] Tokyo Machine - BUBBLES",description:"2/3\nPart of the Tokyo Machine Pack, a collab between Pixelguy, CyanSnow and I.\nMap and lights both by me.\n\nCyanSnow's account: https://beatsaver.com/uploader/5cff0b7698cc5a672c8543ac\nPixelguymm's account: https://beatsaver.com/uploader/5cff0b7698cc5a672c8541a8\n\nCheck out the trailer for the pack here: https://www.youtube.com/watch?v=lStPUnecsD8",uploader:{id:3376,name:"firestrikecm",uniqueSet:!0,hash:"5cff0b7698cc5a672c85479f",avatar:"https://cdn.beatsaver.com/avatar/3376.jpg",type:"SIMPLE"},metadata:{bpm:128,duration:232,songName:"BUBBLES",songSubName:"",songAuthorName:"Tokyo Machine",levelAuthorName:"FireStrike"},stats:{plays:0,downloads:2141,upvotes:926,downvotes:24,score:.9145},uploaded:"2020-04-12T18:21:41.920Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d4b087ffab62b7994ce433969c21ef6b29462163",key:"9a3f",state:"Published",createdAt:"2020-04-12T18:21:41.920Z",sageScore:5,diffs:[{njs:20,offset:.7,notes:883,bombs:0,obstacles:10,nps:3.868,length:487,characteristic:"Standard",difficulty:"ExpertPlus",events:3192,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:228.281,paritySummary:{errors:3,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/d4b087ffab62b7994ce433969c21ef6b29462163.zip",coverURL:"https://cdn.beatsaver.com/d4b087ffab62b7994ce433969c21ef6b29462163.jpg",previewURL:"https://cdn.beatsaver.com/d4b087ffab62b7994ce433969c21ef6b29462163.mp3"}],createdAt:"2020-04-12T18:21:41.920Z",updatedAt:"2020-04-12T18:21:41.920Z",lastPublishedAt:"2020-04-12T18:21:41.920Z"},{id:"7578",name:"Shape of You [Punk Goes Pop Vol.1] - Our Last Night",description:'A rock cover of "Shape of You" by rock band, Our Last Night. Original song by Ed Sheeran.\n\nEDIT: Fixed one missing note mismap',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:192,duration:240,songName:"Shape of You (Rock Cover)",songSubName:"",songAuthorName:"Our Last Night",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:2427,upvotes:618,downvotes:10,score:.9145},uploaded:"2019-12-10T17:53:07.422Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"dfff04c4d50466e5a6c9b72466af5e72aee623c3",key:"7578",state:"Published",createdAt:"2019-12-10T17:53:07.422Z",sageScore:4,diffs:[{njs:16,offset:0,notes:1039,bombs:0,obstacles:6,nps:4.421,length:752,characteristic:"Standard",difficulty:"ExpertPlus",events:2377,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:235,paritySummary:{errors:59,warns:56,resets:0}}],downloadURL:"https://cdn.beatsaver.com/dfff04c4d50466e5a6c9b72466af5e72aee623c3.zip",coverURL:"https://cdn.beatsaver.com/dfff04c4d50466e5a6c9b72466af5e72aee623c3.jpg",previewURL:"https://cdn.beatsaver.com/dfff04c4d50466e5a6c9b72466af5e72aee623c3.mp3"}],createdAt:"2019-12-10T17:53:07.422Z",updatedAt:"2019-12-10T17:53:07.422Z",lastPublishedAt:"2019-12-10T17:53:07.422Z"},{id:"7375",name:"Martin O' Donnell - Tip of the Spear (Halo Reach)",description:"#16\nAnyone else hyped for Halo Reach tomorrow? I know I am, probably my favorite FPS franchise. Time to grind back to where I was (even though leveling is different). Anyway, here's one of the songs from the game.\n\nN/S:\nEasy: 0.84\nNormal: 1.22\nHard (Heroic): 2.12\nExpert (Legendary): 2.61\nLights: 666 (998 on expert/legendary somehow)",uploader:{id:4284294,name:"eop-glacier",uniqueSet:!0,hash:"5d50e360adb1a20006305ca0",avatar:"https://cdn.beatsaver.com/avatar/459209214376804363.png",type:"DISCORD"},metadata:{bpm:126,duration:186,songName:"Tip of the Spear",songSubName:"",songAuthorName:"Martin O' Donnell",levelAuthorName:"EOP Glacier"},stats:{plays:0,downloads:2106,upvotes:688,downvotes:13,score:.9145},uploaded:"2019-12-03T04:18:47.641Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"16e10bdc52ee5a515fab9661df0efffcaa3712d3",key:"7375",state:"Published",createdAt:"2019-12-03T04:18:47.641Z",sageScore:4,diffs:[{njs:11,offset:0,notes:158,bombs:0,obstacles:7,nps:1.009,length:329,characteristic:"Standard",difficulty:"Easy",events:663,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:156.667,paritySummary:{errors:6,warns:0,resets:0}},{njs:13,offset:0,notes:229,bombs:0,obstacles:10,nps:1.462,length:329,characteristic:"Standard",difficulty:"Normal",events:663,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:156.667,paritySummary:{errors:1,warns:0,resets:0}},{njs:15.5,offset:0,notes:397,bombs:0,obstacles:9,nps:2.533,length:329.075,characteristic:"Standard",difficulty:"Hard",events:663,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:156.702,paritySummary:{errors:2,warns:0,resets:0}},{njs:18,offset:.2,notes:489,bombs:0,obstacles:25,nps:3.121,length:329,characteristic:"Standard",difficulty:"Expert",events:995,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:156.667,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/16e10bdc52ee5a515fab9661df0efffcaa3712d3.zip",coverURL:"https://cdn.beatsaver.com/16e10bdc52ee5a515fab9661df0efffcaa3712d3.jpg",previewURL:"https://cdn.beatsaver.com/16e10bdc52ee5a515fab9661df0efffcaa3712d3.mp3"}],createdAt:"2019-12-03T04:18:47.641Z",updatedAt:"2019-12-03T04:18:47.641Z",lastPublishedAt:"2019-12-03T04:18:47.641Z"},{id:"5a7c",name:"Bon Jovi - Livin' on a Prayer",description:"Its been waay too long since I last released a map. Been on a break from Beatsaber lately but now that I'm back I hope I can carry on getting out monthly maps like I used to.\nThis song is victim to some pretty nasty variable BPM, but hopefully if I've done it right you wont be able to notice any timing issues ;) Regardless, Hopefully you can give it a go and let me know what you think!\nVideo preview: https://www.youtube.com/watch?v=eYKJrkcHj0I",uploader:{id:4785,name:"stumi",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f720",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro",type:"SIMPLE"},metadata:{bpm:121.8,duration:248,songName:"Livin' on a Prayer",songSubName:"",songAuthorName:"Bon Jovi",levelAuthorName:"Stumi"},stats:{plays:0,downloads:8093,upvotes:1356,downvotes:46,score:.9145},uploaded:"2019-08-03T20:42:08.797Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8e4e798189ddecb9f49f624d6aa6a0648dd2650b",key:"5a7c",state:"Published",createdAt:"2019-08-03T20:42:08.797Z",sageScore:2,diffs:[{njs:10,offset:0,notes:253,bombs:4,obstacles:48,nps:1.12,length:458.614,characteristic:"Standard",difficulty:"Easy",events:1973,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225.918,paritySummary:{errors:59,warns:11,resets:2}},{njs:11,offset:0,notes:432,bombs:0,obstacles:90,nps:1.914,length:458.125,characteristic:"Standard",difficulty:"Normal",events:1974,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225.677,paritySummary:{errors:58,warns:20,resets:0}},{njs:13,offset:0,notes:755,bombs:0,obstacles:79,nps:3.345,length:458.125,characteristic:"Standard",difficulty:"Hard",events:1973,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225.677,paritySummary:{errors:45,warns:58,resets:0}},{njs:15,offset:0,notes:920,bombs:0,obstacles:86,nps:4.077,length:458.125,characteristic:"Standard",difficulty:"Expert",events:1973,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225.677,paritySummary:{errors:43,warns:47,resets:0}}],downloadURL:"https://cdn.beatsaver.com/8e4e798189ddecb9f49f624d6aa6a0648dd2650b.zip",coverURL:"https://cdn.beatsaver.com/8e4e798189ddecb9f49f624d6aa6a0648dd2650b.jpg",previewURL:"https://cdn.beatsaver.com/8e4e798189ddecb9f49f624d6aa6a0648dd2650b.mp3"}],createdAt:"2019-08-03T20:42:08.797Z",updatedAt:"2019-08-03T20:42:08.797Z",lastPublishedAt:"2019-08-03T20:42:08.797Z"},{id:"1fee",name:"Wavin' Flag (100k Contest)",description:"This is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes. Go to https://bsaber.com/100k-contest/ to register!",uploader:{id:2521,name:"darkgrisen",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fe44",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84fe44?d=retro",type:"SIMPLE"},metadata:{bpm:152,duration:215,songName:"Wavin' Flag (100k Contest)",songSubName:"K'NAAN",songAuthorName:"DarkGrisen",levelAuthorName:"DarkGrisen"},stats:{plays:0,downloads:4479,upvotes:1244,downvotes:40,score:.9145},uploaded:"2018-11-12T17:47:43Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"de9c89b59023a9e30e2c4dfc9b63dd30807b68cb",key:"1fee",state:"Published",createdAt:"2018-11-12T17:47:43Z",sageScore:6,diffs:[{njs:9,offset:0,notes:157,bombs:0,obstacles:2,nps:.765,length:520,characteristic:"Standard",difficulty:"Easy",events:528,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.263,paritySummary:{errors:18,warns:14,resets:0}},{njs:9,offset:0,notes:360,bombs:0,obstacles:2,nps:1.754,length:520,characteristic:"Standard",difficulty:"Normal",events:528,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.263,paritySummary:{errors:54,warns:25,resets:0}},{njs:10,offset:0,notes:496,bombs:0,obstacles:2,nps:2.416,length:520,characteristic:"Standard",difficulty:"Hard",events:528,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.263,paritySummary:{errors:46,warns:40,resets:0}},{njs:11,offset:0,notes:676,bombs:0,obstacles:2,nps:3.293,length:520,characteristic:"Standard",difficulty:"Expert",events:528,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.263,paritySummary:{errors:58,warns:79,resets:0}},{njs:12,offset:0,notes:869,bombs:0,obstacles:2,nps:4.234,length:520,characteristic:"Standard",difficulty:"ExpertPlus",events:528,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.263,paritySummary:{errors:47,warns:72,resets:0}}],downloadURL:"https://cdn.beatsaver.com/de9c89b59023a9e30e2c4dfc9b63dd30807b68cb.zip",coverURL:"https://cdn.beatsaver.com/de9c89b59023a9e30e2c4dfc9b63dd30807b68cb.jpg",previewURL:"https://cdn.beatsaver.com/de9c89b59023a9e30e2c4dfc9b63dd30807b68cb.mp3"}],createdAt:"2018-11-12T17:47:43Z",updatedAt:"2018-11-12T17:47:43Z",lastPublishedAt:"2018-11-12T17:47:43Z"},{id:"b741",name:"Eskimo Callboy - Hypa Hypa",description:"Genre: Post-Hardcore / Metalcore / Electronic\n\nIf you don't want to see flying words or don't have MappingExtensions, just play \"No Lyrics\" difficult.\n\nPreview by Kira Argenta: https://www.youtube.com/watch?v=pFSpAzmNbJo\nPreview by Superritchman: https://www.youtube.com/watch?v=XwGZQNPI08c\n\nFeedback (Discord): ExistenceExpire#9858\nFeedback and support: https://ko-fi.com/existenceexpire",uploader:{id:69683,name:"existenceexpire",uniqueSet:!0,hash:"5e9e16bb2a34090006a1aed5",avatar:"https://cdn.beatsaver.com/avatar/226078773517352960.png",type:"DISCORD"},metadata:{bpm:152,duration:210,songName:"Hypa Hypa",songSubName:"",songAuthorName:"Eskimo Callboy",levelAuthorName:"ExistenceExpire"},stats:{plays:0,downloads:1477,upvotes:662,downvotes:12,score:.9144},uploaded:"2020-06-28T18:04:59.590Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b39e9d698422517226f24666ebd7ae3d7aaf244a",key:"b741",state:"Published",createdAt:"2020-06-28T18:04:59.590Z",sageScore:5,diffs:[{njs:18,offset:.15301132,notes:912,bombs:59,obstacles:0,nps:4.499,length:513.5,characteristic:"Standard",difficulty:"Expert",events:3501,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:202.697,paritySummary:{errors:6,warns:16,resets:8}},{njs:18,offset:.15301132,notes:912,bombs:59,obstacles:12486,nps:4.499,length:513.5,characteristic:"Standard",difficulty:"ExpertPlus",events:3501,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:202.697,paritySummary:{errors:6,warns:16,resets:8}}],downloadURL:"https://cdn.beatsaver.com/b39e9d698422517226f24666ebd7ae3d7aaf244a.zip",coverURL:"https://cdn.beatsaver.com/b39e9d698422517226f24666ebd7ae3d7aaf244a.jpg",previewURL:"https://cdn.beatsaver.com/b39e9d698422517226f24666ebd7ae3d7aaf244a.mp3"}],createdAt:"2020-06-28T18:04:59.590Z",updatedAt:"2020-06-28T18:04:59.590Z",lastPublishedAt:"2020-06-28T18:04:59.590Z"},{id:"5e06",name:"I Will Not Bow - Breaking Benjamin",description:"Shoutouts to twitch.tv/whipstickgostop and twitch.tv/xorosegold for playtesting!",uploader:{id:4285077,name:"ris",uniqueSet:!0,hash:"5cff0b7598cc5a672c8535df",avatar:"https://cdn.beatsaver.com/avatar/191597992061435904.png",type:"DISCORD"},metadata:{bpm:108,duration:218,songName:"I Will Not Bow",songSubName:"",songAuthorName:"Breaking Benjamin",levelAuthorName:"Ris"},stats:{plays:0,downloads:2375,upvotes:819,downvotes:19,score:.9144},uploaded:"2019-08-20T03:22:59.663Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"29c0a39db6a53375d2359f4a2a492a0ea784d04f",key:"5e06",state:"Published",createdAt:"2019-08-20T03:22:59.663Z",sageScore:4,diffs:[{njs:10,offset:1,notes:310,bombs:6,obstacles:4,nps:1.516,length:368,characteristic:"Standard",difficulty:"Normal",events:318,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.444,paritySummary:{errors:60,warns:40,resets:0}},{njs:12,offset:1,notes:619,bombs:73,obstacles:4,nps:2.936,length:379.5,characteristic:"Standard",difficulty:"Hard",events:318,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:210.833,paritySummary:{errors:59,warns:67,resets:0}},{njs:16,offset:0,notes:942,bombs:73,obstacles:4,nps:4.468,length:379.5,characteristic:"Standard",difficulty:"Expert",events:318,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:210.833,paritySummary:{errors:59,warns:69,resets:0}}],downloadURL:"https://cdn.beatsaver.com/29c0a39db6a53375d2359f4a2a492a0ea784d04f.zip",coverURL:"https://cdn.beatsaver.com/29c0a39db6a53375d2359f4a2a492a0ea784d04f.jpg",previewURL:"https://cdn.beatsaver.com/29c0a39db6a53375d2359f4a2a492a0ea784d04f.mp3"}],createdAt:"2019-08-20T03:22:59.663Z",updatedAt:"2019-08-20T03:22:59.663Z",lastPublishedAt:"2019-08-20T03:22:59.663Z"},{id:"29f8",name:"Camila Cabello - Havana (Remapped)",description:"Update: Added Hard Difficulty :)\r\n\r\nI know there's a map for Havana already, but I decided to make another version of it.\r\nPlaythrough:\r\nhttps://www.youtube.com/watch?v=d7KNm2BzcqA\r\n\r\nEnjoy!\r\n\r\n- ORYGINAL (aka guachitonico)",uploader:{id:45130,name:"guachitonico",uniqueSet:!0,hash:"5cff0b7698cc5a672c854035",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c854035?d=retro",type:"SIMPLE"},metadata:{bpm:105,duration:220,songName:"Havana",songSubName:"Camila Cabello",songAuthorName:"Remapped by ORYGINAL",levelAuthorName:"guachitonico"},stats:{plays:0,downloads:2862,upvotes:1259,downvotes:41,score:.9144},uploaded:"2019-01-01T22:14:06Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5d8e56195df0a9735b4c6db2884d3ee6a2f5acef",key:"29f8",state:"Published",createdAt:"2019-01-01T22:14:06Z",sageScore:6,diffs:[{njs:10,offset:0,notes:489,bombs:0,obstacles:9,nps:2.325,length:368,characteristic:"Standard",difficulty:"Hard",events:1019,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:210.286,paritySummary:{errors:68,warns:18,resets:0}},{njs:12,offset:0,notes:777,bombs:0,obstacles:9,nps:3.695,length:368,characteristic:"Standard",difficulty:"Expert",events:1019,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:210.286,paritySummary:{errors:45,warns:16,resets:0}}],downloadURL:"https://cdn.beatsaver.com/5d8e56195df0a9735b4c6db2884d3ee6a2f5acef.zip",coverURL:"https://cdn.beatsaver.com/5d8e56195df0a9735b4c6db2884d3ee6a2f5acef.jpg",previewURL:"https://cdn.beatsaver.com/5d8e56195df0a9735b4c6db2884d3ee6a2f5acef.mp3"}],createdAt:"2019-01-01T22:14:06Z",updatedAt:"2019-01-01T22:14:06Z",lastPublishedAt:"2019-01-01T22:14:06Z"},{id:"22bf",name:"Hold Me Down - Halsey",description:"YouTube Playthrough: https://www.youtube.com/channel/UCeG7cXNLr6dKSYBKqoUvcbQ\r\nDifficulties: Expert+, Expert, Hard, Normal, Easy\r\nNote Jump Speeds From E+ to Easy: 15, 13, 11, 10, 10\r\nLighting & Events: Yes\r\nBPM: 146",uploader:{id:30754,name:"styngme",uniqueSet:!1,hash:"5cff0b7298cc5a672c84e9cd",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9cd?d=retro",type:"SIMPLE"},metadata:{bpm:146,duration:208,songName:"Hold Me Down",songSubName:"Halsey",songAuthorName:"StyngMe",levelAuthorName:"styngme"},stats:{plays:0,downloads:4092,upvotes:1204,downvotes:38,score:.9144},uploaded:"2018-11-29T03:58:10Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a6cced35a0ac357cc16d5e4328be59e52339a157",key:"22bf",state:"Published",createdAt:"2018-11-29T03:58:10Z",sageScore:7,diffs:[{njs:10,offset:0,notes:483,bombs:0,obstacles:59,nps:2.449,length:480,characteristic:"Standard",difficulty:"Easy",events:1826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.26,paritySummary:{errors:19,warns:15,resets:0}},{njs:10,offset:0,notes:588,bombs:0,obstacles:62,nps:2.981,length:480,characteristic:"Standard",difficulty:"Normal",events:1826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.26,paritySummary:{errors:40,warns:36,resets:0}},{njs:11,offset:0,notes:674,bombs:0,obstacles:65,nps:3.417,length:480,characteristic:"Standard",difficulty:"Hard",events:1826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.26,paritySummary:{errors:46,warns:53,resets:0}},{njs:13,offset:0,notes:697,bombs:0,obstacles:97,nps:3.533,length:480,characteristic:"Standard",difficulty:"Expert",events:1826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.26,paritySummary:{errors:53,warns:80,resets:0}},{njs:15,offset:0,notes:814,bombs:0,obstacles:114,nps:4.127,length:480,characteristic:"Standard",difficulty:"ExpertPlus",events:1826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.26,paritySummary:{errors:50,warns:75,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a6cced35a0ac357cc16d5e4328be59e52339a157.zip",coverURL:"https://cdn.beatsaver.com/a6cced35a0ac357cc16d5e4328be59e52339a157.jpg",previewURL:"https://cdn.beatsaver.com/a6cced35a0ac357cc16d5e4328be59e52339a157.mp3"}],createdAt:"2018-11-29T03:58:10Z",updatedAt:"2018-11-29T03:58:10Z",lastPublishedAt:"2018-11-29T03:58:10Z"},{id:"198ba",name:"Hades - The Unseen Ones",description:'One of the many great game OSTs from the game Hades !\nThis time however.......we are talking rock and roll, the epic guitars by Masahiro Aoki and Daisuke Kurosawa directed by Darren Korb !\nSome of you that played the game may not of heard of this OST.....you will need to keep on playing to encounter it !\n\nWARNING : THE DESCRIPTION MAY CONTAIN SPOILERS, PLEASE TAKE NOTE !\n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . \nIf you wish to take a lore dive with the OST based on my understanding of the story the characters POV, keep reading :D !\n...................................................................................................................................\nNarrator : Prince Zagreus, son of Hades - God of the Dead and ruler of the Underworld, has embarked on a mission to escape the Underworld to the surface.\nWhat started as a personal affair with his father and a personal will to breath fresh air from the surface turned into a dedicated mission as he discovered that his very own mother was alive and living on the surface !\nAfter the first initial escape in which Zagreus met up with her, he suddenly started to understand many circles in his life that were still very much opened thus far.\n\nUnfortunately.......each time Zagreus manages to escape and meet his mother for a chat, the Styx grant him only but a moment to exchange a few words with his mother on her cabin before he gets engulfed and taken aback to the underworld.\n\nDetermined to keep visiting his mother despite the ordeal and in order to understand why she was missing from his life, he keeps on going.\n\nHades, being unpleased by his sons rampage, decides to punish him by a "Pact of Punisment" in which Zagreus will need to sign in order to grow stronger on his expedition.\n\nOnce came a time where Zagreus pact option became increasingly intense that he had to resort to..... other punishment options that he did not know the consequences of.....\nMeanwhile, Zagreus is preparing for yet another escape attempt.\n\nZagreus : "Hmm.....which pact should I choose this time.......what\'s this? Extreme Measures?"\nNarrator : reading through the pact, Zagreus understood it meant that each underworld boss will be significantly stronger with new weapons at thier disposal.........including the last one that so happens to be his very own father !\nZagreus : "How hard can it be? let\'s go ! "\n\nNarrator: And thus Zagreus began yet another escape attempt, with the thought of the pact in his mind......\n\n.......Time goes by..............\n\nAfter fighting the Fury sisters, vanquishing the Hydra, beating Theseus and Asterius and braving through the Satyr tunnels, he finally arrives to his final showdown.....\nOpening the gates to the surface, Zagreus Green and Red eyes spot a figure in Golden-Red armor, this figure was also the final obstacle to his mothers cabin....\n\nThus the two begin a dialog :\nZagrues : "Think you can beat me this time, Father?"\nHades : "I was reviewing the terms of the Pact of Punishment to which you are bound.\nEven when my servants resort to extreme measures, they were still unable to surpass you then.\nSo now.....it is my turn !"\nZagrues : "Caught you unprepared, did I? After Theseus and his Macedonian, I half-expected to see you thundering around by some golden chariot of your own, drawn by sable steeds, that sort of thing\nBut......it\'s just you....."\nHades : "It is just me indeed.\nHowever...that should be more than necassary here.\nNo holding back this time Zagrues, are you ready?"\nZagrues : "Let\'s go !!" \n\nThus the two begin yet another brawl of darkness and blood.\nAfter exchanging countless blows, Zagrues manages to down his father twice but not before suffering a few himself, as Hades falls for the second time, Zagrues expects him to vanish back to the underwrold as would normally happen, however.......\n\nHades : " Urgh....no.......I am not......finished......with you........yet!!!"\nNarrator : and thus to Zagrues complete surprise, his father once again regains his balance and is fired with a fighting spirit he has never yet seen.\nHades : "I can still fight !!"\nZagrues : "Are you serious?!"\n\nHades : "DARKNESS !"\nNarrator : Hades vanishes once more and engulfes the entire region in darkness, which hinders Zagrues abillity to see and regains his whereabouts..........\nJust then, Zagrues remembered that he carried his father\'s keepsake sigil, one which allowed him to use his father\'s powers himself !\nZagrues : "Two can play at that game.........DARKNESS ! "\n\nAnd thus, both Hades and Zagrues vanished from the view of the naked eye, off to the final and decisive showdown of Blood and Darkness..........such is the familly......of The Unseen Ones.\n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\nAt long last I am happy to present you all one of the most pumping OSTs from the Hades soundtrack !\nTo make it more convenient, this map includes two mods to spice up the things !\nIn standard mode, you will be playing from Zagrues POV !\nHelp him beat and survive his fathers endless blows so he might see his mother once more !\nOr.....if you wish to take a different approach.\nIn One Saber mode you will infuse you sword with the power of darkness and take on the POV of no less than Hades himself !\nShow your son you can still best him in combat !\n.........................................................................................................................................\nMany thanks to monster, steg universe, Kaltern and the BSMG for providing the much needed feedback which helped forge this map and help get it to where it is now ! :)\n\nHope you enjoy ! :)\n\nMap preview by Javierattor - https://www.youtube.com/watch?v=namzq2MNvJ4\n',uploader:{id:4285616,name:"sp234",uniqueSet:!0,hash:"5f352ca7530c8e00061b14fe",avatar:"https://cdn.beatsaver.com/avatar/215418254980677643.png",type:"DISCORD"},metadata:{bpm:118,duration:248,songName:"Hades - The Unseen Ones",songSubName:"Game OST",songAuthorName:"Darren Korb",levelAuthorName:"Sp234"},stats:{plays:0,downloads:6435,upvotes:637,downvotes:11,score:.9143},uploaded:"2021-06-25T08:04:00.236Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d93d094ae17f25dedaee7796f7ca9fc078dc5060",key:"198ba",state:"Published",createdAt:"2021-06-25T08:04:00.236Z",sageScore:5,diffs:[{njs:10,offset:.6,notes:554,bombs:0,obstacles:65,nps:2.269,length:480.25,characteristic:"Standard",difficulty:"Normal",events:5589,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:244.195,paritySummary:{errors:4,warns:0,resets:0}},{njs:13,offset:-.1,notes:812,bombs:4,obstacles:135,nps:3.325,length:480.25,characteristic:"Standard",difficulty:"Hard",events:5589,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:244.195,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:-.55,notes:1238,bombs:0,obstacles:160,nps:5.069,length:480.292,characteristic:"Standard",difficulty:"Expert",events:5591,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:244.216,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:-.55,notes:878,bombs:0,obstacles:113,nps:3.595,length:480.333,characteristic:"OneSaber",difficulty:"Expert",events:5589,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:244.237,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/d93d094ae17f25dedaee7796f7ca9fc078dc5060.zip",coverURL:"https://cdn.beatsaver.com/d93d094ae17f25dedaee7796f7ca9fc078dc5060.jpg",previewURL:"https://cdn.beatsaver.com/d93d094ae17f25dedaee7796f7ca9fc078dc5060.mp3"}],createdAt:"2021-06-25T08:04:00.236Z",updatedAt:"2021-06-25T08:04:00.236Z",lastPublishedAt:"2021-06-25T08:04:00.236Z"},{id:"9725",name:"Dua Lipa - Break My Heart",description:"Dua Lipa - Break My Heart\nThis is my second Dua Lipa map and it was super fun to make and test! I hope you enjoy it. \nSpecial thanks to Treetrain1YT for testing this many times on both Steam and Quest.\n\nNormal - 2.09 NPS, 470 Notes, 10 NJS\nHard - 2.92 NPS, 655 Notes, 12 NJS\nExpert - 3.63 NPS, 814 Notes, 16 NJS",uploader:{id:4285261,name:"yomama",uniqueSet:!0,hash:"5e23f0a1054bbd0007bc1ed4",avatar:"https://cdn.beatsaver.com/avatar/153595294792155137.png",type:"DISCORD"},metadata:{bpm:113,duration:223,songName:"Break My Heart",songSubName:"",songAuthorName:"Dua Lipa",levelAuthorName:"yomama"},stats:{plays:0,downloads:2890,upvotes:942,downvotes:25,score:.9143},uploaded:"2020-04-04T03:17:06.970Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e97457ce049dbd486326861e16125fac4bb24800",key:"9725",state:"Published",createdAt:"2020-04-04T03:17:06.970Z",sageScore:4,diffs:[{njs:10,offset:0,notes:470,bombs:0,obstacles:86,nps:2.15,length:411.75,characteristic:"Standard",difficulty:"Normal",events:872,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.628,paritySummary:{errors:31,warns:25,resets:0}},{njs:12,offset:0,notes:655,bombs:0,obstacles:96,nps:2.998,length:411.5,characteristic:"Standard",difficulty:"Hard",events:1619,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.496,paritySummary:{errors:76,warns:34,resets:0}},{njs:16,offset:.25,notes:814,bombs:0,obstacles:89,nps:3.725,length:411.5,characteristic:"Standard",difficulty:"Expert",events:2719,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.496,paritySummary:{errors:91,warns:58,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e97457ce049dbd486326861e16125fac4bb24800.zip",coverURL:"https://cdn.beatsaver.com/e97457ce049dbd486326861e16125fac4bb24800.jpg",previewURL:"https://cdn.beatsaver.com/e97457ce049dbd486326861e16125fac4bb24800.mp3"}],createdAt:"2020-04-04T03:17:06.970Z",updatedAt:"2020-04-04T03:17:06.970Z",lastPublishedAt:"2020-04-04T03:17:06.970Z"},{id:"3342",name:"No More Sorrow - Linkin Park",description:"133 BPM / 3:42 Runtime\r\nEasy / 288 Notes\r\nNormal / 394 Notes\r\nHard / 549 Notes\r\nExpert / 799 Notes\r\nExpert+ / 1032 Notes\r\n\r\nI was watching early Beat Saber gameplay and noticed how the player frequently put their sabers in the walls. It gave me an idea for the Expert+ map.\r\n\r\nGameplay: https://youtu.be/Wkng-fpz78w",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:133,duration:222,songName:"No More Sorrow",songSubName:"Linkin Park",songAuthorName:"Skyler Wallace",levelAuthorName:"skylerwallace"},stats:{plays:0,downloads:2978,upvotes:1002,downvotes:28,score:.9143},uploaded:"2019-02-03T07:55:09Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e80f867f37808cd7cf1450327a4b445d2d0d8f02",key:"3342",state:"Published",createdAt:"2019-02-03T07:55:09Z",sageScore:8,diffs:[{njs:10,offset:1,notes:288,bombs:7,obstacles:7,nps:1.321,length:482,characteristic:"Standard",difficulty:"Easy",events:5629,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.444,paritySummary:{errors:117,warns:6,resets:5}},{njs:10,offset:1,notes:394,bombs:5,obstacles:10,nps:1.807,length:482,characteristic:"Standard",difficulty:"Normal",events:5628,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.444,paritySummary:{errors:88,warns:17,resets:0}},{njs:10,offset:1,notes:549,bombs:4,obstacles:11,nps:2.518,length:482,characteristic:"Standard",difficulty:"Hard",events:5629,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.444,paritySummary:{errors:41,warns:20,resets:4}},{njs:12,offset:1,notes:799,bombs:4,obstacles:17,nps:3.664,length:482,characteristic:"Standard",difficulty:"Expert",events:5629,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.444,paritySummary:{errors:33,warns:35,resets:0}},{njs:14,offset:0,notes:1032,bombs:31,obstacles:73,nps:4.733,length:482,characteristic:"Standard",difficulty:"ExpertPlus",events:5629,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.444,paritySummary:{errors:45,warns:66,resets:10}}],downloadURL:"https://cdn.beatsaver.com/e80f867f37808cd7cf1450327a4b445d2d0d8f02.zip",coverURL:"https://cdn.beatsaver.com/e80f867f37808cd7cf1450327a4b445d2d0d8f02.jpg",previewURL:"https://cdn.beatsaver.com/e80f867f37808cd7cf1450327a4b445d2d0d8f02.mp3"}],createdAt:"2019-02-03T07:55:09Z",updatedAt:"2019-02-03T07:55:09Z",lastPublishedAt:"2019-02-03T07:55:09Z"},{id:"10674",name:"Spooky Scary Skeletons (Kasger DnB Remix)",description:"A nice Drum and Bass remix on theme with Halloween.\nYou can follow me on twitch for more awesomeness at https://www.twitch.tv/pkdan\nVideo preview of the map: https://www.youtube.com/watch?v=m3pFxj2jFHs&ab_channel=PKDan\n\nLength: 3:49\nNotes: 789 (Hard) / 1092 (Expert) / 1492 (Expert+)\nNJS: 14 (Hard) / 16 (Expert) / 20 (Expert+)\nBPM: 174",uploader:{id:4284639,name:"pkdan",uniqueSet:!0,hash:"5e6d07927abb00000681e8ee",avatar:"https://cdn.beatsaver.com/avatar/315553265091739650.png",type:"DISCORD"},metadata:{bpm:174,duration:229,songName:"Spooky Scary Skeletons (Kasger Remix)",songSubName:"",songAuthorName:"Andrew Gold",levelAuthorName:"pkdan"},stats:{plays:0,downloads:4006,upvotes:682,downvotes:13,score:.9142},uploaded:"2020-10-30T19:19:27.266Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"20341d92a0871dfdf2f8d39633274fdaa67a70ed",key:"10674",state:"Published",createdAt:"2020-10-30T19:19:27.266Z",sageScore:5,diffs:[{njs:14,offset:.3,notes:789,bombs:0,obstacles:2,nps:3.575,length:640,characteristic:"Standard",difficulty:"Hard",events:4093,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.69,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:1092,bombs:0,obstacles:2,nps:4.948,length:640,characteristic:"Standard",difficulty:"Expert",events:4093,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.69,paritySummary:{errors:0,warns:0,resets:0}},{njs:20,offset:-.3,notes:1492,bombs:0,obstacles:2,nps:6.761,length:640,characteristic:"Standard",difficulty:"ExpertPlus",events:4093,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.69,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/20341d92a0871dfdf2f8d39633274fdaa67a70ed.zip",coverURL:"https://cdn.beatsaver.com/20341d92a0871dfdf2f8d39633274fdaa67a70ed.jpg",previewURL:"https://cdn.beatsaver.com/20341d92a0871dfdf2f8d39633274fdaa67a70ed.mp3"}],createdAt:"2020-10-30T19:19:27.266Z",updatedAt:"2020-10-30T19:19:27.266Z",lastPublishedAt:"2020-10-30T19:19:27.266Z"},{id:"4e81",name:"Katy Perry - Firework",description:"Thank you Joetastic for the lossless file",uploader:{id:4285107,name:"kikaeaeon",uniqueSet:!0,hash:"5cff0b7498cc5a672c85109b",avatar:"https://cdn.beatsaver.com/avatar/103715469822816256.png",type:"DISCORD"},metadata:{bpm:124,duration:229,songName:"Firework",songSubName:"Katy Perry",songAuthorName:"KikaeAeon",levelAuthorName:"kikaeaeon"},stats:{plays:0,downloads:3779,upvotes:1331,downvotes:45,score:.9142},uploaded:"2019-05-22T14:18:50Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"410a4f5ae778f9072b9136f0df5e151156cd81e3",key:"4e81",state:"Published",createdAt:"2019-05-22T14:18:50Z",sageScore:5,diffs:[{njs:10,offset:0,notes:563,bombs:0,obstacles:17,nps:2.51,length:463.5,characteristic:"Standard",difficulty:"Hard",events:682,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:224.274,paritySummary:{errors:33,warns:7,resets:0}},{njs:15,offset:0,notes:927,bombs:0,obstacles:26,nps:4.133,length:463.5,characteristic:"Standard",difficulty:"ExpertPlus",events:988,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:224.274,paritySummary:{errors:25,warns:17,resets:0}}],downloadURL:"https://cdn.beatsaver.com/410a4f5ae778f9072b9136f0df5e151156cd81e3.zip",coverURL:"https://cdn.beatsaver.com/410a4f5ae778f9072b9136f0df5e151156cd81e3.jpg",previewURL:"https://cdn.beatsaver.com/410a4f5ae778f9072b9136f0df5e151156cd81e3.mp3"}],createdAt:"2019-05-22T14:18:50Z",updatedAt:"2019-05-22T14:18:50Z",lastPublishedAt:"2019-05-22T14:18:50Z"},{id:"1622c",name:"Gurenge (TV Size) [Demon Slayer: Kimetsu no Yaiba Opening] - LiSA",description:"",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:135,duration:90,songName:"Gurenge (TV Size)",songSubName:"",songAuthorName:"LiSA",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:16462,upvotes:896,downvotes:23,score:.9141},uploaded:"2021-04-01T08:54:27.557Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"62a63aa11f61623fdd69411bf73ab1082d4558d6",key:"1622c",state:"Published",createdAt:"2021-04-01T08:54:27.557Z",sageScore:5,diffs:[{njs:13,offset:0,notes:294,bombs:0,obstacles:10,nps:3.375,length:196,characteristic:"Standard",difficulty:"Hard",events:12271,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.111,paritySummary:{errors:0,warns:0,resets:0}},{njs:15,offset:-.2,notes:399,bombs:0,obstacles:10,nps:4.58,length:196,characteristic:"Standard",difficulty:"Expert",events:12271,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.111,paritySummary:{errors:2,warns:2,resets:0}},{njs:18,offset:-.5,notes:482,bombs:0,obstacles:18,nps:5.533,length:196,characteristic:"Standard",difficulty:"ExpertPlus",events:12268,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.111,paritySummary:{errors:3,warns:5,resets:0}}],downloadURL:"https://cdn.beatsaver.com/62a63aa11f61623fdd69411bf73ab1082d4558d6.zip",coverURL:"https://cdn.beatsaver.com/62a63aa11f61623fdd69411bf73ab1082d4558d6.jpg",previewURL:"https://cdn.beatsaver.com/62a63aa11f61623fdd69411bf73ab1082d4558d6.mp3"}],createdAt:"2021-04-01T08:54:27.557Z",updatedAt:"2021-04-01T08:54:27.557Z",lastPublishedAt:"2021-04-01T08:54:27.557Z"},{id:"6888",name:"The Glory Days - Tia",description:"Expert and Hard diff companion to https://beatsaver.com/beatmap/56d0\nKikis lights, diffs by me. Modded by Fraies and Redmagi.",uploader:{id:4284577,name:"uninstaller",uniqueSet:!0,hash:"5cff0b7598cc5a672c85248e",avatar:"https://cdn.beatsaver.com/avatar/84840552935194624.png",type:"DISCORD"},metadata:{bpm:184,duration:254,songName:"The Glory Days",songSubName:"",songAuthorName:"Tia",levelAuthorName:"Kikis & Uninstaller"},stats:{plays:0,downloads:2754,upvotes:1511,downvotes:55,score:.9141},uploaded:"2019-10-08T01:17:01.471Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"a6ccabb105d0f2c24fe9f1dd6e4445782bc55616",key:"6888",state:"Published",createdAt:"2019-10-08T01:17:01.471Z",sageScore:6,diffs:[{njs:13,offset:0,notes:781,bombs:30,obstacles:11,nps:3.243,length:738.5,characteristic:"Standard",difficulty:"Hard",events:3865,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:240.815,paritySummary:{errors:1,warns:1,resets:1},stars:2.04},{njs:15,offset:0,notes:1177,bombs:32,obstacles:11,nps:4.888,length:738.5,characteristic:"Standard",difficulty:"Expert",events:3865,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:240.815,paritySummary:{errors:0,warns:0,resets:3},stars:3.31}],downloadURL:"https://cdn.beatsaver.com/a6ccabb105d0f2c24fe9f1dd6e4445782bc55616.zip",coverURL:"https://cdn.beatsaver.com/a6ccabb105d0f2c24fe9f1dd6e4445782bc55616.jpg",previewURL:"https://cdn.beatsaver.com/a6ccabb105d0f2c24fe9f1dd6e4445782bc55616.mp3"}],createdAt:"2019-10-08T01:17:01.471Z",updatedAt:"2019-10-08T01:17:01.471Z",lastPublishedAt:"2019-10-08T01:17:01.471Z"},{id:"5c92",name:"Caravan Palace - Lone Digger",description:"\nBPM: 124 | 3 Difficulties (Expert+, Expert, Hard) | Lighting done by me\n---------------------------------------------------------------------------------------------\n[Expert+]\nNJS: 19\nNotes: 1255\n---------------------------------------------------------------------------------------------\n[Expert]\nNotes: 986\nNJS: 18\n---------------------------------------------------------------------------------------------\n[Hard]\nNotes: 652\nNJS: 17\n---------------------------------------------------------------------------------------------\n\nMy Discord if you want to give feedback or just talk to me: Yun0#1355",uploader:{id:18845,name:"yun0",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f6ca",avatar:"https://cdn.beatsaver.com/avatar/18845.jpg",type:"SIMPLE"},metadata:{bpm:124,duration:231,songName:"Lone Digger",songSubName:"",songAuthorName:"Caravan Palace",levelAuthorName:"Yun0"},stats:{plays:0,downloads:2362,upvotes:1174,downvotes:37,score:.9141},uploaded:"2019-08-13T03:30:08.712Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"928da96d4e5fcfeb87ac1cc6fcf6287b2f4c5e2d",key:"5c92",state:"Published",createdAt:"2019-08-13T03:30:08.712Z",sageScore:6,diffs:[{njs:17,offset:0,notes:652,bombs:0,obstacles:4,nps:2.932,length:459.5,characteristic:"Standard",difficulty:"Hard",events:3826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:222.339,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:-.25,notes:986,bombs:0,obstacles:6,nps:4.435,length:459.5,characteristic:"Standard",difficulty:"Expert",events:3826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:222.339,paritySummary:{errors:3,warns:0,resets:0}},{njs:19,offset:.3,notes:1255,bombs:4,obstacles:49,nps:5.596,length:463.5,characteristic:"Standard",difficulty:"ExpertPlus",events:3826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:224.274,paritySummary:{errors:9,warns:6,resets:2}}],downloadURL:"https://cdn.beatsaver.com/928da96d4e5fcfeb87ac1cc6fcf6287b2f4c5e2d.zip",coverURL:"https://cdn.beatsaver.com/928da96d4e5fcfeb87ac1cc6fcf6287b2f4c5e2d.jpg",previewURL:"https://cdn.beatsaver.com/928da96d4e5fcfeb87ac1cc6fcf6287b2f4c5e2d.mp3"}],createdAt:"2019-08-13T03:30:08.712Z",updatedAt:"2019-08-13T03:30:08.712Z",lastPublishedAt:"2019-08-13T03:30:08.712Z"},{id:"1bc4",name:"Without Me (Nurko & Miles Away Remix) - Halsey",description:"Difficulties: Expert+ Only",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:140,duration:257,songName:"Without Me (Nurko & Miles Away Remix)",songSubName:"Halsey",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:1240,upvotes:681,downvotes:13,score:.9141},uploaded:"2018-10-23T03:10:41Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e447ac77708869ac151546110aecda97acac2cab",key:"1bc4",state:"Published",createdAt:"2018-10-23T03:10:41Z",sageScore:5,diffs:[{njs:15,offset:0,notes:1206,bombs:0,obstacles:1,nps:4.885,length:576,characteristic:"Standard",difficulty:"ExpertPlus",events:1646,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:246.857,paritySummary:{errors:102,warns:151,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e447ac77708869ac151546110aecda97acac2cab.zip",coverURL:"https://cdn.beatsaver.com/e447ac77708869ac151546110aecda97acac2cab.jpg",previewURL:"https://cdn.beatsaver.com/e447ac77708869ac151546110aecda97acac2cab.mp3"}],createdAt:"2018-10-23T03:10:41Z",updatedAt:"2018-10-23T03:10:41Z",lastPublishedAt:"2018-10-23T03:10:41Z"},{id:"900",name:"Limbo - Daddy Yankee",description:"If you don't at least try to limbo, you didn't really finish the map.",uploader:{id:50121,name:"ayewyn",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f7ef",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f7ef?d=retro",type:"SIMPLE"},metadata:{bpm:125,duration:225,songName:"Limbo",songSubName:"Daddy Yankee",songAuthorName:"Ayewyn",levelAuthorName:"ayewyn"},stats:{plays:0,downloads:6900,upvotes:2388,downvotes:106,score:.9141},uploaded:"2018-07-12T13:34:01Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"2738e2374b821b6aa9839f128a70caae8333cb1c",key:"900",state:"Published",createdAt:"2018-07-12T13:34:01Z",sageScore:5,diffs:[{njs:10,offset:0,notes:232,bombs:0,obstacles:24,nps:1.073,length:450.5,characteristic:"Standard",difficulty:"Easy",events:853,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.24,paritySummary:{errors:33,warns:76,resets:0},stars:.95},{njs:10,offset:0,notes:464,bombs:0,obstacles:12,nps:2.146,length:450.5,characteristic:"Standard",difficulty:"Normal",events:853,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.24,paritySummary:{errors:35,warns:141,resets:0}},{njs:10,offset:0,notes:637,bombs:0,obstacles:12,nps:2.943,length:451,characteristic:"Standard",difficulty:"Hard",events:853,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.48,paritySummary:{errors:34,warns:190,resets:0}},{njs:10,offset:0,notes:689,bombs:0,obstacles:12,nps:3.181,length:451.25,characteristic:"Standard",difficulty:"Expert",events:853,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.6,paritySummary:{errors:44,warns:187,resets:0}}],downloadURL:"https://cdn.beatsaver.com/2738e2374b821b6aa9839f128a70caae8333cb1c.zip",coverURL:"https://cdn.beatsaver.com/2738e2374b821b6aa9839f128a70caae8333cb1c.jpg",previewURL:"https://cdn.beatsaver.com/2738e2374b821b6aa9839f128a70caae8333cb1c.mp3"}],createdAt:"2018-07-12T13:34:01Z",updatedAt:"2018-07-12T13:34:01Z",lastPublishedAt:"2018-07-12T13:34:01Z"}]},function(e,t,a){if(AFRAME.registerComponent("song-info-positioner",{schema:{victory:{default:!1}},update:function(){this.data.victory?this.el.object3D.position.y=-1.2:this.el.object3D.position.y=-1}}),window.AFRAME){const t=["song-info-positioner"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.progress.scale.x=1e-4})},update:function(e){this.progress.scale.x=1e-4},updateInfo:function(){const e=this.el.sceneEl.components.song.source;if(!e||!e.buffer)return;const t=this.el.sceneEl.components.song.getCurrentTime()/e.buffer.duration;t&&(this.progress.scale.x=t)},tick:function(){this.data.enabled&&this.updateInfo()}}),window.AFRAME){const t=["song-progress-info"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.audioAnalyser.resumeContext();const t=this.audioAnalyser.gainNode.gain;t.cancelScheduledValues(0),t.setValueAtTime(.05,0),this.source=e.detail,this.source.start(),this.el.emit("victory")},s),void this.audioAnalyser.refreshSource();!e.isBeatsPreloaded&&this.data.isBeatsPreloaded&&this.source&&this.startAudio(),!e.challengeId||t.challengeId?(e.isPlaying&&!t.isPlaying&&(this.audioAnalyser.suspendContext(),this.isAudioPlaying=!1),!e.isPlaying&&t.isPlaying&&this.source&&(this.audioAnalyser.resumeContext(),this.isAudioPlaying=!0)):this.stopAudio()}else this.onGameOver()},processAudio:function(){this.el.sceneEl.emit("songprocessstart",null,!1),this.getAudio().then(e=>{this.el.sceneEl.emit("songprocessfinish",null,!1)}).catch(console.error)},getAudio:function(){const e=this.data;return this.source&&this.stopAudio(),this.isAudioPlaying=!1,new Promise(t=>{e.analyserEl.addEventListener("audioanalyserbuffersource",e=>{this.source=e.detail,t(this.source)},s),this.analyserSetter.src=this.data.audio,e.analyserEl.setAttribute("audioanalyser",this.analyserSetter)})},stopAudio:function(){this.source?(this.source.onended=null,this.isAudioPlaying&&this.source.stop(),this.source.disconnect(),this.source=null,this.isAudioPlaying=!1):console.warn("[song] Tried to stopAudio, but not playing.")},onSongComplete:function(){this.data.isPlaying&&this.el.emit("songcomplete")},onGameOver:function(){this.isAudioPlaying=!1;const e=this.source.playbackRate;e.setValueAtTime(e.value,this.context.currentTime),e.linearRampToValueAtTime(0,this.context.currentTime+3.5);const t=this.audioAnalyser.gainNode.gain;t.setValueAtTime(t.value,this.context.currentTime),t.linearRampToValueAtTime(0,this.context.currentTime+3.5),setTimeout(()=>{this.data.isGameOver&&this.stopAudio()},3500)},onRestart:function(){this.isAudioPlaying=!1,this.source&&this.source.disconnect();this.audioAnalyser.gainNode.gain.cancelScheduledValues(0),this.data.analyserEl.addEventListener("audioanalyserbuffersource",e=>{this.source=e.detail,this.el.sceneEl.emit("songloadfinish",null,!1)},s),this.audioAnalyser.refreshSource()},onWallHitStart:function(){this.audioAnalyser.gainNode.gain.linearRampToValueAtTime(.1,this.context.currentTime+.1)},onWallHitEnd:function(){this.audioAnalyser.gainNode.gain.linearRampToValueAtTime(.5,this.context.currentTime+.1)},startAudio:function(){this.audioAnalyser.gainNode.gain.setValueAtTime(.5,this.context.currentTime),this.songStartTime=this.context.currentTime,this.source.onended=this.onSongComplete,this.source.start(0,n||0),this.isAudioPlaying=!0},getCurrentTime:function(){return this.context.currentTime-this.songStartTime}}),window.AFRAME){const t=["song"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s(Math.random()-.5)*this.data.radius*2,t=new THREE.BufferGeometry;this.material=this.el.sceneEl.systems.materials.stars;const a=[];for(let t=0;t{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{const s=a.detail.model.getObjectByName(t.name);e.setObject3D("mesh",s.clone()),e.setAttribute("material","shader","flat"),e.emit("subobjectloaded",null,!1)})}}),window.AFRAME){const t=["sub-object"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;so.x&&a.xo.y&&1-a.y [raycaster]"].join(",")),this.hand){if(!this.hand.hasLoaded)return void this.hand.addEventListener("loaded",this.setupHand.bind(this));var e=this.hand.components.raycaster,t={};if(e){if(this.hand.ownRaycaster=!1,this.data.injectToRaycasterObjects){var a=e.data.objects.split(",");-1===a.indexOf(".keyboardRaycastable")&&a.push(".keyboardRaycastable"),t.objects=a.join(",").replace(/^,/,""),this.hand.setAttribute("raycaster",t)}}else this.hand.ownRaycaster=!0,t.showLine=this.data.show,t.enabled=this.data.show,this.data.injectToRaycasterObjects&&(t.objects=".keyboardRaycastable"),this.hand.setAttribute("raycaster",t);this.raycaster=this.hand.components.raycaster}else console.error('super-keyboard: no controller found. Add with controller or specify with super-keyboard="hand: #selectorToController".')},filter:function(e){if(""===e)return"";for(var t=0;t0?e.substr(0,this.data.maxLength):e},click:function(e){if(this.keyHover){switch(this.keyHover.key){case"Enter":this.accept();break;case"Insert":return;case"Delete":this.rawValue=this.rawValue.substr(0,this.rawValue.length-1);var t=this.filter(this.rawValue);this.el.setAttribute("super-keyboard","value",t),this.updateTextInput(t),this.changeEventDetail.value=t,this.el.emit("superkeyboardchange",this.changeEventDetail);break;case"Shift":this.shift=!this.shift,this.keyHover.el.setAttribute("material","color",this.shift?this.data.keyHoverColor:this.data.keyBgColor);break;case"Escape":this.dismiss();break;default:if(this.data.maxLength>0&&this.rawValue.length>this.data.maxLength)break;this.rawValue+=this.shift?this.keyHover.key.toUpperCase():this.keyHover.key;t=this.filter(this.rawValue);this.el.setAttribute("super-keyboard","value",t),this.updateTextInput(t),this.changeEventDetail.value=t,this.el.emit("superkeyboardchange",this.changeEventDetail)}this.updateKeyColorPlane(this.keyHover.key,this.keyPressColor);var a=this;setTimeout((function(){a.updateKeyColorPlane(a.keyHover.key,a.keyHoverColor)}),100),this.updateCursorPosition()}},open:function(){this.el.object3D.visible=!0,this.hand&&this.hand.ownRaycaster&&this.hand.setAttribute("raycaster",{showLine:!0,enabled:!0})},close:function(){this.el.object3D.visible=!1,this.hand&&this.hand.ownRaycaster&&this.hand.setAttribute("raycaster",{showLine:!1,enabled:!1})},accept:function(){this.el.object3D.visible=!1,this.hand&&this.hand.ownRaycaster&&this.hand.setAttribute("raycaster",{showLine:!1,enabled:!1}),this.el.emit("superkeyboardinput",{value:this.data.value}),this.data.show=!1},dismiss:function(){this.data.value=this.defaultValue,this.updateTextInput(),this.el.object3D.visible=!1,this.hand&&this.hand.ownRaycaster&&this.hand.setAttribute("raycaster",{showLine:!1,enabled:!1}),this.el.emit("superkeyboarddismiss"),this.data.show=!1},blur:function(){this.focused=!1,this.keyHover&&"Shift"!==this.keyHover.key&&(this.keyColorPlane.object3D.visible=!1),this.keyHover=null},hover:function(e){this.focused=!0},startBlinking:function(){this.stopBlinking(),this.intervalId=window.setInterval(this.blink.bind(this),this.data.blinkingSpeed)},stopBlinking:function(){window.clearInterval(this.intervalId),this.intervalId=0},blink:function(){this.cursor.object3D.visible=!this.cursor.object3D.visible},setCustomFilter:function(e){this.userFilterFunc=e},addCustomModel:function(e,t){e&&(s[e]=t)},updateCursorPosition:function(){var e=this.textInput.components.text.currentFont;if(!e){var t=this;return this.cursor.object3D.visible=!1,void window.setTimeout((function(){t.updateCursorPosition(),t.startBlinking()}),700)}var a=this.data.width,o=s[this.data.model],i=-this.inputRect.h/2*a/2.4+o.inputOffsetY*a,c=this.data.width/this.textInput.components.text.data.wrapCount,d=0,l=n[this.textInput.components.text.data.font];void 0===l&&(l=20);for(var u=0;u=t)return"..."+e.substring(e.length-t,e.length);return e}(e||this.data.value,12))}}),window.AFRAME){const t=["super-keyboard"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.detail&&"off"!==e.detail?this.setColor("color1",e.detail):this.setColor("color1","primary")}),e.sceneEl.addEventListener("curveoddstageeventcolor",e=>{e.detail&&"off"!==e.detail?this.setColor("color2",e.detail):this.setColor("color2","secondary")})},setColor:function(e,t){const a=this.el.components.material.material.uniforms[e].value,n=this.el.sceneEl.systems.materials.scheme[t];s.set(n),a.x=s.r,a.y=s.g,a.z=s.b}}),window.AFRAME){const t=["supercurve-color"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s=1)return;const s=this.supercurve,n=s.curve;if(!n)return;this.curveProgress=this.curveProgress||0;const r=a.speed*(t/1e3);if(this.curveProgress+=r/this.supercurve.fullLength,this.data.target.components.material.material.uniforms.cameraPercent.value=this.curveProgress,this.curveProgress>=1)return this.curveProgress=1,void(this.data.target.components.material.material.uniforms.cameraPercent.value=this.curveProgress);n.getPointAt(this.curveProgress,this.el.object3D.position),this.songProgress=s.curveProgressToSongProgress(this.curveProgress),s.alignToCurve(this.songProgress,this.el.object3D)}}()}),window.AFRAME){const t=["supercurve","supercurve-follow"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s0)){c=n;break}c=n-1}if(s[n=c]===a)return n/(r-1);var d=s[n];return(n+(a-d)/(s[n+1]-d))/(r-1)},getTangent:(o=new THREE.Vector3,i=new THREE.Vector3,function(e,t){var a,s=e-1e-4,n=e+1e-4;return s<0&&(s=0),n>1&&(n=1),this.getPoint(s,o),this.getPoint(n,i),t?(a=t).copy(i).sub(o):a=i.clone().sub(o),a.normalize()}),getTangentAt:function(e,t){var a=this.getUtoTmapping(e);return this.getTangent(a,t)},computeFrenetFrames:function(e,t){var r,o,i,c=new s,d=[],l=[],u=[],h=new s,m=new n;for(r=0;r<=e;r++)o=r/e,d[r]=this.getTangentAt(o),d[r].normalize();l[0]=new s,u[0]=new s;var f=Number.MAX_VALUE,p=Math.abs(d[0].x),b=Math.abs(d[0].y),y=Math.abs(d[0].z);for(p<=f&&(f=p,c.set(1,0,0)),b<=f&&(f=b,c.set(0,1,0)),y<=f&&c.set(0,0,1),h.crossVectors(d[0],c).normalize(),l[0].crossVectors(d[0],h),u[0].crossVectors(d[0],l[0]),r=1;r<=e;r++)l[r]=l[r-1].clone(),u[r]=u[r-1].clone(),h.crossVectors(d[r-1],d[r]),h.length()>Number.EPSILON&&(h.normalize(),i=Math.acos(a.clamp(d[r-1].dot(d[r]),-1,1)),l[r].applyMatrix4(m.makeRotationAxis(h,i))),u[r].crossVectors(d[r],l[r]);if(!0===t)for(i=Math.acos(a.clamp(l[0].dot(l[e]),-1,1)),i/=e,d[0].dot(h.crossVectors(l[0],l[e]))>0&&(i=-i),r=1;r<=e;r++)l[r].applyMatrix4(m.makeRotationAxis(d[r],i*r)),u[r].crossVectors(d[r],l[r]);return{tangents:d,normals:l,binormals:u}},clone:function(){return(new this.constructor).copy(this)},copy:function(e){return this.arcLengthDivisions=e.arcLengthDivisions,this},toJSON:function(){var e={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return e.arcLengthDivisions=this.arcLengthDivisions,e.type=this.type,e},fromJSON:function(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}}),THREE.Curve=r},function(e,t){const a=THREE.Vector3,s=THREE.Curve;function n(){var e=0,t=0,a=0,s=0;function n(n,r,o,i){e=n,t=o,a=-3*n+3*r-2*o-i,s=2*n-2*r+o+i}return{initCatmullRom:function(e,t,a,s,r){n(t,a,r*(a-e),r*(s-t))},initNonuniformCatmullRom:function(e,t,a,s,r,o,i){var c=(t-e)/r-(a-e)/(r+o)+(a-t)/o,d=(a-t)/o-(s-t)/(o+i)+(s-a)/i;n(t,a,c*=o,d*=o)},calc:function(n){var r=n*n;return e+t*n+a*r+s*(r*n)}}}var r=new a,o=new n,i=new n,c=new n;function d(e,t,a,n){s.call(this),this.type="CatmullRomCurve3",this.points=e||[],this.closed=t||!1,this.curveType=a||"centripetal",this.tension=n||.5}d.prototype=Object.create(s.prototype),d.prototype.constructor=d,d.prototype.isCatmullRomCurve3=!0,d.prototype.getPoint=function(e,t){var s,n,d,l,u=t||new a,h=this.points,m=h.length,f=(m-(this.closed?0:1))*e,p=Math.floor(f),b=f-p;if(this.closed?p+=p>0?0:(Math.floor(Math.abs(p)/m)+1)*m:0===b&&p===m-1&&(p=m-2,b=1),this.closed||p>0?s=h[(p-1)%m]:(r.subVectors(h[0],h[1]).add(h[0]),s=r),n=h[p%m],d=h[(p+1)%m],this.closed||p+2{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;sthis.startTime+1e3&&(this.el.object3D.visible=!1,this.el.pause())}}),window.AFRAME){const t=["supercutfx"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s0;e--)n=3*e,a[n]=a[n-3],a[n+1]=a[n-2],a[n+2]=a[n-1],n+=r,a[n]=a[n-3],a[n+1]=a[n-2],a[n+2]=a[n-1];this.target.getWorldPosition(s),a[0]=s.x,a[1]=s.y+o,a[2]=s.z-.1,a[r+0]=s.x,a[r+1]=s.y-o,a[r+2]=s.z-.1,this.geometry.attributes.position.needsUpdate=!0}}),window.AFRAME){const t=["tail"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s=this.data.value&&(this.currentValue=this.data.value,this.data.emit&&this.el.emit("textcounterdone",null,!1),this.hasCompleted=!0),this.textValue.value=`${this.data.prefix}${this.decimals(this.currentValue)}${this.data.suffix}`,this.el.setAttribute("text",this.textValue))},decimals:function(e){var t=Math.pow(10,this.data.decimals);return(parseInt(e*t)/t).toFixed(this.data.decimals)}}),window.AFRAME){const t=["text-counter"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s=t)return e.substring(0,t-3)+"...";return e}(this.data.value,this.data.length))}}),window.AFRAME){const t=["text-truncate"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;sthis.enabledTime+250&&(this.mesh.visible=!0),this.mesh.material.uniforms.pulse.value*=.9,this.sampleBladePosition())},pulse:function(){this.mesh.material.uniforms.pulse.value=1},addLayer:function(e){const t=this.bladeColor,a=this.colors,s=this.segments,n=this.vertices;let r=2/s;this.layers>=this.maxLayers&&(this.layers=0);const o=this.layers*e;e=o+e;const i=this.layers*s*18,c=this.layers*s*24;for(let d=0;d{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s1&&(a=1),t.getPointAt(a,e.object3D.position),t.alignToCurve(a,e.object3D),e.play(),this.tunnels.push(e),this.requestTunnel()},clearTunnels:function(){this.timeout&&(clearTimeout(this.timeout),this.timeout=null);for(let e=0;ethis.curveFollowRig.object3D.position.z+5))return;{const t=this.tunnels.splice(e,1)[0];t.object3D.visible=!1,this.pool.returnEntity(t)}}}}),window.AFRAME){const t=["tunnels"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s=this.songPosition&&(this.isRaycastable=!0,this.el.setAttribute("data-wall-active",""),this.isCeiling||(this.el.setAttribute("data-weapon-particles",""),this.el.setAttribute("raycastable-game",""))),a>=this.backPosition+.01&&this.returnToPool()},onGenerate:function(e,t,a,s,n,r){const o=this.el;this.isCeiling=n,this.backPosition=r,this.songPosition=e,this.setWallGeometry(e,t,a,s,n),o.getObject3D("mesh").material.uniforms.opacity.value=0,o.object3D.position.y=-5,o.components.animation__fadein.beginAnimation(),o.components.animation__scalein.beginAnimation()},setWallGeometry:function(){const e=new THREE.Vector3,t=new THREE.Vector3,a=new THREE.Vector3;return function(s,n,r,o,i){const c=this.el.sceneEl.components["beat-system"],d=this.curveEl.components.supercurve,l=s,u=s+o/d.length,h=i?1.5:2.5,m=-1*c.horizontalPositions[n]-r/2+.25;t.x=m-r/2,a.x=m+r/2;const f=(this.geometry=new THREE.BoxBufferGeometry(r,h,1,1,1,30)).attributes.position.array;for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s0,e.search.hasNext=e.search.page=t?e.substring(0,t-3)+"...":e:""}AFRAME.registerState({nonBindedStateKeys:["genres"],initialState:{activeHand:localStorage.getItem("hand")||"right",challenge:{audio:"",author:"",difficulty:"",beatmapCharacteristic:"",id:AFRAME.utils.getUrlParameter("challenge"),image:"",isBeatsPreloaded:!1,numBeats:void 0,songDuration:0,songName:"",songNameShort:"",songSubName:"",metadata:{}},colorPrimary:n.a.schemes[m].primary,colorScheme:m,colorSecondary:n.a.schemes[m].secondary,colorSecondaryBright:n.a.schemes[m].secondarybright,colorTertiary:n.a.schemes[m].tertiary,controllerType:"",damage:0,difficultyFilter:"All",difficultyFilterMenuOpen:!1,favorites:f,gameMode:"ride",genre:"",genres:a(193),genreMenuOpen:!1,has3DOFVR:!1,has6DOFVR:!1,hasSongLoadError:!1,hasVR:AFRAME.utils.device.checkHeadsetConnected()||"true"===AFRAME.utils.getUrlParameter("debugvr"),introActive:!h,inVR:"true"===AFRAME.utils.getUrlParameter("debugvr"),isIOS:AFRAME.utils.device.isIOS(),isGameOver:!1,isLoading:!1,isMenuOpening:!h,isPaused:!1,isPlaying:!1,isSearching:!1,isSongProcessing:!1,isVictory:!1,isZipFetching:!1,leaderboard:[],leaderboardFetched:!1,leaderboardQualified:!1,leaderboardNames:"",leaderboardScores:"",mainMenuActive:!1,menuActive:h,menuDifficulties:[],menuDifficultiesIds:[],menuSelectedChallenge:{author:"",difficulty:"",beatmapCharacteristic:"",downloads:"",downloadsText:"",genre:"",id:"",index:-1,image:"",isFavorited:!1,numBeats:void 0,songDuration:0,songInfoText:"",songLength:void 0,numBeats:void 0,songName:"",songSubName:"",version:"",metadata:{}},optionsMenuOpen:!1,playlist:"",playlists:a(194),playlistMenuOpen:!1,playlistTitle:"",score:{accuracy:100,accuracyScore:0,accuracyInt:100,activePanel:!1,beatsHit:0,beatsMissed:0,beatsText:"",combo:0,finalAccuracy:100,maxCombo:0,rank:"",score:0},search:{activePanel:!0,page:0,hasError:!1,hasNext:!1,hasPrev:!1,query:"",queryText:"",results:[],songNameTexts:"",songSubNameTexts:"",url:"",urlPage:0},searchResultsPage:[],speed:10},handlers:{activehandswap:e=>{e.activeHand="right"===e.activeHand?"left":"right",localStorage.setItem("activeHand",e.activeHand)},beathit:(e,t)=>{e.damage>.25&&(e.damage-=.25),e.score.beatsHit++,e.score.combo++,e.score.combo>e.score.maxCombo&&(e.score.maxCombo=e.score.combo),t.score=isNaN(t.score)?100:t.score,e.score.accuracyScore+=t.percent,e.score.score+=Math.floor(t.score),R(e)},beatmiss:e=>{e.score.beatsMissed++,A(e),R(e)},beatwrong:e=>{e.score.beatsMissed++,A(e),R(e)},beatloaderpreloadfinish:e=>{e.menuActive||(e.challenge.isBeatsPreloaded=!0)},colorschemechange:(e,t)=>{e.colorScheme=t,e.colorPrimary=n.a.schemes[t].primary,e.colorSecondary=n.a.schemes[t].secondary,e.colorSecondaryBright=n.a.schemes[t].secondarybright,e.colorTertiary=n.a.schemes[t].tertiary,localStorage.setItem("colorScheme",t)},controllerconnected:(e,t)=>{e.controllerType=t.name,e.has6DOFVR=-1!==["oculus-quest-controls","oculus-touch-controls","vive-controls","windows-motion-controls","generic-tracked-controller-controls"].indexOf(e.controllerType),e.has3DOFVR=-1!==["oculus-go-controls","daydream-controls"].indexOf(e.controllerType)},debugbeatpositioning:e=>{e.gameMode="classic",e.introActive=!1,e.menuActive=!1},debuggameplay:e=>{w(e),Object.assign(e.challenge,e.menuSelectedChallenge),e.menuActive=!1,e.menuSelectedChallenge.id="",e.isSearching=!1,e.isLoading=!1},debuggameover:e=>{e.isGameOver=!0,e.menuActive=!1},debugloading:e=>{u.id="-1",Object.assign(e.menuSelectedChallenge,u),Object.assign(e.challenge,u),e.menuActive=!1,e.isSongProcessing=!0},debugvictory:e=>{Object.assign(e.menuSelectedChallenge,u),Object.assign(e.challenge,u),e.isVictory=!0,e.leaderboardQualified=!0,e.menuActive=!1,e.score.accuracy=74.99,e.score.beatsHit=125,e.score.beatsMissed=125,e.score.maxCombo=123,e.score.rank="A",e.score.score=9001,e.introActive=!1,E(e)},difficultyfilter:(e,t)=>{e.difficultyFilter=t,e.difficultyFilterMenuOpen=!1,e.menuSelectedChallenge.id=""},difficultyfiltermenuclose:e=>{e.difficultyFilterMenuOpen=!1},difficultyfiltermenuopen:e=>{e.difficultyFilterMenuOpen=!0},displayconnected:e=>{if(e.hasVR=!0,!c)try{"getVRDisplays"in navigator&&navigator.getVRDisplays().then(e=>{e.length&&(c=!0)})}catch(e){}},favoritetoggle:e=>{const t=e.menuSelectedChallenge.id,a=o[t];if(a)if(e.menuSelectedChallenge.isFavorited){e.menuSelectedChallenge.isFavorited=!1;for(let a=0;ae.id===t).length)return;e.favorites.push(a),localStorage.setItem("favorites-v2",JSON.stringify(e.favorites))}},gamemenuresume:e=>{e.isPaused=!1},gamemenurestart:e=>{w(e),e.challenge.isBeatsPreloaded=!1,e.isGameOver=!1,e.isPaused=!1,e.isLoading=!0,e.isVictory=!1,e.leaderboardQualified=!1},gamemenuexit:e=>{w(e),e.challenge.isBeatsPreloaded=!1,e.isGameOver=!1,e.isPaused=!1,e.isVictory=!1,e.menuActive=!0,e.menuSelectedChallenge.id=e.challenge.id,e.menuSelectedChallenge.difficulty=e.challenge.difficulty,e.menuSelectedChallenge.beatmapCharacteristic=e.challenge.beatmapCharacteristic,e.menuSelectedChallenge.difficultyId=e.challenge.difficultyId,e.challenge.id="",e.leaderboardQualified=!1},gamemode:(e,t)=>{e.gameMode=t},genreclear:e=>{e.genre="",e.menuSelectedChallenge.id=""},genreselect:(e,t)=>{e.genre=t,e.genreMenuOpen=!1,e.menuSelectedChallenge.id="",e.playlist="",e.search.query=""},genremenuclose:e=>{e.genreMenuOpen=!1},genremenuopen:e=>{e.genreMenuOpen=!0},keyboardclose:e=>{e.isSearching=!1},keyboardopen:e=>{e.isSearching=!0,e.menuSelectedChallenge.id=""},leaderboard:(e,t)=>{e.leaderboard.length=0,e.leaderboardFetched=!0,e.leaderboardNames="",e.leaderboardScores="";for(let a=0;a{e.has6DOFVR&&(e.leaderboardQualified=!0)},leaderboardscoreadded:(e,t)=>{for(let a=0;a=e.leaderboard[a].score||a>=e.leaderboard.length-1){e.leaderboard.splice(a,0,t.scoreData);break}e.leaderboardNames="",e.leaderboardScores="";for(let t=0;t{e.leaderboardQualified=!1},menuback:e=>{e.difficultyFilterMenuOpen=!1,e.genreMenuOpen=!1,e.isSearching=!1,e.optionsMenuOpen=!1,e.playlistMenuOpen=!1},menuchallengeselect:(e,t)=>{let a=o[t];if(!a)return;Object.assign(e.menuSelectedChallenge,a),e.menuSelectedChallenge.songName=b(a.metadata.songName,24),e.menuDifficulties.length=0,e.menuDifficultiesIds.length=0;const s=JSON.parse(a.metadata.characteristics);for(const t of Object.keys(s))if(!["90Degree","360Degree"].includes(t))for(const a of Object.keys(s[t])){if(null===s[t][a])continue;let n=d[a],r=n;"Standard"!==t&&(r=t+"\n"+r),e.menuDifficulties.unshift({id:t+"-"+a,filename:a+t,difficultyName:n,renderName:r,beatmapCharacteristic:t,difficulty:a})}e.menuDifficulties.sort(v);for(const t of e.menuDifficulties)e.menuDifficultiesIds.push(t.id);const n=e.menuDifficulties[0];e.menuSelectedChallenge.difficulty=n.difficulty,e.menuSelectedChallenge.beatmapCharacteristic=n.beatmapCharacteristic,e.menuSelectedChallenge.difficultyId=n.id,e.menuSelectedChallenge.image=e.menuSelectedChallenge.coverURL,k(e,a),e.challenge.audio="",S(e),e.isSearching=!1;const r=!!e.favorites.filter(e=>e.id===t).length;e.menuSelectedChallenge.isFavorited=r,T(e),e.leaderboardLoading=!0,e.hasSongLoadError=!1,l[t]&&(e.hasSongLoadError=!0)},menuchallengeunselect:e=>{e.menuSelectedChallenge.id="",e.menuSelectedChallenge.difficultyId="",e.menuSelectedChallenge.difficulty="",e.menuSelectedChallenge.beatmapCharacteristic="",T(e)},menudifficultyselect:(e,t)=>{let a;for(const s of e.menuDifficulties)if(s.id===t){a=s;break}e.menuSelectedChallenge.difficultyId=t,e.menuSelectedChallenge.difficulty=a.difficulty,e.menuSelectedChallenge.beatmapCharacteristic=a.beatmapCharacteristic,k(e,e.menuSelectedChallenge),T(e),e.leaderboardLoading=!0},menuopeningend:e=>{e.isMenuOpening=!1},minehit:e=>{A(e)},optionsmenuopen:e=>{e.optionsMenuOpen=!0},pausegame:e=>{e.isPlaying&&(e.isPaused=!0)},playbuttonclick:e=>{if(""===e.menuSelectedChallenge.id)return;if(l[e.menuSelectedChallenge.id])return;let t="frontpage";e.playlist&&(t="playlist"),e.search.query&&(t="search"),e.genre&&(t="genre"),gtag("event","songsource",{event_label:t}),w(e),Object.assign(e.challenge,e.menuSelectedChallenge),gtag("event","difficulty",{event_label:e.challenge.difficulty}),e.menuActive=!1,e.menuSelectedChallenge.id="",e.menuSelectedChallenge.difficulty="",e.menuSelectedChallenge.beatmapCharacteristic="",e.isSearching=!1,e.isLoading=!0,e.loadingText="Loading...",gtag("event","colorscheme",{event_label:e.colorScheme})},playlistclear:(e,t)=>{e.menuSelectedChallenge.id="",e.playlist=""},playlistselect:(e,t)=>{e.genre="",e.menuSelectedChallenge.id="",e.playlist=t.id,e.playlistTitle=t.title,e.playlistMenuOpen=!1,e.search.query=""},playlistmenuclose:e=>{e.playlistMenuOpen=!1},playlistmenuopen:e=>{e.playlistMenuOpen=!0},searcherror:(e,t)=>{e.search.hasError=!0},searchprevpage:e=>{0!==e.search.page&&(e.search.page--,p(e))},searchnextpage:e=>{e.search.page>Math.floor(e.search.results.length/6)||(e.search.page++,p(e),void 0!==e.search.url&&e.search.page+3>Math.floor(e.search.results.length/6)&&(e.search.urlPage=e.search.urlPage+1,fetch(e.search.url.replaceAll("CURRENT_PAGE_INDEX",e.search.urlPage)).then(e=>e.json()).then(t=>{var a=(t.docs||t.maps).map(r);for(e.search.results.push(...a),i=0;i{var a;for(e.search.hasError=!1,e.search.page=0,e.search.url=t.url,e.search.urlPage=t.urlPage,e.search.query=t.query,e.search.queryText=b(t.query,10),e.search.results=t.results,a=0;a{if(gtag("event","songcomplete",{event_label:e.gameMode}),"ride"===e.gameMode||!e.inVR)return e.challenge.isBeatsPreloaded=!1,e.isVictory=!1,e.menuActive=!0,void(e.challenge.id="");e.isVictory=!0,e.score.score=isNaN(e.score.score)?0:e.score.score,R(e),e.score.finalAccuracy=e.score.accuracy;const t=parseFloat(e.score.accuracy);e.score.rank=t>=97?"S":t>=90?"A":t>=80?"B":t>=70?"C":t>=60?"D":"F",E(e)},songloadcancel:e=>{e.challenge.isBeatsPreloaded=!1,e.challenge.audio="",e.challenge.id="",e.challenge.version="",e.isZipFetching=!1,e.isLoading=!1,e.isSongProcessing=!1,e.menuActive=!0},songloaderror:e=>{l[e.menuSelectedChallenge.id||e.challenge.id]=!0,e.hasSongLoadError=!0,e.loadingText="Sorry! There was an error loading this song.\nPlease select another song.",e.challenge.id="",e.challenge.isBeatsPreloaded=!1,e.isSongProcessing=!1,e.isZipFetching=!1},songprocessfinish:e=>{e.isSongProcessing=!1,e.isLoading=!1},songprocessstart:e=>{e.isSongProcessing=!0,e.loadingText="Wrapping up..."},"enter-vr":e=>{e.inVR=AFRAME.utils.device.checkHeadsetConnected(),AFRAME.utils.device.isMobile()||(gtag("event","entervr",{}),AFRAME.utils.device.isOculusBrowser()&>ag("event","oculusbrowser",{}))},"exit-vr":e=>{e.inVR=!1,e.isPlaying&&(e.isPaused=!0)},startgame:e=>{e.introActive=!1,e.menuActive=!0},victoryfake:e=>{e.score.accuracy="74.99",e.score.rank="C"},wallhitstart:e=>{A(e)},ziploaderend:(e,t)=>{e.challenge.audio=t.audio,e.hasSongLoadError=!1,e.menuSelectedChallenge.version="",e.isZipFetching=!1},ziploaderstart:e=>{e.challenge.isBeatsPreloaded=!1,e.isZipFetching=!0}},computeState:e=>{e.isPlaying=!(e.menuActive||e.isLoading||e.isPaused||e.isVictory||e.isGameOver||e.isZipFetching||e.isSongProcessing||!e.challenge.id||e.introActive);const t=e.menuActive||e.isPaused||e.isVictory||e.isGameOver||e.isLoading||e.introActive;e.leftRaycasterActive=t&&"left"===e.activeHand&&e.inVR,e.rightRaycasterActive=t&&"right"===e.activeHand&&e.inVR,e.mainMenuActive=e.menuActive&&!e.genreMenuOpen&&!e.difficultyFilterMenuOpen&&!e.playlistMenuOpen&&!e.optionsMenuOpen&&!e.isSearching,e.score.active="ride"!==e.gameMode&&e.inVR&&(e.isPlaying||e.isPaused)}});const y=["easy","normal","hard","expert","expertPlus"],g=["Standard"];function v(e,t){const a=y.indexOf(e.difficulty),s=y.indexOf(t.difficulty);if(as)return 1;const n=g.indexOf(e.beatmapCharacteristic),r=g.indexOf(t.beatmapCharacteristic);return n>r?-1:n=0&&u.splice(t,1)}function y(e){var t=document.createElement("style");if(void 0===e.attrs.type&&(e.attrs.type="text/css"),void 0===e.attrs.nonce){var s=function(){0;return a.nc}();s&&(e.attrs.nonce=s)}return g(t,e.attrs),p(e,t),t}function g(e,t){Object.keys(t).forEach((function(a){e.setAttribute(a,t[a])}))}function v(e,t){var a,s,n,r;if(t.transform&&e.css){if(!(r="function"==typeof t.transform?t.transform(e.css):t.transform.default(e.css)))return function(){};e.css=r}if(t.singleton){var o=l++;a=d||(d=y(t)),s=S.bind(null,a,o,!1),n=S.bind(null,a,o,!0)}else e.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(a=function(e){var t=document.createElement("link");return void 0===e.attrs.type&&(e.attrs.type="text/css"),e.attrs.rel="stylesheet",g(t,e.attrs),p(e,t),t}(t),s=T.bind(null,a,t),n=function(){b(a),a.href&&URL.revokeObjectURL(a.href)}):(a=y(t),s=E.bind(null,a),n=function(){b(a)});return s(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;s(e=t)}else n()}}e.exports=function(e,t){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!=typeof document)throw new Error("The style-loader cannot be used in a non-browser environment");(t=t||{}).attrs="object"==typeof t.attrs?t.attrs:{},t.singleton||"boolean"==typeof t.singleton||(t.singleton=o()),t.insertInto||(t.insertInto="head"),t.insertAt||(t.insertAt="bottom");var a=f(e,t);return m(a,t),function(e){for(var s=[],n=0;n\n\n \n\n \n\n \n \n\n \n \n\n \n \n \n \n\n\x3c!-- --\x3e\n \x3c!-- --\x3e\n\n\n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \x3c!-- --\x3e\n --\x3e\n\n\x3c!-- --\x3e\n \x3c!-- --\x3e\n\x3c!-- Macro is a templating function. It is rendered into the HTML below with searchResults(). --\x3e\n\n\n\n\n\n\n\x3c!-- Menu container begins here. --\x3e\n\n\n \n\n \n \n\n \n\x3c!-- TODO: Sort the layout based on the IDs. --\x3e\n\n\n\n\x3c!-- All search result text merged and spaced out. --\x3e\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n \n\n\n \n\n \n\n \x3c!-- Top-aligned. --\x3e\n \x3c!-- Uses bind-for and bind-item to render difficulties. --\x3e\n \n \n \n \n \n \n\n \x3c!-- Selected challenge info. --\x3e\n \n \n\n \n\n \n \n \n \n \n \n \n\n \n \n \n \n\n \n \n\n \n \n \n\n \n\n \n \n\n \n \n \n\n \x3c!-- --\x3e\n\n \n\n\x3c!-- --\x3e\n \x3c!-- --\x3e\n\n\n\n\n\n \n \n \n \n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n\n \n\n\x3c!-- --\x3e\n \x3c!-- --\x3e\n\n\n \n\n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n\n\x3c!-- --\x3e\n \x3c!-- --\x3e\n\n \n\n\x3c!-- --\x3e\n\n\n\x3c!-- Search. --\x3e\n\n\n\n\n \n \n\n\n\x3c!-- Top menu buttons. --\x3e\n\n\n\n\n \x3c!-- Playlist menu toggle. --\x3e\n \n \n \n \n\n \n \n \n\n \n \n\n \x3c!-- Search toggle. --\x3e\n \n \n \n \n\n \n \n \n\n \n \n\n \x3c!-- Difficulty menu toggle. --\x3e\n \x3c!-- \n \n \n \n\n \n --\x3e\n\n \x3c!-- Genre menu toggle. --\x3e\n \n \n \n \n\n \n \n \n\n \n \n\n\n\x3c!-- Options menu toggle. --\x3e\n\n \n \n \n\x3c!-- --\x3e\n \x3c!-- --\x3e\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n \n \n\n\n \n \n \n \n\n\n \n\n\n \n \n \n \n\n\n \n\n \n \n\n\n \n \n \n \n\n\n \n\n\n \n \n \n \n\n\n \n\n\n \n \n \n \n\n\n \n\n \n\n \n\n \n \n\n\x3c!-- --\x3e\n \x3c!-- --\x3e\n\x3c!-- Victory. --\x3e\n\n\n \n\n \n\n \n\n \n\n \n\n \n\n \n \n \n \n\n \n \n \n \n\n\x3c!-- --\x3e\n \x3c!-- --\x3e\n\n\n \n\n \n\n \n\n \n\n \n\n \n\n \n \n\n \n \n \x3c!--slice9="width: 1.5; height: 0.24"--\x3e\n \n\n\x3c!-- --\x3e\n \x3c!-- --\x3e\n\n\n\n\n\n\n\n\n\n\n \n\n \n\n\n\n\n \n\n \n\n \n\n\x3c!-- --\x3e\n\n \n\n \n\n \n\n \n\n \n\n \n\n \x3c!-- --\x3e\n\n\n\n\n\n\n\n \n \n \n \n\n\n\n\n\n\x3c!-- --\x3e\n \x3c!-- --\x3e\n\n\n\n\n \n \n\n \n \n\n \n \n\n\x3c!-- --\x3e\n \x3c!-- --\x3e\n\n\n\n\n\x3c!-- Titles. --\x3e\n\n \n \n \n\n\n\n\n \x3c!-- Actions. --\x3e\n \n \n \n\n \n \n \n\n \n \n \n\n \x3c!-- Song info. --\x3e\n \n \n\n \n\n \n \n \n \n \n\n\x3c!-- --\x3e\n\n \x3c!-- Beat pieces, explosions, fx, and weapon trail. --\x3e\n \n\n \x3c!-- Supercut FX rings. --\x3e\n \n \n \n \n \n \n \n \n \n\n \x3c!-- Player. --\x3e\n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \x3c!-- Blade. --\x3e\n \n \n \n \n \n \n\n \n \n \n \n\n \x3c!-- Punch. --\x3e\n \n \n \n \n \n\n \x3c!-- Ride. --\x3e\n \n \n \n \n\n \n \n \n \n \n \n \n\n \x3c!-- Blade. --\x3e\n \n \n \n \n \n \n\n \n \n \n \n\n \x3c!-- Punch. --\x3e\n \n \n \n \n \n\n \x3c!-- Ride. --\x3e\n \n \n \n \n\n \n \n \n\n \n \n\n \n \n\n \n \n\n';document.addEventListener("DOMContentLoaded",(function(){let e=document.getElementById("app");e||(e=document.createElement("div"),e.id="app",document.body.appendChild(e));e.innerHTML=s}));{const t=a(234).DiffDOM;if(e.hot.accept(),e.hot.data&&e.hot.data.oldHtml){const a=e.hot.data.oldHtml,n=new t,r=document.createElement("div");r.innerHTML=a;const o=document.createElement("div");o.innerHTML=s;const i=n.diff(r.querySelector("a-scene"),o.querySelector("a-scene"));n.apply(document.querySelector("a-scene"),i)}e.hot.dispose(e=>{e.oldHtml=s})}},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(e,t,a){"use strict";function s(e,t,a){let n;return"#text"===e.nodeName?n=a.document.createTextNode(e.data):"#comment"===e.nodeName?n=a.document.createComment(e.data):("svg"===e.nodeName||t?(n=a.document.createElementNS("http://www.w3.org/2000/svg",e.nodeName),t=!0):n=a.document.createElement(e.nodeName),e.attributes&&Object.entries(e.attributes).forEach(([e,t])=>n.setAttribute(e,t)),e.childNodes&&e.childNodes.forEach(e=>n.appendChild(s(e,t,a))),a.valueDiffing&&(e.value&&(n.value=e.value),e.checked&&(n.checked=e.checked),e.selected&&(n.selected=e.selected))),n}function n(e,t){for(t=t.slice();t.length>0;){if(!e.childNodes)return!1;const a=t.splice(0,1)[0];e=e.childNodes[a]}return e}function r(e,t,a){let r,o,i,c,d,l=n(e,t[a._const.route]);const u={diff:t,node:l};if(a.preDiffApply(u))return!0;switch(t[a._const.action]){case a._const.addAttribute:if(!l||!l.setAttribute)return!1;l.setAttribute(t[a._const.name],t[a._const.value]);break;case a._const.modifyAttribute:if(!l||!l.setAttribute)return!1;l.setAttribute(t[a._const.name],t[a._const.newValue]),"INPUT"===l.nodeName&&"value"===t[a._const.name]&&(l.value=t[a._const.oldValue]);break;case a._const.removeAttribute:if(!l||!l.removeAttribute)return!1;l.removeAttribute(t[a._const.name]);break;case a._const.modifyTextElement:if(!l||3!==l.nodeType)return!1;a.textDiff(l,l.data,t[a._const.oldValue],t[a._const.newValue]);break;case a._const.modifyValue:if(!l||void 0===l.value)return!1;l.value=t[a._const.newValue];break;case a._const.modifyComment:if(!l||void 0===l.data)return!1;a.textDiff(l,l.data,t[a._const.oldValue],t[a._const.newValue]);break;case a._const.modifyChecked:if(!l||void 0===l.checked)return!1;l.checked=t[a._const.newValue];break;case a._const.modifySelected:if(!l||void 0===l.selected)return!1;l.selected=t[a._const.newValue];break;case a._const.replaceElement:l.parentNode.replaceChild(s(t[a._const.newValue],"http://www.w3.org/2000/svg"===l.namespaceURI,a),l);break;case a._const.relocateGroup:c=Array(...new Array(t.groupLength)).map(()=>l.removeChild(l.childNodes[t[a._const.from]])),c.forEach((e,s)=>{0===s&&(o=l.childNodes[t[a._const.to]]),l.insertBefore(e,o||null)});break;case a._const.removeElement:l.parentNode.removeChild(l);break;case a._const.addElement:i=t[a._const.route].slice(),d=i.splice(i.length-1,1)[0],l=n(e,i),l.insertBefore(s(t[a._const.element],"http://www.w3.org/2000/svg"===l.namespaceURI,a),l.childNodes[d]||null);break;case a._const.removeTextElement:if(!l||3!==l.nodeType)return!1;l.parentNode.removeChild(l);break;case a._const.addTextElement:if(i=t[a._const.route].slice(),d=i.splice(i.length-1,1)[0],r=a.document.createTextNode(t[a._const.value]),l=n(e,i),!l||!l.childNodes)return!1;l.insertBefore(r,l.childNodes[d]||null);break;default:console.log("unknown action")}return u.newNode=r,a.postDiffApply(u),!0}function o(e,t,a){const s=e[t];e[t]=e[a],e[a]=s}function i(e,t,a){t.length||(t=[t]),(t=t.slice()).reverse(),t.forEach(t=>{!function(e,t,a){switch(t[a._const.action]){case a._const.addAttribute:t[a._const.action]=a._const.removeAttribute,r(e,t,a);break;case a._const.modifyAttribute:o(t,a._const.oldValue,a._const.newValue),r(e,t,a);break;case a._const.removeAttribute:t[a._const.action]=a._const.addAttribute,r(e,t,a);break;case a._const.modifyTextElement:case a._const.modifyValue:case a._const.modifyComment:case a._const.modifyChecked:case a._const.modifySelected:case a._const.replaceElement:o(t,a._const.oldValue,a._const.newValue),r(e,t,a);break;case a._const.relocateGroup:o(t,a._const.from,a._const.to),r(e,t,a);break;case a._const.removeElement:t[a._const.action]=a._const.addElement,r(e,t,a);break;case a._const.addElement:t[a._const.action]=a._const.removeElement,r(e,t,a);break;case a._const.removeTextElement:t[a._const.action]=a._const.addTextElement,r(e,t,a);break;case a._const.addTextElement:t[a._const.action]=a._const.removeTextElement,r(e,t,a);break;default:console.log("unknown action")}}(e,t,a)})}a.r(t),a.d(t,"DiffDOM",(function(){return T})),a.d(t,"TraceLogger",(function(){return k}));class c{constructor(e={}){Object.entries(e).forEach(([e,t])=>this[e]=t)}toString(){return JSON.stringify(this)}setValue(e,t){return this[e]=t,this}}function d(e){const t=[];return"#text"!==e.nodeName&&"#comment"!==e.nodeName&&(t.push(e.nodeName),e.attributes&&(e.attributes.class&&t.push(`${e.nodeName}.${e.attributes.class.replace(/ /g,".")}`),e.attributes.id&&t.push(`${e.nodeName}#${e.attributes.id}`))),t}function l(e){const t={},a={};return e.forEach(e=>{d(e).forEach(e=>{const s=e in t;s||e in a?s&&(delete t[e],a[e]=!0):t[e]=!0})}),t}function u(e,t){const a=l(e),s=l(t),n={};return Object.keys(a).forEach(e=>{s[e]&&(n[e]=!0)}),n}function h(e){return delete e.outerDone,delete e.innerDone,delete e.valueDone,!e.childNodes||e.childNodes.every(h)}function m(e,t){if(!["nodeName","value","checked","selected","data"].every(a=>e[a]===t[a]))return!1;if(Boolean(e.attributes)!==Boolean(t.attributes))return!1;if(Boolean(e.childNodes)!==Boolean(t.childNodes))return!1;if(e.attributes){const a=Object.keys(e.attributes),s=Object.keys(t.attributes);if(a.length!==s.length)return!1;if(!a.every(a=>e.attributes[a]===t.attributes[a]))return!1}if(e.childNodes){if(e.childNodes.length!==t.childNodes.length)return!1;if(!e.childNodes.every((e,a)=>m(e,t.childNodes[a])))return!1}return!0}function f(e,t,a,s,n){if(!e||!t)return!1;if(e.nodeName!==t.nodeName)return!1;if("#text"===e.nodeName)return!!n||e.data===t.data;if(e.nodeName in a)return!0;if(e.attributes&&t.attributes){if(e.attributes.id){if(e.attributes.id!==t.attributes.id)return!1;if(`${e.nodeName}#${e.attributes.id}`in a)return!0}if(e.attributes.class&&e.attributes.class===t.attributes.class){if(`${e.nodeName}.${e.attributes.class.replace(/ /g,".")}`in a)return!0}}if(s)return!0;const r=e.childNodes?e.childNodes.slice().reverse():[],o=t.childNodes?t.childNodes.slice().reverse():[];if(r.length!==o.length)return!1;if(n)return r.every((e,t)=>e.nodeName===o[t].nodeName);{const e=u(r,o);return r.every((t,a)=>f(t,o[a],e,!0,!0))}}function p(e){return JSON.parse(JSON.stringify(e))}function b(e,t,a,s){let n=0,r=[];const o=e.length,i=t.length,c=Array(...new Array(o+1)).map(()=>[]),l=u(e,t);let h=o===i;h&&e.some((e,a)=>{const s=d(e),n=d(t[a]);return s.length!==n.length?(h=!1,!0):(s.some((e,t)=>{if(e!==n[t])return h=!1,!0}),!h||void 0)});for(let d=0;d=n&&(n=c[d+1][e+1],r=[d+1,e+1]))}}return 0!==n&&{oldValue:r[0]-n,newValue:r[1]-n,length:n}}function y(e,t){return Array(...new Array(e)).map(()=>t)}class g{constructor(){this.list=[]}add(e){this.list.push(...e)}forEach(e){this.list.forEach(t=>e(t))}}function v(e,t){let a,s,n=e;for(t=t.slice();t.length>0;){if(!n.childNodes)return!1;s=t.splice(0,1)[0],a=n,n=n.childNodes[s]}return{node:n,parentNode:a,nodeIndex:s}}function A(e,t,a){return t.forEach(t=>{!function(e,t,a){const s=v(e,t[a._const.route]);let n=s.node;const r=s.parentNode,o=s.nodeIndex,i=[],c={diff:t,node:n};if(a.preDiffApply(c))return!0;let d,l,u,h;switch(t[a._const.action]){case a._const.addAttribute:n.attributes||(n.attributes={}),n.attributes[t[a._const.name]]=t[a._const.value],"checked"===t[a._const.name]?n.checked=!0:"selected"===t[a._const.name]?n.selected=!0:"INPUT"===n.nodeName&&"value"===t[a._const.name]&&(n.value=t[a._const.value]);break;case a._const.modifyAttribute:n.attributes[t[a._const.name]]=t[a._const.newValue];break;case a._const.removeAttribute:delete n.attributes[t[a._const.name]],0===Object.keys(n.attributes).length&&delete n.attributes,"checked"===t[a._const.name]?n.checked=!1:"selected"===t[a._const.name]?delete n.selected:"INPUT"===n.nodeName&&"value"===t[a._const.name]&&delete n.value;break;case a._const.modifyTextElement:n.data=t[a._const.newValue];break;case a._const.modifyValue:n.value=t[a._const.newValue];break;case a._const.modifyComment:n.data=t[a._const.newValue];break;case a._const.modifyChecked:n.checked=t[a._const.newValue];break;case a._const.modifySelected:n.selected=t[a._const.newValue];break;case a._const.replaceElement:d=p(t[a._const.newValue]),d.outerDone=!0,d.innerDone=!0,d.valueDone=!0,r.childNodes[o]=d;break;case a._const.relocateGroup:l=n.childNodes.splice(t[a._const.from],t.groupLength).reverse(),l.forEach(e=>n.childNodes.splice(t[a._const.to],0,e)),n.subsets&&n.subsets.forEach(e=>{if(t[a._const.from]t[a._const.from]){e.oldValue-=t.groupLength;const s=e.oldValue+e.length-t[a._const.to];s>0&&(i.push({oldValue:t[a._const.to]+t.groupLength,newValue:e.newValue+e.length-s,length:s}),e.length-=s)}else if(t[a._const.from]>t[a._const.to]&&e.oldValue>t[a._const.to]&&e.oldValue0&&(i.push({oldValue:t[a._const.to]+t.groupLength,newValue:e.newValue+e.length-s,length:s}),e.length-=s)}else e.oldValue===t[a._const.from]&&(e.oldValue=t[a._const.to])});break;case a._const.removeElement:r.childNodes.splice(o,1),r.subsets&&r.subsets.forEach(e=>{e.oldValue>o?e.oldValue-=1:e.oldValue===o?e.delete=!0:e.oldValueo&&(e.oldValue+e.length-1===o?e.length--:(i.push({newValue:e.newValue+o-e.oldValue,oldValue:o,length:e.length-o+e.oldValue-1}),e.length=o-e.oldValue))}),n=r;break;case a._const.addElement:u=t[a._const.route].slice(),h=u.splice(u.length-1,1)[0],n=v(e,u).node,d=p(t[a._const.element]),d.outerDone=!0,d.innerDone=!0,d.valueDone=!0,n.childNodes||(n.childNodes=[]),h>=n.childNodes.length?n.childNodes.push(d):n.childNodes.splice(h,0,d),n.subsets&&n.subsets.forEach(e=>{if(e.oldValue>=h)e.oldValue+=1;else if(e.oldValueh){const t=e.oldValue+e.length-h;i.push({newValue:e.newValue+e.length-t,oldValue:h+1,length:t}),e.length-=t}});break;case a._const.removeTextElement:r.childNodes.splice(o,1),"TEXTAREA"===r.nodeName&&delete r.value,r.subsets&&r.subsets.forEach(e=>{e.oldValue>o?e.oldValue-=1:e.oldValue===o?e.delete=!0:e.oldValueo&&(e.oldValue+e.length-1===o?e.length--:(i.push({newValue:e.newValue+o-e.oldValue,oldValue:o,length:e.length-o+e.oldValue-1}),e.length=o-e.oldValue))}),n=r;break;case a._const.addTextElement:u=t[a._const.route].slice(),h=u.splice(u.length-1,1)[0],d={},d.nodeName="#text",d.data=t[a._const.value],n=v(e,u).node,n.childNodes||(n.childNodes=[]),h>=n.childNodes.length?n.childNodes.push(d):n.childNodes.splice(h,0,d),"TEXTAREA"===n.nodeName&&(n.value=t[a._const.newValue]),n.subsets&&n.subsets.forEach(e=>{if(e.oldValue>=h&&(e.oldValue+=1),e.oldValueh){const t=e.oldValue+e.length-h;i.push({newValue:e.newValue+e.length-t,oldValue:h+1,length:t}),e.length-=t}});break;default:console.log("unknown action")}n.subsets&&(n.subsets=n.subsets.filter(e=>!e.delete&&e.oldValue!==e.newValue),i.length&&(n.subsets=n.subsets.concat(i))),c.newNode=d,a.postDiffApply(c)}(e,t,a)}),!0}function w(e,t){const a={};if(a.nodeName=e.nodeName,"#text"===a.nodeName||"#comment"===a.nodeName)a.data=e.data;else{if(e.attributes&&e.attributes.length>0){a.attributes={};Array.prototype.slice.call(e.attributes).forEach(e=>a.attributes[e.name]=e.value)}if("TEXTAREA"===a.nodeName)a.value=e.value;else if(e.childNodes&&e.childNodes.length>0){a.childNodes=[];Array.prototype.slice.call(e.childNodes).forEach(e=>a.childNodes.push(w(e,t)))}t.valueDiffing&&(void 0!==e.checked&&e.type&&["radio","checkbox"].includes(e.type.toLowerCase())?a.checked=e.checked:void 0!==e.value&&(a.value=e.value),void 0!==e.selected&&(a.selected=e.selected))}return a}class S{constructor(e,t,a){this.options=a,this.t1=w(e,this.options),this.t2=w(t,this.options),this.diffcount=0,this.foundAll=!1,this.debug&&(this.t1Orig=w(e,this.options),this.t2Orig=w(t,this.options)),this.tracker=new g}init(){return this.findDiffs(this.t1,this.t2)}findDiffs(e,t){let a;do{if(this.options.debug&&(this.diffcount+=1,this.diffcount>this.options.diffcap))throw window.diffError=[this.t1Orig,this.t2Orig],new Error(`surpassed diffcap:${JSON.stringify(this.t1Orig)} -> ${JSON.stringify(this.t2Orig)}`);a=this.findNextDiff(e,t,[]),0===a.length&&(m(e,t)||(this.foundAll?(console.error("Could not find remaining diffs!"),console.log({t1:e,t2:t})):(this.foundAll=!0,h(e),a=this.findNextDiff(e,t,[])))),a.length>0&&(this.foundAll=!1,this.tracker.add(a),A(e,a,this.options))}while(a.length>0);return this.tracker.list}findNextDiff(e,t,a){let s,n;if(this.options.maxDepth&&a.length>this.options.maxDepth)return[];if(!e.outerDone){if(s=this.findOuterDiff(e,t,a),this.filterOuterDiff&&(n=this.filterOuterDiff(e,t,s),n&&(s=n)),s.length>0)return e.outerDone=!0,s;e.outerDone=!0}if(!e.innerDone){if(s=this.findInnerDiff(e,t,a),s.length>0)return s;e.innerDone=!0}if(this.options.valueDiffing&&!e.valueDone){if(s=this.findValueDiff(e,t,a),s.length>0)return e.valueDone=!0,s;e.valueDone=!0}return[]}findOuterDiff(e,t,a){const s=[];let n,r,o,i,d,l;if(e.nodeName!==t.nodeName)return[(new c).setValue(this.options._const.action,this.options._const.replaceElement).setValue(this.options._const.oldValue,p(e)).setValue(this.options._const.newValue,p(t)).setValue(this.options._const.route,a)];if(a.length&&this.options.maxChildCount&&e.childNodes&&t.childNodes&&e.childNodes.length>this.options.maxChildCount&&t.childNodes.length>this.options.maxChildCount){const s=e.childNodes.length{n[i.oldValue+e]=!0,r[i.newValue+e]=!0};for(;i;)if(i=b(a,s,n,r),i){o.push(i);Array(...new Array(i.length)).map(c).forEach(e=>d(e))}return e.subsets=o,e.subsetsAge=100,o}(e,t):[],n=e.childNodes?e.childNodes:[],r=t.childNodes?t.childNodes:[];let o,i=[],d=0;if(s.length>0&&(i=this.attemptGroupRelocation(e,t,s,a),i.length>0))return i;const l=Math.max(n.length,r.length);n.length!==r.length&&(o=!0);for(let e=0;e{const t=e.oldValue+e.length,a=e.newValue+e.length;for(let a=e.oldValue;am+1&&"#text"===e.childNodes[m+1].nodeName;)if(m+=1,t.childNodes[n].data===e.childNodes[m].data){h=!0;break}if(!h)return g.push((new c).setValue(this.options._const.action,this.options._const.modifyTextElement).setValue(this.options._const.route,s.concat(n)).setValue(this.options._const.oldValue,u.data).setValue(this.options._const.newValue,t.childNodes[n].data)),g}g.push((new c).setValue(this.options._const.action,this.options._const.removeTextElement).setValue(this.options._const.route,s.concat(n)).setValue(this.options._const.value,u.data)),r.splice(n,1),b=Math.min(r.length,o.length),n-=1}else g.push((new c).setValue(this.options._const.action,this.options._const.removeElement).setValue(this.options._const.route,s.concat(n)).setValue(this.options._const.element,p(u))),r.splice(n,1),b=Math.min(r.length,o.length),n-=1;else if(!0===o[n])u=t.childNodes[n],"#text"===u.nodeName?(g.push((new c).setValue(this.options._const.action,this.options._const.addTextElement).setValue(this.options._const.route,s.concat(n)).setValue(this.options._const.value,u.data)),r.splice(n,0,!0),b=Math.min(r.length,o.length),y-=1):(g.push((new c).setValue(this.options._const.action,this.options._const.addElement).setValue(this.options._const.route,s.concat(n)).setValue(this.options._const.element,p(u))),r.splice(n,0,!0),b=Math.min(r.length,o.length),y-=1);else if(r[n]!==o[n]){if(g.length>0)return g;if(l=a[r[n]],d=Math.min(l.newValue,e.childNodes.length-l.length),d!==l.oldValue){i=!1;for(let t=0;t{Object.prototype.hasOwnProperty.call(this.options,e)||(this.options[e]=t)}),!this.options._const){const e=["addAttribute","modifyAttribute","removeAttribute","modifyTextElement","relocateGroup","removeElement","addElement","removeTextElement","addTextElement","replaceElement","modifyValue","modifyChecked","modifySelected","modifyComment","action","route","oldValue","newValue","element","group","from","to","name","value","data","attributes","nodeName","childNodes","checked","selected"];this.options._const={},this.options.compress?e.forEach((e,t)=>this.options._const[e]=t):e.forEach(e=>this.options._const[e]=e)}this.DiffFinder=S}apply(e,t){return function(e,t,a){return t.every(t=>r(e,t,a))}(e,t,this.options)}undo(e,t){return i(e,t,this.options)}diff(e,t){return new this.DiffFinder(e,t,this.options).init()}}class k{constructor(e={}){this.pad="│ ",this.padding="",this.tick=1,this.messages=[];const t=(e,t)=>{const a=e[t];e[t]=(...s)=>{this.fin(t,Array.prototype.slice.call(s));const n=a.apply(e,s);return this.fout(t,n),n}};for(let a in e)"function"==typeof e[a]&&t(e,a);this.log("┌ TRACELOG START")}fin(e,t){this.padding+=this.pad,this.log("├─> entering "+e,t)}fout(e,t){this.log("│<──┘ generated return value",t),this.padding=this.padding.substring(0,this.padding.length-this.pad.length)}format(e,t){return`${function(e){for(e=""+e;e.length<4;)e="0"+e;return e}(t)}> ${this.padding}${e}`}log(){let e=Array.prototype.slice.call(arguments);const t=function(e){return e?"string"==typeof e?e:e instanceof HTMLElement?e.outerHTML||"":e instanceof Array?`[${e.map(t).join(",")}]`:e.toString()||e.valueOf()||"":""};e=e.map(t).join(", "),this.messages.push(this.format(e,this.tick++))}toString(){let e="└───";for(;e.length<=this.padding.length+this.pad.length;)e+="× ";let t=this.padding;return this.padding="",e=this.format(e,this.tick),this.padding=t,`${this.messages.join("\n")}\n${e}`}}}]); \ No newline at end of file diff --git a/build/zip.js b/build/zip.js new file mode 100644 index 000000000..02a70fd3e --- /dev/null +++ b/build/zip.js @@ -0,0 +1,8 @@ +!function(e){var t=this.webpackHotUpdate;this.webpackHotUpdate=function(e,n){!function(e,t){if(!w[e]||!v[e])return;for(var n in v[e]=!1,t)Object.prototype.hasOwnProperty.call(t,n)&&(p[n]=t[n]);0==--b&&0===y&&x()}(e,n),t&&t(e,n)};var n,r=!0,i="5240b60f8d7cb42cee8a",o={},a=[],s=[];function l(e){var t=R[e];if(!t)return O;var r=function(r){return t.hot.active?(R[r]?-1===R[r].parents.indexOf(e)&&R[r].parents.push(e):(a=[e],n=r),-1===t.children.indexOf(r)&&t.children.push(r)):(console.warn("[HMR] unexpected require("+r+") from disposed module "+e),a=[]),O(r)},i=function(e){return{configurable:!0,enumerable:!0,get:function(){return O[e]},set:function(t){O[e]=t}}};for(var o in O)Object.prototype.hasOwnProperty.call(O,o)&&"e"!==o&&"t"!==o&&Object.defineProperty(r,o,i(o));return r.e=function(e){return"ready"===h&&c("prepare"),y++,O.e(e).then(t,(function(e){throw t(),e}));function t(){y--,"prepare"===h&&(m[e]||S(e),0===y&&0===b&&x())}},r.t=function(e,t){return 1&t&&(e=r(e)),O.t(e,-2&t)},r}function u(t){var r={_acceptedDependencies:{},_declinedDependencies:{},_selfAccepted:!1,_selfDeclined:!1,_selfInvalidated:!1,_disposeHandlers:[],_main:n!==t,active:!0,accept:function(e,t){if(void 0===e)r._selfAccepted=!0;else if("function"==typeof e)r._selfAccepted=e;else if("object"==typeof e)for(var n=0;n=0&&r._disposeHandlers.splice(t,1)},invalidate:function(){switch(this._selfInvalidated=!0,h){case"idle":(p={})[t]=e[t],c("ready");break;case"ready":A(t);break;case"prepare":case"check":case"dispose":case"apply":(g=g||[]).push(t)}},check:k,apply:T,status:function(e){if(!e)return h;f.push(e)},addStatusHandler:function(e){f.push(e)},removeStatusHandler:function(e){var t=f.indexOf(e);t>=0&&f.splice(t,1)},data:o[t]};return n=void 0,r}var f=[],h="idle";function c(e){h=e;for(var t=0;t0;){var i=r.pop(),o=i.id,a=i.chain;if((f=R[o])&&(!f.hot._selfAccepted||f.hot._selfInvalidated)){if(f.hot._selfDeclined)return{type:"self-declined",chain:a,moduleId:o};if(f.hot._main)return{type:"unaccepted",chain:a,moduleId:o};for(var s=0;s ")),x.type){case"self-declined":r.onDeclined&&r.onDeclined(x),r.ignoreDeclined||(T=new Error("Aborted because of self decline: "+x.moduleId+U));break;case"declined":r.onDeclined&&r.onDeclined(x),r.ignoreDeclined||(T=new Error("Aborted because of declined dependency: "+x.moduleId+" in "+x.parentId+U));break;case"unaccepted":r.onUnaccepted&&r.onUnaccepted(x),r.ignoreUnaccepted||(T=new Error("Aborted because "+h+" is not accepted"+U));break;case"accepted":r.onAccepted&&r.onAccepted(x),A=!0;break;case"disposed":r.onDisposed&&r.onDisposed(x),I=!0;break;default:throw new Error("Unexception type "+x.type)}if(T)return c("abort"),Promise.reject(T);if(A)for(h in v[h]=p[h],b(m,x.outdatedModules),x.outdatedDependencies)Object.prototype.hasOwnProperty.call(x.outdatedDependencies,h)&&(y[h]||(y[h]=[]),b(y[h],x.outdatedDependencies[h]));I&&(b(m,[x.moduleId]),v[h]=k)}var z,D=[];for(l=0;l0;)if(h=B.pop(),f=R[h]){var P={},F=f.hot._disposeHandlers;for(u=0;u=0&&C.parents.splice(z,1))}}for(h in y)if(Object.prototype.hasOwnProperty.call(y,h)&&(f=R[h]))for(N=y[h],u=0;u=0&&f.children.splice(z,1);c("apply"),void 0!==_&&(i=_,_=void 0);for(h in p=void 0,v)Object.prototype.hasOwnProperty.call(v,h)&&(e[h]=v[h]);var Z=null;for(h in y)if(Object.prototype.hasOwnProperty.call(y,h)&&(f=R[h])){N=y[h];var j=[];for(l=0;l + * @license MIT + */ +var r=n(204),i=n(205),o=n(29);function a(){return l.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function s(e,t){if(a()=a())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a().toString(16)+" bytes");return 0|e}function p(e,t){if(l.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var r=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return C(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return Z(e).length;default:if(r)return C(e).length;t=(""+t).toLowerCase(),r=!0}}function _(e,t,n){var r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return R(this,t,n);case"utf8":case"utf-8":return T(this,t,n);case"ascii":return L(this,t,n);case"latin1":case"binary":return A(this,t,n);case"base64":return x(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function g(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function b(e,t,n,r,i){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=i?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(i)return-1;n=e.length-1}else if(n<0){if(!i)return-1;n=0}if("string"==typeof t&&(t=l.from(t,r)),l.isBuffer(t))return 0===t.length?-1:y(e,t,n,r,i);if("number"==typeof t)return t&=255,l.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):y(e,[t],n,r,i);throw new TypeError("val must be string, number or Buffer")}function y(e,t,n,r,i){var o,a=1,s=e.length,l=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;a=2,s/=2,l/=2,n/=2}function u(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(i){var f=-1;for(o=n;os&&(n=s-l),o=n;o>=0;o--){for(var h=!0,c=0;ci&&(r=i):r=i;var o=t.length;if(o%2!=0)throw new TypeError("Invalid hex string");r>o/2&&(r=o/2);for(var a=0;a>8,i=n%256,o.push(i),o.push(r);return o}(t,e.length-n),e,n,r)}function x(e,t,n){return 0===t&&n===e.length?r.fromByteArray(e):r.fromByteArray(e.slice(t,n))}function T(e,t,n){n=Math.min(e.length,n);for(var r=[],i=t;i239?4:u>223?3:u>191?2:1;if(i+h<=n)switch(h){case 1:u<128&&(f=u);break;case 2:128==(192&(o=e[i+1]))&&(l=(31&u)<<6|63&o)>127&&(f=l);break;case 3:o=e[i+1],a=e[i+2],128==(192&o)&&128==(192&a)&&(l=(15&u)<<12|(63&o)<<6|63&a)>2047&&(l<55296||l>57343)&&(f=l);break;case 4:o=e[i+1],a=e[i+2],s=e[i+3],128==(192&o)&&128==(192&a)&&128==(192&s)&&(l=(15&u)<<18|(63&o)<<12|(63&a)<<6|63&s)>65535&&l<1114112&&(f=l)}null===f?(f=65533,h=1):f>65535&&(f-=65536,r.push(f>>>10&1023|55296),f=56320|1023&f),r.push(f),i+=h}return function(e){var t=e.length;if(t<=4096)return String.fromCharCode.apply(String,e);var n="",r=0;for(;r0&&(e=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(e+=" ... ")),""},l.prototype.compare=function(e,t,n,r,i){if(!l.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===i&&(i=this.length),t<0||n>e.length||r<0||i>this.length)throw new RangeError("out of range index");if(r>=i&&t>=n)return 0;if(r>=i)return-1;if(t>=n)return 1;if(this===e)return 0;for(var o=(i>>>=0)-(r>>>=0),a=(n>>>=0)-(t>>>=0),s=Math.min(o,a),u=this.slice(r,i),f=e.slice(t,n),h=0;hi)&&(n=i),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var o=!1;;)switch(r){case"hex":return m(this,e,t,n);case"utf8":case"utf-8":return v(this,e,t,n);case"ascii":return w(this,e,t,n);case"latin1":case"binary":return E(this,e,t,n);case"base64":return k(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return S(this,e,t,n);default:if(o)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),o=!0}},l.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function L(e,t,n){var r="";n=Math.min(e.length,n);for(var i=t;ir)&&(n=r);for(var i="",o=t;on)throw new RangeError("Trying to access beyond buffer length")}function U(e,t,n,r,i,o){if(!l.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||te.length)throw new RangeError("Index out of range")}function z(e,t,n,r){t<0&&(t=65535+t+1);for(var i=0,o=Math.min(e.length-n,2);i>>8*(r?i:1-i)}function D(e,t,n,r){t<0&&(t=4294967295+t+1);for(var i=0,o=Math.min(e.length-n,4);i>>8*(r?i:3-i)&255}function M(e,t,n,r,i,o){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function N(e,t,n,r,o){return o||M(e,0,n,4),i.write(e,t,n,r,23,4),n+4}function B(e,t,n,r,o){return o||M(e,0,n,8),i.write(e,t,n,r,52,8),n+8}l.prototype.slice=function(e,t){var n,r=this.length;if((e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t0&&(i*=256);)r+=this[e+--t]*i;return r},l.prototype.readUInt8=function(e,t){return t||I(e,1,this.length),this[e]},l.prototype.readUInt16LE=function(e,t){return t||I(e,2,this.length),this[e]|this[e+1]<<8},l.prototype.readUInt16BE=function(e,t){return t||I(e,2,this.length),this[e]<<8|this[e+1]},l.prototype.readUInt32LE=function(e,t){return t||I(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},l.prototype.readUInt32BE=function(e,t){return t||I(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},l.prototype.readIntLE=function(e,t,n){e|=0,t|=0,n||I(e,t,this.length);for(var r=this[e],i=1,o=0;++o=(i*=128)&&(r-=Math.pow(2,8*t)),r},l.prototype.readIntBE=function(e,t,n){e|=0,t|=0,n||I(e,t,this.length);for(var r=t,i=1,o=this[e+--r];r>0&&(i*=256);)o+=this[e+--r]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*t)),o},l.prototype.readInt8=function(e,t){return t||I(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},l.prototype.readInt16LE=function(e,t){t||I(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt16BE=function(e,t){t||I(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt32LE=function(e,t){return t||I(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},l.prototype.readInt32BE=function(e,t){return t||I(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},l.prototype.readFloatLE=function(e,t){return t||I(e,4,this.length),i.read(this,e,!0,23,4)},l.prototype.readFloatBE=function(e,t){return t||I(e,4,this.length),i.read(this,e,!1,23,4)},l.prototype.readDoubleLE=function(e,t){return t||I(e,8,this.length),i.read(this,e,!0,52,8)},l.prototype.readDoubleBE=function(e,t){return t||I(e,8,this.length),i.read(this,e,!1,52,8)},l.prototype.writeUIntLE=function(e,t,n,r){(e=+e,t|=0,n|=0,r)||U(this,e,t,n,Math.pow(2,8*n)-1,0);var i=1,o=0;for(this[t]=255&e;++o=0&&(o*=256);)this[t+i]=e/o&255;return t+n},l.prototype.writeUInt8=function(e,t,n){return e=+e,t|=0,n||U(this,e,t,1,255,0),l.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},l.prototype.writeUInt16LE=function(e,t,n){return e=+e,t|=0,n||U(this,e,t,2,65535,0),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):z(this,e,t,!0),t+2},l.prototype.writeUInt16BE=function(e,t,n){return e=+e,t|=0,n||U(this,e,t,2,65535,0),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):z(this,e,t,!1),t+2},l.prototype.writeUInt32LE=function(e,t,n){return e=+e,t|=0,n||U(this,e,t,4,4294967295,0),l.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):D(this,e,t,!0),t+4},l.prototype.writeUInt32BE=function(e,t,n){return e=+e,t|=0,n||U(this,e,t,4,4294967295,0),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):D(this,e,t,!1),t+4},l.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t|=0,!r){var i=Math.pow(2,8*n-1);U(this,e,t,n,i-1,-i)}var o=0,a=1,s=0;for(this[t]=255&e;++o>0)-s&255;return t+n},l.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t|=0,!r){var i=Math.pow(2,8*n-1);U(this,e,t,n,i-1,-i)}var o=n-1,a=1,s=0;for(this[t+o]=255&e;--o>=0&&(a*=256);)e<0&&0===s&&0!==this[t+o+1]&&(s=1),this[t+o]=(e/a>>0)-s&255;return t+n},l.prototype.writeInt8=function(e,t,n){return e=+e,t|=0,n||U(this,e,t,1,127,-128),l.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},l.prototype.writeInt16LE=function(e,t,n){return e=+e,t|=0,n||U(this,e,t,2,32767,-32768),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):z(this,e,t,!0),t+2},l.prototype.writeInt16BE=function(e,t,n){return e=+e,t|=0,n||U(this,e,t,2,32767,-32768),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):z(this,e,t,!1),t+2},l.prototype.writeInt32LE=function(e,t,n){return e=+e,t|=0,n||U(this,e,t,4,2147483647,-2147483648),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):D(this,e,t,!0),t+4},l.prototype.writeInt32BE=function(e,t,n){return e=+e,t|=0,n||U(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):D(this,e,t,!1),t+4},l.prototype.writeFloatLE=function(e,t,n){return N(this,e,t,!0,n)},l.prototype.writeFloatBE=function(e,t,n){return N(this,e,t,!1,n)},l.prototype.writeDoubleLE=function(e,t,n){return B(this,e,t,!0,n)},l.prototype.writeDoubleBE=function(e,t,n){return B(this,e,t,!1,n)},l.prototype.copy=function(e,t,n,r){if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t=0;--i)e[i+t]=this[i+n];else if(o<1e3||!l.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(o=t;o55295&&n<57344){if(!i){if(n>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(a+1===r){(t-=3)>-1&&o.push(239,191,189);continue}i=n;continue}if(n<56320){(t-=3)>-1&&o.push(239,191,189),i=n;continue}n=65536+(i-55296<<10|n-56320)}else i&&(t-=3)>-1&&o.push(239,191,189);if(i=null,n<128){if((t-=1)<0)break;o.push(n)}else if(n<2048){if((t-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function Z(e){return r.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(P,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function j(e,t,n,r){for(var i=0;i=t.length||i>=e.length);++i)t[i+n]=e[i];return i}}).call(this,n(1))},function(e,t){var n,r,i=e.exports={};function o(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(e){if(n===setTimeout)return setTimeout(e,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:o}catch(e){n=o}try{r="function"==typeof clearTimeout?clearTimeout:a}catch(e){r=a}}();var l,u=[],f=!1,h=-1;function c(){f&&l&&(f=!1,l.length?u=l.concat(u):h=-1,u.length&&d())}function d(){if(!f){var e=s(c);f=!0;for(var t=u.length;t;){for(l=u,u=[];++h1)for(var n=1;n0&&a.length>i&&!a.warned){a.warned=!0;var l=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");l.name="MaxListenersExceededWarning",l.emitter=e,l.type=t,l.count=a.length,s=l,console&&console.warn&&console.warn(s)}return e}function h(){for(var e=[],t=0;t0&&(a=t[0]),a instanceof Error)throw a;var s=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw s.context=a,s}var l=i[e];if(void 0===l)return!1;if("function"==typeof l)o(l,this,t);else{var u=l.length,f=_(l,u);for(n=0;n=0;o--)if(n[o]===t||n[o].listener===t){a=n[o].listener,i=o;break}if(i<0)return this;0===i?n.shift():function(e,t){for(;t+1=0;r--)this.removeListener(e,t[r]);return this},s.prototype.listeners=function(e){return d(this,e,!0)},s.prototype.rawListeners=function(e){return d(this,e,!1)},s.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):p.call(e,t)},s.prototype.listenerCount=p,s.prototype.eventNames=function(){return this._eventsCount>0?r(this._events):[]}},function(e,t,n){"use strict";(function(t,r,i){var o=n(12);function a(e){var t=this;this.next=null,this.entry=null,this.finish=function(){!function(e,t,n){var r=e.entry;e.entry=null;for(;r;){var i=r.callback;t.pendingcb--,i(n),r=r.next}t.corkedRequestsFree?t.corkedRequestsFree.next=e:t.corkedRequestsFree=e}(t,e)}}e.exports=y;var s,l=!t.browser&&["v0.10","v0.9."].indexOf(t.version.slice(0,5))>-1?r:o.nextTick;y.WritableState=b;var u=n(10);u.inherits=n(4);var f={deprecate:n(214)},h=n(31),c=n(13).Buffer,d=i.Uint8Array||function(){};var p,_=n(32);function g(){}function b(e,t){s=s||n(5),e=e||{};var r=t instanceof s;this.objectMode=!!e.objectMode,r&&(this.objectMode=this.objectMode||!!e.writableObjectMode);var i=e.highWaterMark,u=e.writableHighWaterMark,f=this.objectMode?16:16384;this.highWaterMark=i||0===i?i:r&&(u||0===u)?u:f,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var h=!1===e.decodeStrings;this.decodeStrings=!h,this.defaultEncoding=e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var n=e._writableState,r=n.sync,i=n.writecb;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(n),t)!function(e,t,n,r,i){--t.pendingcb,n?(o.nextTick(i,r),o.nextTick(S,e,t),e._writableState.errorEmitted=!0,e.emit("error",r)):(i(r),e._writableState.errorEmitted=!0,e.emit("error",r),S(e,t))}(e,n,r,t,i);else{var a=E(n);a||n.corked||n.bufferProcessing||!n.bufferedRequest||w(e,n),r?l(v,e,n,a,i):v(e,n,a,i)}}(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new a(this)}function y(e){if(s=s||n(5),!(p.call(y,this)||this instanceof s))return new y(e);this._writableState=new b(e,this),this.writable=!0,e&&("function"==typeof e.write&&(this._write=e.write),"function"==typeof e.writev&&(this._writev=e.writev),"function"==typeof e.destroy&&(this._destroy=e.destroy),"function"==typeof e.final&&(this._final=e.final)),h.call(this)}function m(e,t,n,r,i,o,a){t.writelen=r,t.writecb=a,t.writing=!0,t.sync=!0,n?e._writev(i,t.onwrite):e._write(i,o,t.onwrite),t.sync=!1}function v(e,t,n,r){n||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit("drain"))}(e,t),t.pendingcb--,r(),S(e,t)}function w(e,t){t.bufferProcessing=!0;var n=t.bufferedRequest;if(e._writev&&n&&n.next){var r=t.bufferedRequestCount,i=new Array(r),o=t.corkedRequestsFree;o.entry=n;for(var s=0,l=!0;n;)i[s]=n,n.isBuf||(l=!1),n=n.next,s+=1;i.allBuffers=l,m(e,t,!0,t.length,i,"",o.finish),t.pendingcb++,t.lastBufferedRequest=null,o.next?(t.corkedRequestsFree=o.next,o.next=null):t.corkedRequestsFree=new a(t),t.bufferedRequestCount=0}else{for(;n;){var u=n.chunk,f=n.encoding,h=n.callback;if(m(e,t,!1,t.objectMode?1:u.length,u,f,h),n=n.next,t.bufferedRequestCount--,t.writing)break}null===n&&(t.lastBufferedRequest=null)}t.bufferedRequest=n,t.bufferProcessing=!1}function E(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function k(e,t){e._final((function(n){t.pendingcb--,n&&e.emit("error",n),t.prefinished=!0,e.emit("prefinish"),S(e,t)}))}function S(e,t){var n=E(t);return n&&(!function(e,t){t.prefinished||t.finalCalled||("function"==typeof e._final?(t.pendingcb++,t.finalCalled=!0,o.nextTick(k,e,t)):(t.prefinished=!0,e.emit("prefinish")))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit("finish"))),n}u.inherits(y,h),b.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(b.prototype,"buffer",{get:f.deprecate((function(){return this.getBuffer()}),"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(e){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(p=Function.prototype[Symbol.hasInstance],Object.defineProperty(y,Symbol.hasInstance,{value:function(e){return!!p.call(this,e)||this===y&&(e&&e._writableState instanceof b)}})):p=function(e){return e instanceof this},y.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},y.prototype.write=function(e,t,n){var r,i=this._writableState,a=!1,s=!i.objectMode&&(r=e,c.isBuffer(r)||r instanceof d);return s&&!c.isBuffer(e)&&(e=function(e){return c.from(e)}(e)),"function"==typeof t&&(n=t,t=null),s?t="buffer":t||(t=i.defaultEncoding),"function"!=typeof n&&(n=g),i.ended?function(e,t){var n=new Error("write after end");e.emit("error",n),o.nextTick(t,n)}(this,n):(s||function(e,t,n,r){var i=!0,a=!1;return null===n?a=new TypeError("May not write null values to stream"):"string"==typeof n||void 0===n||t.objectMode||(a=new TypeError("Invalid non-string/buffer chunk")),a&&(e.emit("error",a),o.nextTick(r,a),i=!1),i}(this,i,e,n))&&(i.pendingcb++,a=function(e,t,n,r,i,o){if(!n){var a=function(e,t,n){e.objectMode||!1===e.decodeStrings||"string"!=typeof t||(t=c.from(t,n));return t}(t,r,i);r!==a&&(n=!0,i="buffer",r=a)}var s=t.objectMode?1:r.length;t.length+=s;var l=t.length-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(y.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),y.prototype._write=function(e,t,n){n(new Error("_write() is not implemented"))},y.prototype._writev=null,y.prototype.end=function(e,t,n){var r=this._writableState;"function"==typeof e?(n=e,e=null,t=null):"function"==typeof t&&(n=t,t=null),null!=e&&this.write(e,t),r.corked&&(r.corked=1,this.uncork()),r.ending||r.finished||function(e,t,n){t.ending=!0,S(e,t),n&&(t.finished?o.nextTick(n):e.once("finish",n));t.ended=!0,e.writable=!1}(this,r,n)},Object.defineProperty(y.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),y.prototype.destroy=_.destroy,y.prototype._undestroy=_.undestroy,y.prototype._destroy=function(e,t){this.end(),t(e)}}).call(this,n(3),n(212).setImmediate,n(1))},,,,,,,,,function(e,t){var n={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==n.call(e)}},function(e,t,n){"use strict";(function(t,r){var i=n(12);e.exports=m;var o,a=n(29);m.ReadableState=y;n(19).EventEmitter;var s=function(e,t){return e.listeners(t).length},l=n(31),u=n(13).Buffer,f=t.Uint8Array||function(){};var h=n(10);h.inherits=n(4);var c=n(209),d=void 0;d=c&&c.debuglog?c.debuglog("stream"):function(){};var p,_=n(210),g=n(32);h.inherits(m,l);var b=["error","close","destroy","pause","resume"];function y(e,t){e=e||{};var r=t instanceof(o=o||n(5));this.objectMode=!!e.objectMode,r&&(this.objectMode=this.objectMode||!!e.readableObjectMode);var i=e.highWaterMark,a=e.readableHighWaterMark,s=this.objectMode?16:16384;this.highWaterMark=i||0===i?i:r&&(a||0===a)?a:s,this.highWaterMark=Math.floor(this.highWaterMark),this.buffer=new _,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.destroyed=!1,this.defaultEncoding=e.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(p||(p=n(33).StringDecoder),this.decoder=new p(e.encoding),this.encoding=e.encoding)}function m(e){if(o=o||n(5),!(this instanceof m))return new m(e);this._readableState=new y(e,this),this.readable=!0,e&&("function"==typeof e.read&&(this._read=e.read),"function"==typeof e.destroy&&(this._destroy=e.destroy)),l.call(this)}function v(e,t,n,r,i){var o,a=e._readableState;null===t?(a.reading=!1,function(e,t){if(t.ended)return;if(t.decoder){var n=t.decoder.end();n&&n.length&&(t.buffer.push(n),t.length+=t.objectMode?1:n.length)}t.ended=!0,k(e)}(e,a)):(i||(o=function(e,t){var n;r=t,u.isBuffer(r)||r instanceof f||"string"==typeof t||void 0===t||e.objectMode||(n=new TypeError("Invalid non-string/buffer chunk"));var r;return n}(a,t)),o?e.emit("error",o):a.objectMode||t&&t.length>0?("string"==typeof t||a.objectMode||Object.getPrototypeOf(t)===u.prototype||(t=function(e){return u.from(e)}(t)),r?a.endEmitted?e.emit("error",new Error("stream.unshift() after end event")):w(e,a,t,!0):a.ended?e.emit("error",new Error("stream.push() after EOF")):(a.reading=!1,a.decoder&&!n?(t=a.decoder.write(t),a.objectMode||0!==t.length?w(e,a,t,!1):x(e,a)):w(e,a,t,!1))):r||(a.reading=!1));return function(e){return!e.ended&&(e.needReadable||e.lengtht.highWaterMark&&(t.highWaterMark=function(e){return e>=8388608?e=8388608:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function k(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(d("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?i.nextTick(S,e):S(e))}function S(e){d("emit readable"),e.emit("readable"),R(e)}function x(e,t){t.readingMore||(t.readingMore=!0,i.nextTick(T,e,t))}function T(e,t){for(var n=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length=t.length?(n=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):n=function(e,t,n){var r;eo.length?o.length:e;if(a===o.length?i+=o:i+=o.slice(0,e),0===(e-=a)){a===o.length?(++r,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n,n.data=o.slice(a));break}++r}return t.length-=r,i}(e,t):function(e,t){var n=u.allocUnsafe(e),r=t.head,i=1;r.data.copy(n),e-=r.data.length;for(;r=r.next;){var o=r.data,a=e>o.length?o.length:e;if(o.copy(n,n.length-e,0,a),0===(e-=a)){a===o.length?(++i,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r,r.data=o.slice(a));break}++i}return t.length-=i,n}(e,t);return r}(e,t.buffer,t.decoder),n);var n}function I(e){var t=e._readableState;if(t.length>0)throw new Error('"endReadable()" called on non-empty stream');t.endEmitted||(t.ended=!0,i.nextTick(U,t,e))}function U(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function z(e,t){for(var n=0,r=e.length;n=t.highWaterMark||t.ended))return d("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?I(this):k(this),null;if(0===(e=E(e,t))&&t.ended)return 0===t.length&&I(this),null;var r,i=t.needReadable;return d("need readable",i),(0===t.length||t.length-e0?O(e,t):null)?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),n!==e&&t.ended&&I(this)),null!==r&&this.emit("data",r),r},m.prototype._read=function(e){this.emit("error",new Error("_read() is not implemented"))},m.prototype.pipe=function(e,t){var n=this,o=this._readableState;switch(o.pipesCount){case 0:o.pipes=e;break;case 1:o.pipes=[o.pipes,e];break;default:o.pipes.push(e)}o.pipesCount+=1,d("pipe count=%d opts=%j",o.pipesCount,t);var l=(!t||!1!==t.end)&&e!==r.stdout&&e!==r.stderr?f:m;function u(t,r){d("onunpipe"),t===n&&r&&!1===r.hasUnpiped&&(r.hasUnpiped=!0,d("cleanup"),e.removeListener("close",b),e.removeListener("finish",y),e.removeListener("drain",h),e.removeListener("error",g),e.removeListener("unpipe",u),n.removeListener("end",f),n.removeListener("end",m),n.removeListener("data",_),c=!0,!o.awaitDrain||e._writableState&&!e._writableState.needDrain||h())}function f(){d("onend"),e.end()}o.endEmitted?i.nextTick(l):n.once("end",l),e.on("unpipe",u);var h=function(e){return function(){var t=e._readableState;d("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&s(e,"data")&&(t.flowing=!0,R(e))}}(n);e.on("drain",h);var c=!1;var p=!1;function _(t){d("ondata"),p=!1,!1!==e.write(t)||p||((1===o.pipesCount&&o.pipes===e||o.pipesCount>1&&-1!==z(o.pipes,e))&&!c&&(d("false write response, pause",n._readableState.awaitDrain),n._readableState.awaitDrain++,p=!0),n.pause())}function g(t){d("onerror",t),m(),e.removeListener("error",g),0===s(e,"error")&&e.emit("error",t)}function b(){e.removeListener("finish",y),m()}function y(){d("onfinish"),e.removeListener("close",b),m()}function m(){d("unpipe"),n.unpipe(e)}return n.on("data",_),function(e,t,n){if("function"==typeof e.prependListener)return e.prependListener(t,n);e._events&&e._events[t]?a(e._events[t])?e._events[t].unshift(n):e._events[t]=[n,e._events[t]]:e.on(t,n)}(e,"error",g),e.once("close",b),e.once("finish",y),e.emit("pipe",n),o.flowing||(d("pipe resume"),n.resume()),e},m.prototype.unpipe=function(e){var t=this._readableState,n={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this,n)),this;if(!e){var r=t.pipes,i=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var o=0;o>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function s(e){var t=this.lastTotal-this.lastNeed,n=function(e,t,n){if(128!=(192&t[0]))return e.lastNeed=0,"�";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,"�";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,"�"}}(this,e);return void 0!==n?n:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function l(e,t){if((e.length-t)%2==0){var n=e.toString("utf16le",t);if(n){var r=n.charCodeAt(n.length-1);if(r>=55296&&r<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],n.slice(0,-1)}return n}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function u(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var n=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,n)}return t}function f(e,t){var n=(e.length-t)%3;return 0===n?e.toString("base64",t):(this.lastNeed=3-n,this.lastTotal=3,1===n?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-n))}function h(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function c(e){return e.toString(this.encoding)}function d(e){return e&&e.length?this.write(e):""}t.StringDecoder=o,o.prototype.write=function(e){if(0===e.length)return"";var t,n;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return"";n=this.lastNeed,this.lastNeed=0}else n=0;return n=0)return i>0&&(e.lastNeed=i-1),i;if(--r=0)return i>0&&(e.lastNeed=i-2),i;if(--r=0)return i>0&&(2===i?i=0:e.lastNeed=i-3),i;return 0}(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=n;var r=e.length-(n-this.lastNeed);return e.copy(this.lastChar,0,r),e.toString("utf8",t,r)},o.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},function(e,t,n){"use strict";e.exports=a;var r=n(5),i=n(10);function o(e,t){var n=this._transformState;n.transforming=!1;var r=n.writecb;if(!r)return this.emit("error",new Error("write callback called multiple times"));n.writechunk=null,n.writecb=null,null!=t&&this.push(t),r(e);var i=this._readableState;i.reading=!1,(i.needReadable||i.length=0;s--)if(l[s]!=u[s])return!1;for(s=l.length-1;s>=0;s--)if(a=l[s],!h(e[a],t[a]))return!1;return!0}(e,t):e==t}function c(e){return"[object Arguments]"==Object.prototype.toString.call(e)}function d(e,t){return!(!e||!t)&&("[object RegExp]"==Object.prototype.toString.call(t)?t.test(e):e instanceof t||!0===t.call({},e))}function p(e,t,n,i){var o;r.isString(n)&&(i=n,n=null);try{t()}catch(e){o=e}if(i=(n&&n.name?" ("+n.name+").":".")+(i?" "+i:"."),e&&!o&&u(o,n,"Missing expected exception"+i),!e&&d(o,n)&&u(o,n,"Got unwanted exception"+i),e&&o&&n&&!d(o,n)||!e&&o)throw o}a.AssertionError=function(e){this.name="AssertionError",this.actual=e.actual,this.expected=e.expected,this.operator=e.operator,e.message?(this.message=e.message,this.generatedMessage=!1):(this.message=function(e){return l(JSON.stringify(e.actual,s),128)+" "+e.operator+" "+l(JSON.stringify(e.expected,s),128)}(this),this.generatedMessage=!0);var t=e.stackStartFunction||u;if(Error.captureStackTrace)Error.captureStackTrace(this,t);else{var n=new Error;if(n.stack){var r=n.stack,i=t.name,o=r.indexOf("\n"+i);if(o>=0){var a=r.indexOf("\n",o+1);r=r.substring(a+1)}this.stack=r}}},r.inherits(a.AssertionError,Error),a.fail=u,a.ok=f,a.equal=function(e,t,n){e!=t&&u(e,t,n,"==",a.equal)},a.notEqual=function(e,t,n){e==t&&u(e,t,n,"!=",a.notEqual)},a.deepEqual=function(e,t,n){h(e,t)||u(e,t,n,"deepEqual",a.deepEqual)},a.notDeepEqual=function(e,t,n){h(e,t)&&u(e,t,n,"notDeepEqual",a.notDeepEqual)},a.strictEqual=function(e,t,n){e!==t&&u(e,t,n,"===",a.strictEqual)},a.notStrictEqual=function(e,t,n){e===t&&u(e,t,n,"!==",a.notStrictEqual)},a.throws=function(e,t,n){p.apply(this,[!0].concat(i.call(arguments)))},a.doesNotThrow=function(e,t){p.apply(this,[!1].concat(i.call(arguments)))},a.ifError=function(e){if(e)throw e};var _=Object.keys||function(e){var t=[];for(var n in e)o.call(e,n)&&t.push(n);return t}},function(e,t,n){(function(e){var r=Object.getOwnPropertyDescriptors||function(e){for(var t=Object.keys(e),n={},r=0;r=o)return e;switch(e){case"%s":return String(r[n++]);case"%d":return Number(r[n++]);case"%j":try{return JSON.stringify(r[n++])}catch(e){return"[Circular]"}default:return e}})),l=r[n];n=3&&(r.depth=arguments[2]),arguments.length>=4&&(r.colors=arguments[3]),p(n)?r.showHidden=n:n&&t._extend(r,n),y(r.showHidden)&&(r.showHidden=!1),y(r.depth)&&(r.depth=2),y(r.colors)&&(r.colors=!1),y(r.customInspect)&&(r.customInspect=!0),r.colors&&(r.stylize=l),f(r,e,r.depth)}function l(e,t){var n=s.styles[t];return n?"["+s.colors[n][0]+"m"+e+"["+s.colors[n][1]+"m":e}function u(e,t){return e}function f(e,n,r){if(e.customInspect&&n&&k(n.inspect)&&n.inspect!==t.inspect&&(!n.constructor||n.constructor.prototype!==n)){var i=n.inspect(r,e);return b(i)||(i=f(e,i,r)),i}var o=function(e,t){if(y(t))return e.stylize("undefined","undefined");if(b(t)){var n="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(n,"string")}if(g(t))return e.stylize(""+t,"number");if(p(t))return e.stylize(""+t,"boolean");if(_(t))return e.stylize("null","null")}(e,n);if(o)return o;var a=Object.keys(n),s=function(e){var t={};return e.forEach((function(e,n){t[e]=!0})),t}(a);if(e.showHidden&&(a=Object.getOwnPropertyNames(n)),E(n)&&(a.indexOf("message")>=0||a.indexOf("description")>=0))return h(n);if(0===a.length){if(k(n)){var l=n.name?": "+n.name:"";return e.stylize("[Function"+l+"]","special")}if(m(n))return e.stylize(RegExp.prototype.toString.call(n),"regexp");if(w(n))return e.stylize(Date.prototype.toString.call(n),"date");if(E(n))return h(n)}var u,v="",S=!1,x=["{","}"];(d(n)&&(S=!0,x=["[","]"]),k(n))&&(v=" [Function"+(n.name?": "+n.name:"")+"]");return m(n)&&(v=" "+RegExp.prototype.toString.call(n)),w(n)&&(v=" "+Date.prototype.toUTCString.call(n)),E(n)&&(v=" "+h(n)),0!==a.length||S&&0!=n.length?r<0?m(n)?e.stylize(RegExp.prototype.toString.call(n),"regexp"):e.stylize("[Object]","special"):(e.seen.push(n),u=S?function(e,t,n,r,i){for(var o=[],a=0,s=t.length;a=0&&0,e+t.replace(/\u001b\[\d\d?m/g,"").length+1}),0)>60)return n[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+n[1];return n[0]+t+" "+e.join(", ")+" "+n[1]}(u,v,x)):x[0]+v+x[1]}function h(e){return"["+Error.prototype.toString.call(e)+"]"}function c(e,t,n,r,i,o){var a,s,l;if((l=Object.getOwnPropertyDescriptor(t,i)||{value:t[i]}).get?s=l.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):l.set&&(s=e.stylize("[Setter]","special")),A(r,i)||(a="["+i+"]"),s||(e.seen.indexOf(l.value)<0?(s=_(n)?f(e,l.value,null):f(e,l.value,n-1)).indexOf("\n")>-1&&(s=o?s.split("\n").map((function(e){return" "+e})).join("\n").substr(2):"\n"+s.split("\n").map((function(e){return" "+e})).join("\n")):s=e.stylize("[Circular]","special")),y(a)){if(o&&i.match(/^\d+$/))return s;(a=JSON.stringify(""+i)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(a=a.substr(1,a.length-2),a=e.stylize(a,"name")):(a=a.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),a=e.stylize(a,"string"))}return a+": "+s}function d(e){return Array.isArray(e)}function p(e){return"boolean"==typeof e}function _(e){return null===e}function g(e){return"number"==typeof e}function b(e){return"string"==typeof e}function y(e){return void 0===e}function m(e){return v(e)&&"[object RegExp]"===S(e)}function v(e){return"object"==typeof e&&null!==e}function w(e){return v(e)&&"[object Date]"===S(e)}function E(e){return v(e)&&("[object Error]"===S(e)||e instanceof Error)}function k(e){return"function"==typeof e}function S(e){return Object.prototype.toString.call(e)}function x(e){return e<10?"0"+e.toString(10):e.toString(10)}t.debuglog=function(n){if(y(o)&&(o=e.env.NODE_DEBUG||""),n=n.toUpperCase(),!a[n])if(new RegExp("\\b"+n+"\\b","i").test(o)){var r=e.pid;a[n]=function(){var e=t.format.apply(t,arguments);console.error("%s %d: %s",n,r,e)}}else a[n]=function(){};return a[n]},t.inspect=s,s.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},s.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},t.isArray=d,t.isBoolean=p,t.isNull=_,t.isNullOrUndefined=function(e){return null==e},t.isNumber=g,t.isString=b,t.isSymbol=function(e){return"symbol"==typeof e},t.isUndefined=y,t.isRegExp=m,t.isObject=v,t.isDate=w,t.isError=E,t.isFunction=k,t.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},t.isBuffer=n(225);var T=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function L(){var e=new Date,t=[x(e.getHours()),x(e.getMinutes()),x(e.getSeconds())].join(":");return[e.getDate(),T[e.getMonth()],t].join(" ")}function A(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.log=function(){console.log("%s - %s",L(),t.format.apply(t,arguments))},t.inherits=n(4),t._extend=function(e,t){if(!t||!v(t))return e;for(var n=Object.keys(t),r=n.length;r--;)e[n[r]]=t[n[r]];return e};var R="undefined"!=typeof Symbol?Symbol("util.promisify.custom"):void 0;function O(e,t){if(!e){var n=new Error("Promise was rejected with a falsy value");n.reason=e,e=n}return t(e)}t.promisify=function(e){if("function"!=typeof e)throw new TypeError('The "original" argument must be of type Function');if(R&&e[R]){var t;if("function"!=typeof(t=e[R]))throw new TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(t,R,{value:t,enumerable:!1,writable:!1,configurable:!0}),t}function t(){for(var t,n,r=new Promise((function(e,r){t=e,n=r})),i=[],o=0;o>>16&65535|0,a=0;0!==n;){n-=a=n>2e3?2e3:n;do{o=o+(i=i+t[r++]|0)|0}while(--a);i%=65521,o%=65521}return i|o<<16|0}},function(e,t,n){"use strict";var r=function(){for(var e,t=[],n=0;n<256;n++){e=n;for(var r=0;r<8;r++)e=1&e?3988292384^e>>>1:e>>>1;t[n]=e}return t}();e.exports=function(e,t,n,i){var o=r,a=i+n;e^=-1;for(var s=i;s>>8^o[255&(e^t[s])];return-1^e}},function(e,t,n){"use strict";function r(e,t){return e.readUInt32LE(t)+4294967296*e.readUInt32LE(t+4)}function i(e){var t=arguments;return new Error(e.replace(/{(\d+)}/g,(function(e,n){var r=t[+n+1];return void 0===r?e:r})))}t.readEOCDRecord=function(e,t){e.read(-65557,(function(n,o){if(n)return t(n);if(o.length<22)return t(i("expected at least 22 bytes for End Of Central Directory got {0}",o.length));var a={},s=o.lastIndexOf("PK");if(-1===s)return t(i("End Of Central Directory not found"));var l=o.slice(s);if(0!==l.readUInt16LE(4))return t(i("spanned zip files are not supported"));a.entryCount=l.readUInt16LE(10),a.cdSize=l.readUInt32LE(12),a.cdOffset=l.readUInt32LE(16);var u=l.readUInt16LE(20);a.comment=l.toString("utf-8",22,22+u),console.assert(a.comment.length===u,"expected "+u+" bytes for zip file comment got "+a.comment.length),65535===a.entryCount||4294967295===a.cdSize||4294967295===a.cdOffset?function(e,t,n){!function(e,t,n){e.read(t-20,t,(function(e,t){if(e)return n(e);if(t.length<20)return n(i("expected at least 20 bytes for Zip64 End Of Central Directory Locator got {0}",t.length));if(117853008!==t.readUInt32LE(0))return n(i("Zip64 End Of Central Directory Locator not found"));var o=r(t,8);if(1!==t.readUInt32LE(16))return n(i("spanned zip files are not supported"));n(null,o)}))}(e,t,(function(t,o){if(t)return n(t);e.read(o,o+56,(function(e,t){if(e)return n(e);if(t.length<56)return n(i("expected at least 56 bytes for Zip64 End Of Central Directory got {0}",t.length));var o={};if(101075792!==t.readUInt32LE(0))return n(i("Zip64 End Of Central Directory not found"));o.entryCount=r(t,32),o.cdSize=r(t,40),o.cdOffset=r(t,48),n(null,o)}))}))}(e,s,(function(e,n){n&&(n.comment=a.comment),t(e,n)})):t(null,a)}))},t.readUInt64LE=r,t.E=i,t.cp437ToUnicode=function(e){var t,n=[0,9786,9787,9829,9830,9827,9824,8226,9688,9675,9689,9794,9792,9834,9835,9788,9658,9668,8597,8252,182,167,9644,8616,8593,8595,8594,8592,8735,8596,9650,9660,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,8962,199,252,233,226,228,224,229,231,234,235,232,239,238,236,196,197,201,230,198,244,246,242,251,249,255,214,220,162,163,165,8359,402,225,237,243,250,241,209,170,186,191,8976,172,189,188,161,171,187,9617,9618,9619,9474,9508,9569,9570,9558,9557,9571,9553,9559,9565,9564,9563,9488,9492,9524,9516,9500,9472,9532,9566,9567,9562,9556,9577,9574,9568,9552,9580,9575,9576,9572,9573,9561,9560,9554,9555,9579,9578,9496,9484,9608,9604,9612,9616,9600,945,223,915,960,931,963,181,964,934,920,937,948,8734,966,949,8745,8801,177,8805,8804,8992,8993,247,8776,176,8729,183,8730,8319,178,9632,160],r=new Array(e.length),i=r.length;for(t=0;t0)throw new Error("Invalid string. Length must be a multiple of 4");var l=e.length;a="="===e.charAt(l-2)?2:"="===e.charAt(l-1)?1:0,s=new t(3*e.length/4-a),i=a>0?e.length-4:e.length;var f=0;function h(e){s[f++]=e}for(n=0,r=0;n>16),h((65280&o)>>8),h(255&o);return 2===a?h(255&(o=u(e.charAt(n))<<2|u(e.charAt(n+1))>>4)):1===a&&(h((o=u(e.charAt(n))<<10|u(e.charAt(n+1))<<4|u(e.charAt(n+2))>>2)>>8&255),h(255&o)),s},e.fromByteArray=function(e){var t,n,r,i,o=e.length%3,a="";function s(e){return"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(e)}for(t=0,r=e.length-o;t>18&63)+s(i>>12&63)+s(i>>6&63)+s(63&i);switch(o){case 1:a+=s((n=e[e.length-1])>>2),a+=s(n<<4&63),a+="==";break;case 2:a+=s((n=(e[e.length-2]<<8)+e[e.length-1])>>10),a+=s(n>>4&63),a+=s(n<<2&63),a+="="}return a}}(t)},function(e,t){t.read=function(e,t,n,r,i){var o,a,s=8*i-r-1,l=(1<>1,f=-7,h=n?i-1:0,c=n?-1:1,d=e[t+h];for(h+=c,o=d&(1<<-f)-1,d>>=-f,f+=s;f>0;o=256*o+e[t+h],h+=c,f-=8);for(a=o&(1<<-f)-1,o>>=-f,f+=r;f>0;a=256*a+e[t+h],h+=c,f-=8);if(0===o)o=1-u;else{if(o===l)return a?NaN:1/0*(d?-1:1);a+=Math.pow(2,r),o-=u}return(d?-1:1)*a*Math.pow(2,o-r)},t.write=function(e,t,n,r,i,o){var a,s,l,u=8*o-i-1,f=(1<>1,c=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,d=r?0:o-1,p=r?1:-1,_=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,a=f):(a=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-a))<1&&(a--,l*=2),(t+=a+h>=1?c/l:c*Math.pow(2,1-h))*l>=2&&(a++,l/=2),a+h>=f?(s=0,a=f):a+h>=1?(s=(t*l-1)*Math.pow(2,i),a+=h):(s=t*Math.pow(2,h-1)*Math.pow(2,i),a=0));i>=8;e[n+d]=255&s,d+=p,s/=256,i-=8);for(a=a<0;e[n+d]=255&a,d+=p,a/=256,u-=8);e[n+d-p]|=128*_}},function(e,t,n){"use strict";var r=n(207),i=n(216),o=n(39);function a(e,t){try{var n=new r(e);o.readEOCDRecord(n,(function(e,r){t(e,e?null:new i(n,r))}))}catch(e){t(e)}}e.exports=function(e,t){if("string"==typeof e){var n=new XMLHttpRequest;n.addEventListener("readystatechange",(function(){4===this.readyState&&(200===this.status?a(this.response,t):t(o.E("network error: {0} {1}",this.status,this.statusText)))}));try{n.open("GET",e),n.responseType="blob",n.send()}catch(e){t(e)}}else a(e,t)}},function(e,t,n){"use strict";(function(t){var r=n(208);function i(e){if(!(this instanceof i))return new i(e);if(!(e instanceof Blob||-1!==["[object Blob]","[object File]"].indexOf(Object.prototype.toString.call(e))))throw new TypeError('"blob" argument must be an instance of Blob or File');this._blob=e}e.exports=i,i.prototype.read=function(e,n,r){if("function"==typeof e?r=e:"function"==typeof n&&(r=n,n=this._blob.size),"function"!=typeof r)throw new TypeError('"callback" argument must be a function');e=~~e,n=void 0===n?this._blob.size:~~n;var i=new FileReader;i.addEventListener("loadend",(function e(){this.removeEventListener("loadend",e),r(this.error,this.result?t.from(this.result):null)})),i.readAsArrayBuffer(this._blob.slice(e,n))},i.prototype.createReadStream=function(e){return new r(this._blob,e)}}).call(this,n(2).Buffer)},function(e,t,n){"use strict";(function(t){var r=n(9).Readable;function i(e,n){n||(n={}),void 0===n.highWaterMark&&(n.highWaterMark=65536),r.call(this,n);var i=~~n.start,o=void 0===n.end?e.size:~~n.end;this._blob=e.slice(i,o),this._end=this._blob.size,this._pos=0,this._reader=new FileReader;var a=this;this._loadendListener=function(){this.error?a.destroy(this.error):(a._pos+=this.result.byteLength,a.push(t.from(this.result)))},this._reader.addEventListener("loadend",this._loadendListener),this.on("end",(function(){this.destroy()}))}e.exports=i,i.prototype=Object.create(r.prototype),i.prototype.constructor=i,Object.defineProperties(i.prototype,{readableLength:{get:function(){return this._readableState.length}},ended:{get:function(){return this._pos>=this._end}}}),i.prototype._read=function(e){this.destroyed||(this.ended?this.push(null):this._reader.readAsArrayBuffer(this._blob.slice(this._pos,this._pos+e)))},i.prototype._destroy=function(e,t){t(e),this._reader.readyState===FileReader.LOADING&&this._reader.abort(),this._reader.removeEventListener("loadend",this._loadendListener),this._reader=null}}).call(this,n(2).Buffer)},function(e,t){},function(e,t,n){"use strict";var r=n(13).Buffer,i=n(211);e.exports=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.head=null,this.tail=null,this.length=0}return e.prototype.push=function(e){var t={data:e,next:null};this.length>0?this.tail.next=t:this.head=t,this.tail=t,++this.length},e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0},e.prototype.join=function(e){if(0===this.length)return"";for(var t=this.head,n=""+t.data;t=t.next;)n+=e+t.data;return n},e.prototype.concat=function(e){if(0===this.length)return r.alloc(0);if(1===this.length)return this.head.data;for(var t,n,i,o=r.allocUnsafe(e>>>0),a=this.head,s=0;a;)t=a.data,n=o,i=s,t.copy(n,i),s+=a.data.length,a=a.next;return o},e}(),i&&i.inspect&&i.inspect.custom&&(e.exports.prototype[i.inspect.custom]=function(){var e=i.inspect({length:this.length});return this.constructor.name+" "+e})},function(e,t){},function(e,t,n){(function(e){var r=void 0!==e&&e||"undefined"!=typeof self&&self||window,i=Function.prototype.apply;function o(e,t){this._id=e,this._clearFn=t}t.setTimeout=function(){return new o(i.call(setTimeout,r,arguments),clearTimeout)},t.setInterval=function(){return new o(i.call(setInterval,r,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},o.prototype.unref=o.prototype.ref=function(){},o.prototype.close=function(){this._clearFn.call(r,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},n(213),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,n(1))},function(e,t,n){(function(e,t){!function(e,n){"use strict";if(!e.setImmediate){var r,i,o,a,s,l=1,u={},f=!1,h=e.document,c=Object.getPrototypeOf&&Object.getPrototypeOf(e);c=c&&c.setTimeout?c:e,"[object process]"==={}.toString.call(e.process)?r=function(e){t.nextTick((function(){p(e)}))}:!function(){if(e.postMessage&&!e.importScripts){var t=!0,n=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=n,t}}()?e.MessageChannel?((o=new MessageChannel).port1.onmessage=function(e){p(e.data)},r=function(e){o.port2.postMessage(e)}):h&&"onreadystatechange"in h.createElement("script")?(i=h.documentElement,r=function(e){var t=h.createElement("script");t.onreadystatechange=function(){p(e),t.onreadystatechange=null,i.removeChild(t),t=null},i.appendChild(t)}):r=function(e){setTimeout(p,0,e)}:(a="setImmediate$"+Math.random()+"$",s=function(t){t.source===e&&"string"==typeof t.data&&0===t.data.indexOf(a)&&p(+t.data.slice(a.length))},e.addEventListener?e.addEventListener("message",s,!1):e.attachEvent("onmessage",s),r=function(t){e.postMessage(a+t,"*")}),c.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),n=0;n0;){if(this.readableLength<46){if(this.ended)return f(s("expected at least 46 bytes for Central File Header got {0}",this.readableLength));break}var e=this.read(46),n=new h;if(33639248!==e.readUInt32LE(0))return f(s("invalide Central File Header signature"));n.versionMadeBy=e.readUInt16LE(4),n.versionNeededToExtract=e.readUInt16LE(6),n.generalPurposeBitFlag=e.readUInt16LE(8),n.compressionMethod=e.readUInt16LE(10),n.lastModTime=e.readUInt16LE(12),n.lastModDate=e.readUInt16LE(14),n.crc32=e.readUInt32LE(16),n.compressedSize=e.readUInt32LE(20),n.uncompressedSize=e.readUInt32LE(24);var i=e.readUInt16LE(28),a=e.readUInt16LE(30),c=e.readUInt16LE(32);n.internalAttributes=e.readUInt16LE(36),n.externalAttributes=e.readUInt32LE(38),n.localHeaderOffset=e.readUInt32LE(42);var d=i+a+c;if(this.readableLength6){var a=1===i.readUInt8(0),s=r.unsigned(o)===i.readUInt32LE(1),l=i.toString("utf8",5);a&&s&&l.length>0&&(n[e]=l)}}))})),4294967295===n.compressedSize||4294967295===n.uncompressedSize||4294967295===n.localHeaderOffset){var w=n.extraFields.filter((function(e){return 1===e.headerId}))[0];if(!w)return f(s("Zip64 Extended Information Extra Field not found"));var E=0,k=["uncompressedSize","compressedSize","localHeaderOffset"];for(var S in k){var x=k[S];if(4294967295===n[x])try{n[x]=l(w.data,E),E+=8}catch(e){return f(s("invalid Zip64 Extended Information Extra Field: {0} not found",x))}}}o.entries.push(n)}this.read(0)}))},f.prototype.readEntryData=function(e,t,n){if(e.encrypted)n(s("encrypted files are not supported"));else if(0===e.compressionMethod||8===e.compressionMethod){var a=this;this._reader.read(e.localHeaderOffset,e.localHeaderOffset+30,(function(l,u){if(l)return n(l);if(u.length<30)return n(s("expected at least 30 bytes for Local File Header got {1}",u.length));if(67324752!==u.readUInt32LE(0))return n(s("invalid Local File Header signature"));var f=u.readUInt16LE(26),h=u.readUInt16LE(28),c=e.localHeaderOffset+30+f+h,d=a._reader.createReadStream({start:c,end:c+e.compressedSize});if(8===e.compressionMethod){var p=i();d=d.on("error",(function(e){p.destroy(e)})).pipe(p)}if(t){var _,g=new o({transform:function(e,t,n){_=r(e,_),n(null,e)},flush:function(t){t(_.readUInt32BE(0)===e.crc32?null:s("corrupted file: crc check fails"))}});d=d.on("error",(function(e){g.destroy(e)})).pipe(g)}n(null,d)}))}else n(s("compression method is not supported"))},Object.defineProperties(h.prototype,{encrypted:{get:function(){return 1==(1&this.generalPurposeBitFlag)}},lastModDateTime:{get:function(){return new Date(1980+(this.lastModDate>>9&127),(this.lastModDate>>5&15)-1,31&this.lastModDate,this.lastModTime>>11&31,this.lastModTime>>5&63,2*(31&this.lastModTime))}}})}).call(this,n(2).Buffer)},function(e,t,n){var r=n(2).Buffer,i=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117];function o(e){if(r.isBuffer(e))return e;var t="function"==typeof r.alloc&&"function"==typeof r.from;if("number"==typeof e)return t?r.alloc(e):new r(e);if("string"==typeof e)return t?r.from(e):new r(e);throw new Error("input must be buffer, number, or string, received "+typeof e)}function a(e){var t=o(4);return t.writeInt32BE(e,0),t}function s(e,t){e=o(e),r.isBuffer(t)&&(t=t.readUInt32BE(0));for(var n=-1^~~t,a=0;a>>8;return-1^n}function l(){return a(s.apply(null,arguments))}"undefined"!=typeof Int32Array&&(i=new Int32Array(i)),l.signed=function(){return s.apply(null,arguments)},l.unsigned=function(){return s.apply(null,arguments)>>>0},e.exports=l},function(e,t,n){"use strict";(function(e){var r=n(2).Buffer,i=n(219).Transform,o=n(224),a=n(36),s=n(35).ok,l=n(2).kMaxLength,u="Cannot create final Buffer. It would be larger than 0x"+l.toString(16)+" bytes";o.Z_MIN_WINDOWBITS=8,o.Z_MAX_WINDOWBITS=15,o.Z_DEFAULT_WINDOWBITS=15,o.Z_MIN_CHUNK=64,o.Z_MAX_CHUNK=1/0,o.Z_DEFAULT_CHUNK=16384,o.Z_MIN_MEMLEVEL=1,o.Z_MAX_MEMLEVEL=9,o.Z_DEFAULT_MEMLEVEL=8,o.Z_MIN_LEVEL=-1,o.Z_MAX_LEVEL=9,o.Z_DEFAULT_LEVEL=o.Z_DEFAULT_COMPRESSION;for(var f=Object.keys(o),h=0;h=l?a=new RangeError(u):t=r.concat(i,o),i=[],e.close(),n(a,t)}e.on("error",(function(t){e.removeListener("end",s),e.removeListener("readable",a),n(t)})),e.on("end",s),e.end(t),a()}function y(e,t){if("string"==typeof t&&(t=r.from(t)),!r.isBuffer(t))throw new TypeError("Not a string or buffer");var n=e._finishFlushFlag;return e._processChunk(t,n)}function m(e){if(!(this instanceof m))return new m(e);L.call(this,e,o.DEFLATE)}function v(e){if(!(this instanceof v))return new v(e);L.call(this,e,o.INFLATE)}function w(e){if(!(this instanceof w))return new w(e);L.call(this,e,o.GZIP)}function E(e){if(!(this instanceof E))return new E(e);L.call(this,e,o.GUNZIP)}function k(e){if(!(this instanceof k))return new k(e);L.call(this,e,o.DEFLATERAW)}function S(e){if(!(this instanceof S))return new S(e);L.call(this,e,o.INFLATERAW)}function x(e){if(!(this instanceof x))return new x(e);L.call(this,e,o.UNZIP)}function T(e){return e===o.Z_NO_FLUSH||e===o.Z_PARTIAL_FLUSH||e===o.Z_SYNC_FLUSH||e===o.Z_FULL_FLUSH||e===o.Z_FINISH||e===o.Z_BLOCK}function L(e,n){var a=this;if(this._opts=e=e||{},this._chunkSize=e.chunkSize||t.Z_DEFAULT_CHUNK,i.call(this,e),e.flush&&!T(e.flush))throw new Error("Invalid flush flag: "+e.flush);if(e.finishFlush&&!T(e.finishFlush))throw new Error("Invalid flush flag: "+e.finishFlush);if(this._flushFlag=e.flush||o.Z_NO_FLUSH,this._finishFlushFlag=void 0!==e.finishFlush?e.finishFlush:o.Z_FINISH,e.chunkSize&&(e.chunkSizet.Z_MAX_CHUNK))throw new Error("Invalid chunk size: "+e.chunkSize);if(e.windowBits&&(e.windowBitst.Z_MAX_WINDOWBITS))throw new Error("Invalid windowBits: "+e.windowBits);if(e.level&&(e.levelt.Z_MAX_LEVEL))throw new Error("Invalid compression level: "+e.level);if(e.memLevel&&(e.memLevelt.Z_MAX_MEMLEVEL))throw new Error("Invalid memLevel: "+e.memLevel);if(e.strategy&&e.strategy!=t.Z_FILTERED&&e.strategy!=t.Z_HUFFMAN_ONLY&&e.strategy!=t.Z_RLE&&e.strategy!=t.Z_FIXED&&e.strategy!=t.Z_DEFAULT_STRATEGY)throw new Error("Invalid strategy: "+e.strategy);if(e.dictionary&&!r.isBuffer(e.dictionary))throw new Error("Invalid dictionary: it should be a Buffer instance");this._handle=new o.Zlib(n);var s=this;this._hadError=!1,this._handle.onerror=function(e,n){A(s),s._hadError=!0;var r=new Error(e);r.errno=n,r.code=t.codes[n],s.emit("error",r)};var l=t.Z_DEFAULT_COMPRESSION;"number"==typeof e.level&&(l=e.level);var u=t.Z_DEFAULT_STRATEGY;"number"==typeof e.strategy&&(u=e.strategy),this._handle.init(e.windowBits||t.Z_DEFAULT_WINDOWBITS,l,e.memLevel||t.Z_DEFAULT_MEMLEVEL,u,e.dictionary),this._buffer=r.allocUnsafe(this._chunkSize),this._offset=0,this._level=l,this._strategy=u,this.once("end",this.close),Object.defineProperty(this,"_closed",{get:function(){return!a._handle},configurable:!0,enumerable:!0})}function A(t,n){n&&e.nextTick(n),t._handle&&(t._handle.close(),t._handle=null)}function R(e){e.emit("close")}Object.defineProperty(t,"codes",{enumerable:!0,value:Object.freeze(d),writable:!1}),t.Deflate=m,t.Inflate=v,t.Gzip=w,t.Gunzip=E,t.DeflateRaw=k,t.InflateRaw=S,t.Unzip=x,t.createDeflate=function(e){return new m(e)},t.createInflate=function(e){return new v(e)},t.createDeflateRaw=function(e){return new k(e)},t.createInflateRaw=function(e){return new S(e)},t.createGzip=function(e){return new w(e)},t.createGunzip=function(e){return new E(e)},t.createUnzip=function(e){return new x(e)},t.deflate=function(e,t,n){return"function"==typeof t&&(n=t,t={}),b(new m(t),e,n)},t.deflateSync=function(e,t){return y(new m(t),e)},t.gzip=function(e,t,n){return"function"==typeof t&&(n=t,t={}),b(new w(t),e,n)},t.gzipSync=function(e,t){return y(new w(t),e)},t.deflateRaw=function(e,t,n){return"function"==typeof t&&(n=t,t={}),b(new k(t),e,n)},t.deflateRawSync=function(e,t){return y(new k(t),e)},t.unzip=function(e,t,n){return"function"==typeof t&&(n=t,t={}),b(new x(t),e,n)},t.unzipSync=function(e,t){return y(new x(t),e)},t.inflate=function(e,t,n){return"function"==typeof t&&(n=t,t={}),b(new v(t),e,n)},t.inflateSync=function(e,t){return y(new v(t),e)},t.gunzip=function(e,t,n){return"function"==typeof t&&(n=t,t={}),b(new E(t),e,n)},t.gunzipSync=function(e,t){return y(new E(t),e)},t.inflateRaw=function(e,t,n){return"function"==typeof t&&(n=t,t={}),b(new S(t),e,n)},t.inflateRawSync=function(e,t){return y(new S(t),e)},a.inherits(L,i),L.prototype.params=function(n,r,i){if(nt.Z_MAX_LEVEL)throw new RangeError("Invalid compression level: "+n);if(r!=t.Z_FILTERED&&r!=t.Z_HUFFMAN_ONLY&&r!=t.Z_RLE&&r!=t.Z_FIXED&&r!=t.Z_DEFAULT_STRATEGY)throw new TypeError("Invalid strategy: "+r);if(this._level!==n||this._strategy!==r){var a=this;this.flush(o.Z_SYNC_FLUSH,(function(){s(a._handle,"zlib binding closed"),a._handle.params(n,r),a._hadError||(a._level=n,a._strategy=r,i&&i())}))}else e.nextTick(i)},L.prototype.reset=function(){return s(this._handle,"zlib binding closed"),this._handle.reset()},L.prototype._flush=function(e){this._transform(r.alloc(0),"",e)},L.prototype.flush=function(t,n){var i=this,a=this._writableState;("function"==typeof t||void 0===t&&!n)&&(n=t,t=o.Z_FULL_FLUSH),a.ended?n&&e.nextTick(n):a.ending?n&&this.once("end",n):a.needDrain?n&&this.once("drain",(function(){return i.flush(t,n)})):(this._flushFlag=t,this.write(r.alloc(0),"",n))},L.prototype.close=function(t){A(this,t),e.nextTick(R,this)},L.prototype._transform=function(e,t,n){var i,a=this._writableState,s=(a.ending||a.ended)&&(!e||a.length===e.length);return null===e||r.isBuffer(e)?this._handle?(s?i=this._finishFlushFlag:(i=this._flushFlag,e.length>=a.length&&(this._flushFlag=this._opts.flush||o.Z_NO_FLUSH)),void this._processChunk(e,i,n)):n(new Error("zlib binding closed")):n(new Error("invalid input"))},L.prototype._processChunk=function(e,t,n){var i=e&&e.length,o=this._chunkSize-this._offset,a=0,f=this,h="function"==typeof n;if(!h){var c,d=[],p=0;this.on("error",(function(e){c=e})),s(this._handle,"zlib binding closed");do{var _=this._handle.writeSync(t,e,a,i,this._buffer,this._offset,o)}while(!this._hadError&&y(_[0],_[1]));if(this._hadError)throw c;if(p>=l)throw A(this),new RangeError(u);var g=r.concat(d,p);return A(this),g}s(this._handle,"zlib binding closed");var b=this._handle.write(t,e,a,i,this._buffer,this._offset,o);function y(l,u){if(this&&(this.buffer=null,this.callback=null),!f._hadError){var c=o-u;if(s(c>=0,"have should not go down"),c>0){var _=f._buffer.slice(f._offset,f._offset+c);f._offset+=c,h?f.push(_):(d.push(_),p+=_.length)}if((0===u||f._offset>=f._chunkSize)&&(o=f._chunkSize,f._offset=0,f._buffer=r.allocUnsafe(f._chunkSize)),0===u){if(a+=i-l,i=l,!h)return!0;var g=f._handle.write(t,e,a,i,f._buffer,f._offset,f._chunkSize);return g.callback=y,void(g.buffer=e)}if(!h)return!1;n()}}b.buffer=e,b.callback=y},a.inherits(m,L),a.inherits(v,L),a.inherits(w,L),a.inherits(E,L),a.inherits(k,L),a.inherits(S,L),a.inherits(x,L)}).call(this,n(3))},function(e,t,n){e.exports=i;var r=n(19).EventEmitter;function i(){r.call(this)}n(4)(i,r),i.Readable=n(9),i.Writable=n(220),i.Duplex=n(221),i.Transform=n(222),i.PassThrough=n(223),i.Stream=i,i.prototype.pipe=function(e,t){var n=this;function i(t){e.writable&&!1===e.write(t)&&n.pause&&n.pause()}function o(){n.readable&&n.resume&&n.resume()}n.on("data",i),e.on("drain",o),e._isStdio||t&&!1===t.end||(n.on("end",s),n.on("close",l));var a=!1;function s(){a||(a=!0,e.end())}function l(){a||(a=!0,"function"==typeof e.destroy&&e.destroy())}function u(e){if(f(),0===r.listenerCount(this,"error"))throw e}function f(){n.removeListener("data",i),e.removeListener("drain",o),n.removeListener("end",s),n.removeListener("close",l),n.removeListener("error",u),e.removeListener("error",u),n.removeListener("end",f),n.removeListener("close",f),e.removeListener("close",f)}return n.on("error",u),e.on("error",u),n.on("end",f),n.on("close",f),e.on("close",f),e.emit("pipe",n),e}},function(e,t,n){e.exports=n(20)},function(e,t,n){e.exports=n(5)},function(e,t,n){e.exports=n(9).Transform},function(e,t,n){e.exports=n(9).PassThrough},function(e,t,n){"use strict";(function(e,r){var i=n(35),o=n(226),a=n(227),s=n(230),l=n(233);for(var u in l)t[u]=l[u];t.NONE=0,t.DEFLATE=1,t.INFLATE=2,t.GZIP=3,t.GUNZIP=4,t.DEFLATERAW=5,t.INFLATERAW=6,t.UNZIP=7;function f(e){if("number"!=typeof e||et.UNZIP)throw new TypeError("Bad argument");this.dictionary=null,this.err=0,this.flush=0,this.init_done=!1,this.level=0,this.memLevel=0,this.mode=e,this.strategy=0,this.windowBits=0,this.write_in_progress=!1,this.pending_close=!1,this.gzip_id_bytes_read=0}f.prototype.close=function(){this.write_in_progress?this.pending_close=!0:(this.pending_close=!1,i(this.init_done,"close before init"),i(this.mode<=t.UNZIP),this.mode===t.DEFLATE||this.mode===t.GZIP||this.mode===t.DEFLATERAW?a.deflateEnd(this.strm):this.mode!==t.INFLATE&&this.mode!==t.GUNZIP&&this.mode!==t.INFLATERAW&&this.mode!==t.UNZIP||s.inflateEnd(this.strm),this.mode=t.NONE,this.dictionary=null)},f.prototype.write=function(e,t,n,r,i,o,a){return this._write(!0,e,t,n,r,i,o,a)},f.prototype.writeSync=function(e,t,n,r,i,o,a){return this._write(!1,e,t,n,r,i,o,a)},f.prototype._write=function(n,o,a,s,l,u,f,h){if(i.equal(arguments.length,8),i(this.init_done,"write before init"),i(this.mode!==t.NONE,"already finalized"),i.equal(!1,this.write_in_progress,"write already in progress"),i.equal(!1,this.pending_close,"close is pending"),this.write_in_progress=!0,i.equal(!1,void 0===o,"must provide flush value"),this.write_in_progress=!0,o!==t.Z_NO_FLUSH&&o!==t.Z_PARTIAL_FLUSH&&o!==t.Z_SYNC_FLUSH&&o!==t.Z_FULL_FLUSH&&o!==t.Z_FINISH&&o!==t.Z_BLOCK)throw new Error("Invalid flush value");if(null==a&&(a=e.alloc(0),l=0,s=0),this.strm.avail_in=l,this.strm.input=a,this.strm.next_in=s,this.strm.avail_out=h,this.strm.output=u,this.strm.next_out=f,this.flush=o,!n)return this._process(),this._checkError()?this._afterSync():void 0;var c=this;return r.nextTick((function(){c._process(),c._after()})),this},f.prototype._afterSync=function(){var e=this.strm.avail_out,t=this.strm.avail_in;return this.write_in_progress=!1,[t,e]},f.prototype._process=function(){var e=null;switch(this.mode){case t.DEFLATE:case t.GZIP:case t.DEFLATERAW:this.err=a.deflate(this.strm,this.flush);break;case t.UNZIP:switch(this.strm.avail_in>0&&(e=this.strm.next_in),this.gzip_id_bytes_read){case 0:if(null===e)break;if(31!==this.strm.input[e]){this.mode=t.INFLATE;break}if(this.gzip_id_bytes_read=1,e++,1===this.strm.avail_in)break;case 1:if(null===e)break;139===this.strm.input[e]?(this.gzip_id_bytes_read=2,this.mode=t.GUNZIP):this.mode=t.INFLATE;break;default:throw new Error("invalid number of gzip magic number bytes read")}case t.INFLATE:case t.GUNZIP:case t.INFLATERAW:for(this.err=s.inflate(this.strm,this.flush),this.err===t.Z_NEED_DICT&&this.dictionary&&(this.err=s.inflateSetDictionary(this.strm,this.dictionary),this.err===t.Z_OK?this.err=s.inflate(this.strm,this.flush):this.err===t.Z_DATA_ERROR&&(this.err=t.Z_NEED_DICT));this.strm.avail_in>0&&this.mode===t.GUNZIP&&this.err===t.Z_STREAM_END&&0!==this.strm.next_in[0];)this.reset(),this.err=s.inflate(this.strm,this.flush);break;default:throw new Error("Unknown mode "+this.mode)}},f.prototype._checkError=function(){switch(this.err){case t.Z_OK:case t.Z_BUF_ERROR:if(0!==this.strm.avail_out&&this.flush===t.Z_FINISH)return this._error("unexpected end of file"),!1;break;case t.Z_STREAM_END:break;case t.Z_NEED_DICT:return null==this.dictionary?this._error("Missing dictionary"):this._error("Bad dictionary"),!1;default:return this._error("Zlib error"),!1}return!0},f.prototype._after=function(){if(this._checkError()){var e=this.strm.avail_out,t=this.strm.avail_in;this.write_in_progress=!1,this.callback(t,e),this.pending_close&&this.close()}},f.prototype._error=function(e){this.strm.msg&&(e=this.strm.msg),this.onerror(e,this.err),this.write_in_progress=!1,this.pending_close&&this.close()},f.prototype.init=function(e,n,r,o,a){i(4===arguments.length||5===arguments.length,"init(windowBits, level, memLevel, strategy, [dictionary])"),i(e>=8&&e<=15,"invalid windowBits"),i(n>=-1&&n<=9,"invalid compression level"),i(r>=1&&r<=9,"invalid memlevel"),i(o===t.Z_FILTERED||o===t.Z_HUFFMAN_ONLY||o===t.Z_RLE||o===t.Z_FIXED||o===t.Z_DEFAULT_STRATEGY,"invalid strategy"),this._init(n,e,r,o,a),this._setDictionary()},f.prototype.params=function(){throw new Error("deflateParams Not supported")},f.prototype.reset=function(){this._reset(),this._setDictionary()},f.prototype._init=function(e,n,r,i,l){switch(this.level=e,this.windowBits=n,this.memLevel=r,this.strategy=i,this.flush=t.Z_NO_FLUSH,this.err=t.Z_OK,this.mode!==t.GZIP&&this.mode!==t.GUNZIP||(this.windowBits+=16),this.mode===t.UNZIP&&(this.windowBits+=32),this.mode!==t.DEFLATERAW&&this.mode!==t.INFLATERAW||(this.windowBits=-1*this.windowBits),this.strm=new o,this.mode){case t.DEFLATE:case t.GZIP:case t.DEFLATERAW:this.err=a.deflateInit2(this.strm,this.level,t.Z_DEFLATED,this.windowBits,this.memLevel,this.strategy);break;case t.INFLATE:case t.GUNZIP:case t.INFLATERAW:case t.UNZIP:this.err=s.inflateInit2(this.strm,this.windowBits);break;default:throw new Error("Unknown mode "+this.mode)}this.err!==t.Z_OK&&this._error("Init error"),this.dictionary=l,this.write_in_progress=!1,this.init_done=!0},f.prototype._setDictionary=function(){if(null!=this.dictionary){switch(this.err=t.Z_OK,this.mode){case t.DEFLATE:case t.DEFLATERAW:this.err=a.deflateSetDictionary(this.strm,this.dictionary)}this.err!==t.Z_OK&&this._error("Failed to set dictionary")}},f.prototype._reset=function(){switch(this.err=t.Z_OK,this.mode){case t.DEFLATE:case t.DEFLATERAW:case t.GZIP:this.err=a.deflateReset(this.strm);break;case t.INFLATE:case t.INFLATERAW:case t.GUNZIP:this.err=s.inflateReset(this.strm)}this.err!==t.Z_OK&&this._error("Failed to reset stream")},t.Zlib=f}).call(this,n(2).Buffer,n(3))},function(e,t){e.exports=function(e){return e&&"object"==typeof e&&"function"==typeof e.copy&&"function"==typeof e.fill&&"function"==typeof e.readUInt8}},function(e,t,n){"use strict";e.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},function(e,t,n){"use strict";var r,i=n(14),o=n(228),a=n(37),s=n(38),l=n(229);function u(e,t){return e.msg=l[t],t}function f(e){return(e<<1)-(e>4?9:0)}function h(e){for(var t=e.length;--t>=0;)e[t]=0}function c(e){var t=e.state,n=t.pending;n>e.avail_out&&(n=e.avail_out),0!==n&&(i.arraySet(e.output,t.pending_buf,t.pending_out,n,e.next_out),e.next_out+=n,t.pending_out+=n,e.total_out+=n,e.avail_out-=n,t.pending-=n,0===t.pending&&(t.pending_out=0))}function d(e,t){o._tr_flush_block(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,c(e.strm)}function p(e,t){e.pending_buf[e.pending++]=t}function _(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function g(e,t){var n,r,i=e.max_chain_length,o=e.strstart,a=e.prev_length,s=e.nice_match,l=e.strstart>e.w_size-262?e.strstart-(e.w_size-262):0,u=e.window,f=e.w_mask,h=e.prev,c=e.strstart+258,d=u[o+a-1],p=u[o+a];e.prev_length>=e.good_match&&(i>>=2),s>e.lookahead&&(s=e.lookahead);do{if(u[(n=t)+a]===p&&u[n+a-1]===d&&u[n]===u[o]&&u[++n]===u[o+1]){o+=2,n++;do{}while(u[++o]===u[++n]&&u[++o]===u[++n]&&u[++o]===u[++n]&&u[++o]===u[++n]&&u[++o]===u[++n]&&u[++o]===u[++n]&&u[++o]===u[++n]&&u[++o]===u[++n]&&oa){if(e.match_start=t,a=r,r>=s)break;d=u[o+a-1],p=u[o+a]}}}while((t=h[t&f])>l&&0!=--i);return a<=e.lookahead?a:e.lookahead}function b(e){var t,n,r,o,l,u,f,h,c,d,p=e.w_size;do{if(o=e.window_size-e.lookahead-e.strstart,e.strstart>=p+(p-262)){i.arraySet(e.window,e.window,p,p,0),e.match_start-=p,e.strstart-=p,e.block_start-=p,t=n=e.hash_size;do{r=e.head[--t],e.head[t]=r>=p?r-p:0}while(--n);t=n=p;do{r=e.prev[--t],e.prev[t]=r>=p?r-p:0}while(--n);o+=p}if(0===e.strm.avail_in)break;if(u=e.strm,f=e.window,h=e.strstart+e.lookahead,c=o,d=void 0,(d=u.avail_in)>c&&(d=c),n=0===d?0:(u.avail_in-=d,i.arraySet(f,u.input,u.next_in,d,h),1===u.state.wrap?u.adler=a(u.adler,f,d,h):2===u.state.wrap&&(u.adler=s(u.adler,f,d,h)),u.next_in+=d,u.total_in+=d,d),e.lookahead+=n,e.lookahead+e.insert>=3)for(l=e.strstart-e.insert,e.ins_h=e.window[l],e.ins_h=(e.ins_h<=3&&(e.ins_h=(e.ins_h<=3)if(r=o._tr_tally(e,e.strstart-e.match_start,e.match_length-3),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=3){e.match_length--;do{e.strstart++,e.ins_h=(e.ins_h<=3&&(e.ins_h=(e.ins_h<4096)&&(e.match_length=2)),e.prev_length>=3&&e.match_length<=e.prev_length){i=e.strstart+e.lookahead-3,r=o._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-3),e.lookahead-=e.prev_length-1,e.prev_length-=2;do{++e.strstart<=i&&(e.ins_h=(e.ins_h<15&&(s=2,r-=16),o<1||o>9||8!==n||r<8||r>15||t<0||t>9||a<0||a>4)return u(e,-2);8===r&&(r=9);var l=new w;return e.state=l,l.strm=e,l.wrap=s,l.gzhead=null,l.w_bits=r,l.w_size=1<e.pending_buf_size-5&&(n=e.pending_buf_size-5);;){if(e.lookahead<=1){if(b(e),0===e.lookahead&&0===t)return 1;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var r=e.block_start+n;if((0===e.strstart||e.strstart>=r)&&(e.lookahead=e.strstart-r,e.strstart=r,d(e,!1),0===e.strm.avail_out))return 1;if(e.strstart-e.block_start>=e.w_size-262&&(d(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(d(e,!0),0===e.strm.avail_out?3:4):(e.strstart>e.block_start&&(d(e,!1),e.strm.avail_out),1)})),new v(4,4,8,4,y),new v(4,5,16,8,y),new v(4,6,32,32,y),new v(4,4,16,16,m),new v(8,16,32,32,m),new v(8,16,128,128,m),new v(8,32,128,256,m),new v(32,128,258,1024,m),new v(32,258,258,4096,m)],t.deflateInit=function(e,t){return S(e,t,8,15,8,0)},t.deflateInit2=S,t.deflateReset=k,t.deflateResetKeep=E,t.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?-2:(e.state.gzhead=t,0):-2},t.deflate=function(e,t){var n,i,a,l;if(!e||!e.state||t>5||t<0)return e?u(e,-2):-2;if(i=e.state,!e.output||!e.input&&0!==e.avail_in||666===i.status&&4!==t)return u(e,0===e.avail_out?-5:-2);if(i.strm=e,n=i.last_flush,i.last_flush=t,42===i.status)if(2===i.wrap)e.adler=0,p(i,31),p(i,139),p(i,8),i.gzhead?(p(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),p(i,255&i.gzhead.time),p(i,i.gzhead.time>>8&255),p(i,i.gzhead.time>>16&255),p(i,i.gzhead.time>>24&255),p(i,9===i.level?2:i.strategy>=2||i.level<2?4:0),p(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(p(i,255&i.gzhead.extra.length),p(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(e.adler=s(e.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=69):(p(i,0),p(i,0),p(i,0),p(i,0),p(i,0),p(i,9===i.level?2:i.strategy>=2||i.level<2?4:0),p(i,3),i.status=113);else{var g=8+(i.w_bits-8<<4)<<8;g|=(i.strategy>=2||i.level<2?0:i.level<6?1:6===i.level?2:3)<<6,0!==i.strstart&&(g|=32),g+=31-g%31,i.status=113,_(i,g),0!==i.strstart&&(_(i,e.adler>>>16),_(i,65535&e.adler)),e.adler=1}if(69===i.status)if(i.gzhead.extra){for(a=i.pending;i.gzindex<(65535&i.gzhead.extra.length)&&(i.pending!==i.pending_buf_size||(i.gzhead.hcrc&&i.pending>a&&(e.adler=s(e.adler,i.pending_buf,i.pending-a,a)),c(e),a=i.pending,i.pending!==i.pending_buf_size));)p(i,255&i.gzhead.extra[i.gzindex]),i.gzindex++;i.gzhead.hcrc&&i.pending>a&&(e.adler=s(e.adler,i.pending_buf,i.pending-a,a)),i.gzindex===i.gzhead.extra.length&&(i.gzindex=0,i.status=73)}else i.status=73;if(73===i.status)if(i.gzhead.name){a=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>a&&(e.adler=s(e.adler,i.pending_buf,i.pending-a,a)),c(e),a=i.pending,i.pending===i.pending_buf_size)){l=1;break}l=i.gzindexa&&(e.adler=s(e.adler,i.pending_buf,i.pending-a,a)),0===l&&(i.gzindex=0,i.status=91)}else i.status=91;if(91===i.status)if(i.gzhead.comment){a=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>a&&(e.adler=s(e.adler,i.pending_buf,i.pending-a,a)),c(e),a=i.pending,i.pending===i.pending_buf_size)){l=1;break}l=i.gzindexa&&(e.adler=s(e.adler,i.pending_buf,i.pending-a,a)),0===l&&(i.status=103)}else i.status=103;if(103===i.status&&(i.gzhead.hcrc?(i.pending+2>i.pending_buf_size&&c(e),i.pending+2<=i.pending_buf_size&&(p(i,255&e.adler),p(i,e.adler>>8&255),e.adler=0,i.status=113)):i.status=113),0!==i.pending){if(c(e),0===e.avail_out)return i.last_flush=-1,0}else if(0===e.avail_in&&f(t)<=f(n)&&4!==t)return u(e,-5);if(666===i.status&&0!==e.avail_in)return u(e,-5);if(0!==e.avail_in||0!==i.lookahead||0!==t&&666!==i.status){var y=2===i.strategy?function(e,t){for(var n;;){if(0===e.lookahead&&(b(e),0===e.lookahead)){if(0===t)return 1;break}if(e.match_length=0,n=o._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,n&&(d(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(d(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(d(e,!1),0===e.strm.avail_out)?1:2}(i,t):3===i.strategy?function(e,t){for(var n,r,i,a,s=e.window;;){if(e.lookahead<=258){if(b(e),e.lookahead<=258&&0===t)return 1;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=3&&e.strstart>0&&(r=s[i=e.strstart-1])===s[++i]&&r===s[++i]&&r===s[++i]){a=e.strstart+258;do{}while(r===s[++i]&&r===s[++i]&&r===s[++i]&&r===s[++i]&&r===s[++i]&&r===s[++i]&&r===s[++i]&&r===s[++i]&&ie.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=3?(n=o._tr_tally(e,1,e.match_length-3),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(n=o._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),n&&(d(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(d(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(d(e,!1),0===e.strm.avail_out)?1:2}(i,t):r[i.level].func(i,t);if(3!==y&&4!==y||(i.status=666),1===y||3===y)return 0===e.avail_out&&(i.last_flush=-1),0;if(2===y&&(1===t?o._tr_align(i):5!==t&&(o._tr_stored_block(i,0,0,!1),3===t&&(h(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),c(e),0===e.avail_out))return i.last_flush=-1,0}return 4!==t?0:i.wrap<=0?1:(2===i.wrap?(p(i,255&e.adler),p(i,e.adler>>8&255),p(i,e.adler>>16&255),p(i,e.adler>>24&255),p(i,255&e.total_in),p(i,e.total_in>>8&255),p(i,e.total_in>>16&255),p(i,e.total_in>>24&255)):(_(i,e.adler>>>16),_(i,65535&e.adler)),c(e),i.wrap>0&&(i.wrap=-i.wrap),0!==i.pending?0:1)},t.deflateEnd=function(e){var t;return e&&e.state?42!==(t=e.state.status)&&69!==t&&73!==t&&91!==t&&103!==t&&113!==t&&666!==t?u(e,-2):(e.state=null,113===t?u(e,-3):0):-2},t.deflateSetDictionary=function(e,t){var n,r,o,s,l,u,f,c,d=t.length;if(!e||!e.state)return-2;if(2===(s=(n=e.state).wrap)||1===s&&42!==n.status||n.lookahead)return-2;for(1===s&&(e.adler=a(e.adler,t,d,0)),n.wrap=0,d>=n.w_size&&(0===s&&(h(n.head),n.strstart=0,n.block_start=0,n.insert=0),c=new i.Buf8(n.w_size),i.arraySet(c,t,d-n.w_size,n.w_size,0),t=c,d=n.w_size),l=e.avail_in,u=e.next_in,f=e.input,e.avail_in=d,e.next_in=0,e.input=t,b(n);n.lookahead>=3;){r=n.strstart,o=n.lookahead-2;do{n.ins_h=(n.ins_h<=0;)e[t]=0}var o=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],a=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],s=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],l=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],u=new Array(576);i(u);var f=new Array(60);i(f);var h=new Array(512);i(h);var c=new Array(256);i(c);var d=new Array(29);i(d);var p,_,g,b=new Array(30);function y(e,t,n,r,i){this.static_tree=e,this.extra_bits=t,this.extra_base=n,this.elems=r,this.max_length=i,this.has_stree=e&&e.length}function m(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function v(e){return e<256?h[e]:h[256+(e>>>7)]}function w(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function E(e,t,n){e.bi_valid>16-n?(e.bi_buf|=t<>16-e.bi_valid,e.bi_valid+=n-16):(e.bi_buf|=t<>>=1,n<<=1}while(--t>0);return n>>>1}function x(e,t,n){var r,i,o=new Array(16),a=0;for(r=1;r<=15;r++)o[r]=a=a+n[r-1]<<1;for(i=0;i<=t;i++){var s=e[2*i+1];0!==s&&(e[2*i]=S(o[s]++,s))}}function T(e){var t;for(t=0;t<286;t++)e.dyn_ltree[2*t]=0;for(t=0;t<30;t++)e.dyn_dtree[2*t]=0;for(t=0;t<19;t++)e.bl_tree[2*t]=0;e.dyn_ltree[512]=1,e.opt_len=e.static_len=0,e.last_lit=e.matches=0}function L(e){e.bi_valid>8?w(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function A(e,t,n,r){var i=2*t,o=2*n;return e[i]>1;n>=1;n--)R(e,o,n);i=l;do{n=e.heap[1],e.heap[1]=e.heap[e.heap_len--],R(e,o,1),r=e.heap[1],e.heap[--e.heap_max]=n,e.heap[--e.heap_max]=r,o[2*i]=o[2*n]+o[2*r],e.depth[i]=(e.depth[n]>=e.depth[r]?e.depth[n]:e.depth[r])+1,o[2*n+1]=o[2*r+1]=i,e.heap[1]=i++,R(e,o,1)}while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],function(e,t){var n,r,i,o,a,s,l=t.dyn_tree,u=t.max_code,f=t.stat_desc.static_tree,h=t.stat_desc.has_stree,c=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,_=0;for(o=0;o<=15;o++)e.bl_count[o]=0;for(l[2*e.heap[e.heap_max]+1]=0,n=e.heap_max+1;n<573;n++)(o=l[2*l[2*(r=e.heap[n])+1]+1]+1)>p&&(o=p,_++),l[2*r+1]=o,r>u||(e.bl_count[o]++,a=0,r>=d&&(a=c[r-d]),s=l[2*r],e.opt_len+=s*(o+a),h&&(e.static_len+=s*(f[2*r+1]+a)));if(0!==_){do{for(o=p-1;0===e.bl_count[o];)o--;e.bl_count[o]--,e.bl_count[o+1]+=2,e.bl_count[p]--,_-=2}while(_>0);for(o=p;0!==o;o--)for(r=e.bl_count[o];0!==r;)(i=e.heap[--n])>u||(l[2*i+1]!==o&&(e.opt_len+=(o-l[2*i+1])*l[2*i],l[2*i+1]=o),r--)}}(e,t),x(o,u,e.bl_count)}function U(e,t,n){var r,i,o=-1,a=t[1],s=0,l=7,u=4;for(0===a&&(l=138,u=3),t[2*(n+1)+1]=65535,r=0;r<=n;r++)i=a,a=t[2*(r+1)+1],++s>=7;r<30;r++)for(b[r]=i<<7,e=0;e<1<0?(2===e.strm.data_type&&(e.strm.data_type=function(e){var t,n=4093624447;for(t=0;t<=31;t++,n>>>=1)if(1&n&&0!==e.dyn_ltree[2*t])return 0;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return 1;for(t=32;t<256;t++)if(0!==e.dyn_ltree[2*t])return 1;return 0}(e)),I(e,e.l_desc),I(e,e.d_desc),a=function(e){var t;for(U(e,e.dyn_ltree,e.l_desc.max_code),U(e,e.dyn_dtree,e.d_desc.max_code),I(e,e.bl_desc),t=18;t>=3&&0===e.bl_tree[2*l[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),i=e.opt_len+3+7>>>3,(o=e.static_len+3+7>>>3)<=i&&(i=o)):i=o=n+5,n+4<=i&&-1!==t?M(e,t,n,r):4===e.strategy||o===i?(E(e,2+(r?1:0),3),O(e,u,f)):(E(e,4+(r?1:0),3),function(e,t,n,r){var i;for(E(e,t-257,5),E(e,n-1,5),E(e,r-4,4),i=0;i>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&n,e.last_lit++,0===t?e.dyn_ltree[2*n]++:(e.matches++,t--,e.dyn_ltree[2*(c[n]+256+1)]++,e.dyn_dtree[2*v(t)]++),e.last_lit===e.lit_bufsize-1},t._tr_align=function(e){E(e,2,3),k(e,256,u),function(e){16===e.bi_valid?(w(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},function(e,t,n){"use strict";e.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},function(e,t,n){"use strict";var r=n(14),i=n(37),o=n(38),a=n(231),s=n(232);function l(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function u(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new r.Buf16(320),this.work=new r.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function f(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=1,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new r.Buf32(852),t.distcode=t.distdyn=new r.Buf32(592),t.sane=1,t.back=-1,0):-2}function h(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,f(e)):-2}function c(e,t){var n,r;return e&&e.state?(r=e.state,t<0?(n=0,t=-t):(n=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?-2:(null!==r.window&&r.wbits!==t&&(r.window=null),r.wrap=n,r.wbits=t,h(e))):-2}function d(e,t){var n,r;return e?(r=new u,e.state=r,r.window=null,0!==(n=c(e,t))&&(e.state=null),n):-2}var p,_,g=!0;function b(e){if(g){var t;for(p=new r.Buf32(512),_=new r.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(s(1,e.lens,0,288,p,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;s(2,e.lens,0,32,_,0,e.work,{bits:5}),g=!1}e.lencode=p,e.lenbits=9,e.distcode=_,e.distbits=5}function y(e,t,n,i){var o,a=e.state;return null===a.window&&(a.wsize=1<=a.wsize?(r.arraySet(a.window,t,n-a.wsize,a.wsize,0),a.wnext=0,a.whave=a.wsize):((o=a.wsize-a.wnext)>i&&(o=i),r.arraySet(a.window,t,n-i,o,a.wnext),(i-=o)?(r.arraySet(a.window,t,n-i,i,0),a.wnext=i,a.whave=a.wsize):(a.wnext+=o,a.wnext===a.wsize&&(a.wnext=0),a.whave>>8&255,n.check=o(n.check,M,2,0),_=0,g=0,n.mode=2;break}if(n.flags=0,n.head&&(n.head.done=!1),!(1&n.wrap)||(((255&_)<<8)+(_>>8))%31){e.msg="incorrect header check",n.mode=30;break}if(8!=(15&_)){e.msg="unknown compression method",n.mode=30;break}if(g-=4,O=8+(15&(_>>>=4)),0===n.wbits)n.wbits=O;else if(O>n.wbits){e.msg="invalid window size",n.mode=30;break}n.dmax=1<>8&1),512&n.flags&&(M[0]=255&_,M[1]=_>>>8&255,n.check=o(n.check,M,2,0)),_=0,g=0,n.mode=3;case 3:for(;g<32;){if(0===d)break e;d--,_+=u[h++]<>>8&255,M[2]=_>>>16&255,M[3]=_>>>24&255,n.check=o(n.check,M,4,0)),_=0,g=0,n.mode=4;case 4:for(;g<16;){if(0===d)break e;d--,_+=u[h++]<>8),512&n.flags&&(M[0]=255&_,M[1]=_>>>8&255,n.check=o(n.check,M,2,0)),_=0,g=0,n.mode=5;case 5:if(1024&n.flags){for(;g<16;){if(0===d)break e;d--,_+=u[h++]<>>8&255,n.check=o(n.check,M,2,0)),_=0,g=0}else n.head&&(n.head.extra=null);n.mode=6;case 6:if(1024&n.flags&&((w=n.length)>d&&(w=d),w&&(n.head&&(O=n.head.extra_len-n.length,n.head.extra||(n.head.extra=new Array(n.head.extra_len)),r.arraySet(n.head.extra,u,h,w,O)),512&n.flags&&(n.check=o(n.check,u,w,h)),d-=w,h+=w,n.length-=w),n.length))break e;n.length=0,n.mode=7;case 7:if(2048&n.flags){if(0===d)break e;w=0;do{O=u[h+w++],n.head&&O&&n.length<65536&&(n.head.name+=String.fromCharCode(O))}while(O&&w>9&1,n.head.done=!0),e.adler=n.check=0,n.mode=12;break;case 10:for(;g<32;){if(0===d)break e;d--,_+=u[h++]<>>=7&g,g-=7&g,n.mode=27;break}for(;g<3;){if(0===d)break e;d--,_+=u[h++]<>>=1)){case 0:n.mode=14;break;case 1:if(b(n),n.mode=20,6===t){_>>>=2,g-=2;break e}break;case 2:n.mode=17;break;case 3:e.msg="invalid block type",n.mode=30}_>>>=2,g-=2;break;case 14:for(_>>>=7&g,g-=7&g;g<32;){if(0===d)break e;d--,_+=u[h++]<>>16^65535)){e.msg="invalid stored block lengths",n.mode=30;break}if(n.length=65535&_,_=0,g=0,n.mode=15,6===t)break e;case 15:n.mode=16;case 16:if(w=n.length){if(w>d&&(w=d),w>p&&(w=p),0===w)break e;r.arraySet(f,u,h,w,c),d-=w,h+=w,p-=w,c+=w,n.length-=w;break}n.mode=12;break;case 17:for(;g<14;){if(0===d)break e;d--,_+=u[h++]<>>=5,g-=5,n.ndist=1+(31&_),_>>>=5,g-=5,n.ncode=4+(15&_),_>>>=4,g-=4,n.nlen>286||n.ndist>30){e.msg="too many length or distance symbols",n.mode=30;break}n.have=0,n.mode=18;case 18:for(;n.have>>=3,g-=3}for(;n.have<19;)n.lens[N[n.have++]]=0;if(n.lencode=n.lendyn,n.lenbits=7,U={bits:n.lenbits},I=s(0,n.lens,0,19,n.lencode,0,n.work,U),n.lenbits=U.bits,I){e.msg="invalid code lengths set",n.mode=30;break}n.have=0,n.mode=19;case 19:for(;n.have>>16&255,T=65535&D,!((S=D>>>24)<=g);){if(0===d)break e;d--,_+=u[h++]<>>=S,g-=S,n.lens[n.have++]=T;else{if(16===T){for(z=S+2;g>>=S,g-=S,0===n.have){e.msg="invalid bit length repeat",n.mode=30;break}O=n.lens[n.have-1],w=3+(3&_),_>>>=2,g-=2}else if(17===T){for(z=S+3;g>>=S)),_>>>=3,g-=3}else{for(z=S+7;g>>=S)),_>>>=7,g-=7}if(n.have+w>n.nlen+n.ndist){e.msg="invalid bit length repeat",n.mode=30;break}for(;w--;)n.lens[n.have++]=O}}if(30===n.mode)break;if(0===n.lens[256]){e.msg="invalid code -- missing end-of-block",n.mode=30;break}if(n.lenbits=9,U={bits:n.lenbits},I=s(1,n.lens,0,n.nlen,n.lencode,0,n.work,U),n.lenbits=U.bits,I){e.msg="invalid literal/lengths set",n.mode=30;break}if(n.distbits=6,n.distcode=n.distdyn,U={bits:n.distbits},I=s(2,n.lens,n.nlen,n.ndist,n.distcode,0,n.work,U),n.distbits=U.bits,I){e.msg="invalid distances set",n.mode=30;break}if(n.mode=20,6===t)break e;case 20:n.mode=21;case 21:if(d>=6&&p>=258){e.next_out=c,e.avail_out=p,e.next_in=h,e.avail_in=d,n.hold=_,n.bits=g,a(e,v),c=e.next_out,f=e.output,p=e.avail_out,h=e.next_in,u=e.input,d=e.avail_in,_=n.hold,g=n.bits,12===n.mode&&(n.back=-1);break}for(n.back=0;x=(D=n.lencode[_&(1<>>16&255,T=65535&D,!((S=D>>>24)<=g);){if(0===d)break e;d--,_+=u[h++]<>L)])>>>16&255,T=65535&D,!(L+(S=D>>>24)<=g);){if(0===d)break e;d--,_+=u[h++]<>>=L,g-=L,n.back+=L}if(_>>>=S,g-=S,n.back+=S,n.length=T,0===x){n.mode=26;break}if(32&x){n.back=-1,n.mode=12;break}if(64&x){e.msg="invalid literal/length code",n.mode=30;break}n.extra=15&x,n.mode=22;case 22:if(n.extra){for(z=n.extra;g>>=n.extra,g-=n.extra,n.back+=n.extra}n.was=n.length,n.mode=23;case 23:for(;x=(D=n.distcode[_&(1<>>16&255,T=65535&D,!((S=D>>>24)<=g);){if(0===d)break e;d--,_+=u[h++]<>L)])>>>16&255,T=65535&D,!(L+(S=D>>>24)<=g);){if(0===d)break e;d--,_+=u[h++]<>>=L,g-=L,n.back+=L}if(_>>>=S,g-=S,n.back+=S,64&x){e.msg="invalid distance code",n.mode=30;break}n.offset=T,n.extra=15&x,n.mode=24;case 24:if(n.extra){for(z=n.extra;g>>=n.extra,g-=n.extra,n.back+=n.extra}if(n.offset>n.dmax){e.msg="invalid distance too far back",n.mode=30;break}n.mode=25;case 25:if(0===p)break e;if(w=v-p,n.offset>w){if((w=n.offset-w)>n.whave&&n.sane){e.msg="invalid distance too far back",n.mode=30;break}w>n.wnext?(w-=n.wnext,E=n.wsize-w):E=n.wnext-w,w>n.length&&(w=n.length),k=n.window}else k=f,E=c-n.offset,w=n.length;w>p&&(w=p),p-=w,n.length-=w;do{f[c++]=k[E++]}while(--w);0===n.length&&(n.mode=21);break;case 26:if(0===p)break e;f[c++]=n.length,p--,n.mode=21;break;case 27:if(n.wrap){for(;g<32;){if(0===d)break e;d--,_|=u[h++]<>>=v=m>>>24,p-=v,0===(v=m>>>16&255))T[o++]=65535&m;else{if(!(16&v)){if(0==(64&v)){m=_[(65535&m)+(d&(1<>>=v,p-=v),p<15&&(d+=x[r++]<>>=v=m>>>24,p-=v,!(16&(v=m>>>16&255))){if(0==(64&v)){m=g[(65535&m)+(d&(1<l){e.msg="invalid distance too far back",n.mode=30;break e}if(d>>>=v,p-=v,E>(v=o-a)){if((v=E-v)>f&&n.sane){e.msg="invalid distance too far back",n.mode=30;break e}if(k=0,S=c,0===h){if(k+=u-v,v2;)T[o++]=S[k++],T[o++]=S[k++],T[o++]=S[k++],w-=3;w&&(T[o++]=S[k++],w>1&&(T[o++]=S[k++]))}else{k=o-E;do{T[o++]=T[k++],T[o++]=T[k++],T[o++]=T[k++],w-=3}while(w>2);w&&(T[o++]=T[k++],w>1&&(T[o++]=T[k++]))}break}}break}}while(r>3,d&=(1<<(p-=w<<3))-1,e.next_in=r,e.next_out=o,e.avail_in=r=1&&0===M[T];T--);if(L>T&&(L=T),0===T)return u[f++]=20971520,u[f++]=20971520,c.bits=1,0;for(x=1;x0&&(0===e||1!==T))return-1;for(N[1]=0,k=1;k<15;k++)N[k+1]=N[k]+M[k];for(S=0;S852||2===e&&I>592)return 1;for(;;){m=k-R,h[S]y?(v=B[P+h[S]],w=z[D+h[S]]):(v=96,w=0),d=1<>R)+(p-=d)]=m<<24|v<<16|w|0}while(0!==p);for(d=1<>=1;if(0!==d?(U&=d-1,U+=d):U=0,S++,0==--M[k]){if(k===T)break;k=t[n+h[S]]}if(k>L&&(U&g)!==_){for(0===R&&(R=L),b+=x,O=1<<(A=k-R);A+R852||2===e&&I>592)return 1;u[_=U&g]=L<<24|A<<16|b-f|0}}return 0!==U&&(u[b+U]=k-R<<24|64<<16|0),c.bits=L,0}},function(e,t,n){"use strict";e.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}}]); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index eda7a6bce..000000000 --- a/package-lock.json +++ /dev/null @@ -1,38317 +0,0 @@ -{ - "name": "moonrider", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "version": "1.0.0", - "dependencies": { - "@babel/cli": "^7.17.0", - "@babel/core": "^7.17.2", - "@babel/plugin-proposal-class-properties": "^7.16.7", - "@babel/plugin-proposal-decorators": "^7.17.2", - "@babel/plugin-proposal-do-expressions": "^7.16.7", - "@babel/plugin-proposal-export-default-from": "^7.16.7", - "@babel/plugin-proposal-export-namespace-from": "^7.16.7", - "@babel/plugin-proposal-function-bind": "^7.16.7", - "@babel/plugin-proposal-function-sent": "^7.16.7", - "@babel/plugin-proposal-json-strings": "^7.16.7", - "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", - "@babel/plugin-proposal-numeric-separator": "^7.16.7", - "@babel/plugin-proposal-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-pipeline-operator": "^7.16.7", - "@babel/plugin-proposal-throw-expressions": "^7.16.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/preset-env": "^7.16.11", - "aframe-aabb-collider-component": "^3.1.0", - "aframe-atlas-uvs-component": "^2.1.0", - "aframe-audioanalyser-component": "^6.0.0", - "aframe-event-decorators": "^1.0.2", - "aframe-event-set-component": "^4.2.1", - "aframe-geometry-merger-component": "^2.0.0-beta1", - "aframe-haptics-component": "^1.6.3", - "aframe-layout-component": "^5.3.0", - "aframe-log-component": "^1.0.7", - "aframe-orbit-controls": "^1.2.0", - "aframe-proxy-event-component": "^2.1.0", - "aframe-render-order-component": "^1.1.0", - "aframe-slice9-component": "^1.0.0", - "aframe-state-component": "6.7.0", - "aframe-super-hot-html-loader": "^1.2.0", - "aframe-super-hot-loader": "^1.5.0", - "aframe-thumb-controls-component": "^2.0.2", - "algoliasearch": "^3.29.0", - "ansi-html": "0.0.7", - "autoprefixer": "^7.2.3", - "babel-loader": "^8.0.5", - "babel-preset-minify": "^0.5.0", - "css-loader": "^0.28.7", - "debug": "^4.1.0", - "firebase": "^7.19.0", - "html-require-loader": "^1.0.1", - "ip": "1.1.5", - "json-loader": "^0.5.7", - "lodash.debounce": "^4.0.8", - "profane-words": "^1.3.1", - "promise-polyfill": "^8.1.0", - "style-loader": "^0.23.1", - "super-nunjucks-loader": "^2.0.0", - "uglify-es": "git://github.com/mishoo/UglifyJS2.git#harmony", - "uglify-js": "git://github.com/mishoo/UglifyJS2#harmony", - "uglifyjs-webpack-plugin": "0.4.6", - "unzip-js": "^1.0.0", - "url-loader": "^1.1.2", - "webpack": "^4.46.0", - "webpack-glsl-loader": "^1.0.1", - "webpack-sources": "1.0.1", - "zip-loader": "github:ngokevin/ziploader#xhrdist" - }, - "devDependencies": { - "cross-env": "4.0.0", - "ghpages": "0.0.10", - "semistandard": "10.0.0", - "shx": "^0.2.2", - "snazzy": "7.0.0", - "superagent": "^3.8.2", - "webpack-dev-server": "^3.2.0" - }, - "engines": { - "node": "<=12.18.3", - "npm": "<=6.14.6" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/cli": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.19.3.tgz", - "integrity": "sha512-643/TybmaCAe101m2tSVHi9UKpETXP9c/Ff4mD2tAwkdP6esKIfaauZFc67vGEM6r9fekbEGid+sZhbEnSe3dg==", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.8", - "commander": "^4.0.1", - "convert-source-map": "^1.1.0", - "fs-readdir-recursive": "^1.1.0", - "glob": "^7.2.0", - "make-dir": "^2.1.0", - "slash": "^2.0.0" - }, - "bin": { - "babel": "bin/babel.js", - "babel-external-helpers": "bin/babel-external-helpers.js" - }, - "engines": { - "node": ">=6.9.0" - }, - "optionalDependencies": { - "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3", - "chokidar": "^3.4.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/cli/node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "optional": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@babel/cli/node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@babel/cli/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "optional": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@babel/cli/node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "optional": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/@babel/cli/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "optional": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@babel/cli/node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/@babel/cli/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==", - "optional": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@babel/cli/node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "optional": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@babel/cli/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==", - "optional": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/@babel/cli/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "optional": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/@babel/cli/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==", - "optional": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dependencies": { - "@babel/highlight": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.5.tgz", - "integrity": "sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz", - "integrity": "sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==", - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.5", - "@babel/parser": "^7.20.5", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz", - "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==", - "dependencies": { - "@babel/types": "^7.20.5", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", - "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", - "dependencies": { - "@babel/compat-data": "^7.20.0", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.5.tgz", - "integrity": "sha512-3RCdA/EmEaikrhayahwToF0fpweU/8o2p8vhc1c/1kftHOdTKuC65kik/TLc+qfbS8JKw4qqJbne4ovICDhmww==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.19.1", - "@babel/helper-split-export-declaration": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz", - "integrity": "sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.2.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/regexpu-core": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", - "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==", - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsgen": "^0.7.1", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/regjsgen": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", - "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", - "dependencies": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", - "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", - "dependencies": { - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", - "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.19.1", - "@babel/types": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "dependencies": { - "@babel/types": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", - "dependencies": { - "@babel/types": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", - "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", - "dependencies": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz", - "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==", - "dependencies": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz", - "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", - "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-proposal-optional-chaining": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz", - "integrity": "sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", - "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.5.tgz", - "integrity": "sha512-Lac7PpRJXcC3s9cKsBfl+uc+DYXU5FD06BrTFunQO6QIQT+DwyzDPURAowI3bcvD1dZF/ank1Z5rstUJn3Hn4Q==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.19.1", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/plugin-syntax-decorators": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-do-expressions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-do-expressions/-/plugin-proposal-do-expressions-7.18.6.tgz", - "integrity": "sha512-ddToGCONJhCuL+l4FhtGnKl5ZYCj9fDVFiqiCdQDpeIbVn/NvMeSib+7T1/rk08jRafae4qNiP8OnJyuqlsuYA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-do-expressions": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-default-from": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.18.10.tgz", - "integrity": "sha512-5H2N3R2aQFxkV4PIBUR/i7PUSwgTZjouJKzI8eKswfIjT0PhvzkPn0t0wIS5zn6maQuvtT0t1oHtMUz61LOuow==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-default-from": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-function-bind": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-function-bind/-/plugin-proposal-function-bind-7.18.9.tgz", - "integrity": "sha512-9RfxqKkRBCCT0xoBl9AqieCMscJmSAL9HYixGMWH549jUpT9csWWK/HEYZEx9t9iW/PRSXgX95x9bDlgtAJGFA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-function-bind": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-function-sent": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-function-sent/-/plugin-proposal-function-sent-7.18.6.tgz", - "integrity": "sha512-UdaOKPOLPt0O+Xu26tnw6oAZMLXhk+yMrXOzn6kAzTHBnWHJsoN1hlrgxFAQ+FRLS0ql1oYIQ2phvoFzmN3GMw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-wrap-function": "^7.18.6", - "@babel/plugin-syntax-function-sent": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", - "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz", - "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==", - "dependencies": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", - "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-pipeline-operator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-pipeline-operator/-/plugin-proposal-pipeline-operator-7.18.9.tgz", - "integrity": "sha512-Pc33e6m8f4MJhRXVCUwiKZNtEm+W2CUPHIL0lyJNtkp+w6d75CLw3gsBKQ81VAMUgT9jVPIEU8gwJ5nJgmJ1Ag==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-pipeline-operator": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz", - "integrity": "sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-throw-expressions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-throw-expressions/-/plugin-proposal-throw-expressions-7.18.6.tgz", - "integrity": "sha512-WHOrJyhGoGrdtW480L79cF7Iq/gZDZ/z6OqK7mVyFR5I37dTpog/wNgb6hmaM3HYZtULEJl++7VaMWkNZsOcHg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-throw-expressions": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.19.0.tgz", - "integrity": "sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-do-expressions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-do-expressions/-/plugin-syntax-do-expressions-7.18.6.tgz", - "integrity": "sha512-kTogvOsjBTVOSZtkkziiXB5hwGXqwhq2gBXDaiWVruRLDT7C2GqfbsMnicHJ7ePq2GE8UJeWS34YbNP6yDhwUA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-default-from": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.18.6.tgz", - "integrity": "sha512-Kr//z3ujSVNx6E9z9ih5xXXMqK07VVTuqPmqGe6Mss/zW5XPeLZeSDZoP9ab/hT4wPKqAgjl2PnhPrcpk8Seew==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-function-bind": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-function-bind/-/plugin-syntax-function-bind-7.18.6.tgz", - "integrity": "sha512-wZN0Aq/AScknI9mKGcR3TpHdASMufFGaeJgc1rhPmLtZ/PniwjePSh8cfh8tXMB3U4kh/3cRKrLjDtedejg8jQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-function-sent": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-function-sent/-/plugin-syntax-function-sent-7.18.6.tgz", - "integrity": "sha512-f3OJHIlFIkg+cP1Hfo2SInLhsg0pz2Ikmgo7jMdIIKC+3jVXQlHB0bgSapOWxeWI0SU28qIWmfn5ZKu1yPJHkg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", - "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-pipeline-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-pipeline-operator/-/plugin-syntax-pipeline-operator-7.18.6.tgz", - "integrity": "sha512-pFtIdQomJtkTHWcNsGXhjJ5YUkL+AxJnP4G+Ol85UO6uT2fpHTPYLLE5bBeRA9cxf25qa/VKsJ3Fi67Gyqe3rA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-throw-expressions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-throw-expressions/-/plugin-syntax-throw-expressions-7.18.6.tgz", - "integrity": "sha512-rp1CqEZXGv1z1YZ3qYffBH3rhnOxrTwQG8fh2yqulTurwv9zu3Gthfd+niZBLSOi1rY6146TgF+JmVeDXaX4TQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", - "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", - "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", - "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.5.tgz", - "integrity": "sha512-WvpEIW9Cbj9ApF3yJCjIEEf1EiNJLtXagOrL5LNWEZOo3jv8pmPoYTSNJQvqej8OavVlgOoOPw6/htGZro6IkA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz", - "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.19.1", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", - "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz", - "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz", - "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==", - "dependencies": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", - "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", - "dependencies": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-simple-access": "^7.19.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz", - "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==", - "dependencies": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-validator-identifier": "^7.19.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", - "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.5.tgz", - "integrity": "sha512-h7plkOmcndIUWXZFLgpbrh2+fXAi47zcUX7IrOQuZdLD0I0KvjJ6cvo3BEcAOsDOcZhVKGJqv07mkSqK0y2isQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", - "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "regenerator-transform": "^0.15.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", - "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", - "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", - "dependencies": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.20.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.20.2", - "@babel/plugin-transform-classes": "^7.20.2", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.20.2", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.19.6", - "@babel/plugin-transform-modules-commonjs": "^7.19.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.6", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.20.1", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.19.0", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.6.tgz", - "integrity": "sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA==", - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime/node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "node_modules/@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz", - "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==", - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.5", - "@babel/types": "^7.20.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz", - "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", - "dependencies": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@firebase/analytics": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.4.2.tgz", - "integrity": "sha512-WCoeUAO3lP6ikHJ3/XYptV90fpTidzTS9VpAfiVQK8gl9w1zvvKSavY9U3+EVG3frOPCFdE5DBO4MYrUw4gaqw==", - "dependencies": { - "@firebase/analytics-types": "0.3.1", - "@firebase/component": "0.1.18", - "@firebase/installations": "0.4.16", - "@firebase/logger": "0.2.6", - "@firebase/util": "0.3.1", - "tslib": "^1.11.1" - }, - "peerDependencies": { - "@firebase/app": "0.x", - "@firebase/app-types": "0.x" - } - }, - "node_modules/@firebase/analytics-types": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.3.1.tgz", - "integrity": "sha512-63vVJ5NIBh/JF8l9LuPrQYSzFimk7zYHySQB4Dk9rVdJ8kV/vGQoVTvRu1UW05sEc2Ug5PqtEChtTHU+9hvPcA==" - }, - "node_modules/@firebase/analytics/node_modules/tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" - }, - "node_modules/@firebase/app": { - "version": "0.6.10", - "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.6.10.tgz", - "integrity": "sha512-USg/AbgqBERhY0LayrKmmp7pka08WPa7OlFI46kaNW1pA2mUNf/ifTaxhCr2hGg/eWI0zPhpbEvtGQhSJ/QqWg==", - "dependencies": { - "@firebase/app-types": "0.6.1", - "@firebase/component": "0.1.18", - "@firebase/logger": "0.2.6", - "@firebase/util": "0.3.1", - "dom-storage": "2.1.0", - "tslib": "^1.11.1", - "xmlhttprequest": "1.8.0" - } - }, - "node_modules/@firebase/app-types": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.6.1.tgz", - "integrity": "sha512-L/ZnJRAq7F++utfuoTKX4CLBG5YR7tFO3PLzG1/oXXKEezJ0kRL3CMRoueBEmTCzVb/6SIs2Qlaw++uDgi5Xyg==" - }, - "node_modules/@firebase/app/node_modules/tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" - }, - "node_modules/@firebase/auth": { - "version": "0.14.9", - "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.14.9.tgz", - "integrity": "sha512-PxYa2r5qUEdheXTvqROFrMstK8W4uPiP7NVfp+2Bec+AjY5PxZapCx/YFDLkU0D7YBI82H74PtZrzdJZw7TJ4w==", - "dependencies": { - "@firebase/auth-types": "0.10.1" - }, - "peerDependencies": { - "@firebase/app": "0.x" - } - }, - "node_modules/@firebase/auth-interop-types": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.1.5.tgz", - "integrity": "sha512-88h74TMQ6wXChPA6h9Q3E1Jg6TkTHep2+k63OWg3s0ozyGVMeY+TTOti7PFPzq5RhszQPQOoCi59es4MaRvgCw==", - "peerDependencies": { - "@firebase/app-types": "0.x", - "@firebase/util": "0.x" - } - }, - "node_modules/@firebase/auth-types": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.10.1.tgz", - "integrity": "sha512-/+gBHb1O9x/YlG7inXfxff/6X3BPZt4zgBv4kql6HEmdzNQCodIRlEYnI+/da+lN+dha7PjaFH7C7ewMmfV7rw==", - "peerDependencies": { - "@firebase/app-types": "0.x", - "@firebase/util": "0.x" - } - }, - "node_modules/@firebase/component": { - "version": "0.1.18", - "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.1.18.tgz", - "integrity": "sha512-c8gd1k/e0sbBTR0xkLIYUN8nVkA0zWxcXGIvdfYtGEsNw6n7kh5HkcxKXOPB8S7bcPpqZkGgBIfvd94IyG2gaQ==", - "dependencies": { - "@firebase/util": "0.3.1", - "tslib": "^1.11.1" - } - }, - "node_modules/@firebase/component/node_modules/tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" - }, - "node_modules/@firebase/database": { - "version": "0.6.11", - "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.6.11.tgz", - "integrity": "sha512-QOHhB7+CdjVhEXG9CyX0roA9ARJcEuwbozz0Bix+ULuZqjQ58KUFHMH1apW6EEiUP22d/mYD7dNXsUGshjL9PA==", - "dependencies": { - "@firebase/auth-interop-types": "0.1.5", - "@firebase/component": "0.1.18", - "@firebase/database-types": "0.5.2", - "@firebase/logger": "0.2.6", - "@firebase/util": "0.3.1", - "faye-websocket": "0.11.3", - "tslib": "^1.11.1" - } - }, - "node_modules/@firebase/database-types": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.5.2.tgz", - "integrity": "sha512-ap2WQOS3LKmGuVFKUghFft7RxXTyZTDr0Xd8y2aqmWsbJVjgozi0huL/EUMgTjGFrATAjcf2A7aNs8AKKZ2a8g==", - "dependencies": { - "@firebase/app-types": "0.6.1" - } - }, - "node_modules/@firebase/database/node_modules/faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@firebase/database/node_modules/tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" - }, - "node_modules/@firebase/firestore": { - "version": "1.16.5", - "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-1.16.5.tgz", - "integrity": "sha512-GjCL4Ngy46qSdXAg9obXBuIKG2m/7a21dQktqRPaPH9xpHnymq8LxUK7sdUfyY8FBIQp6Si6O61e9fko4FjSMw==", - "dependencies": { - "@firebase/component": "0.1.18", - "@firebase/firestore-types": "1.12.0", - "@firebase/logger": "0.2.6", - "@firebase/util": "0.3.1", - "@firebase/webchannel-wrapper": "0.3.0", - "@grpc/grpc-js": "^1.0.0", - "@grpc/proto-loader": "^0.5.0", - "node-fetch": "2.6.0", - "tslib": "^1.11.1" - }, - "engines": { - "node": "^8.13.0 || >=10.10.0" - }, - "peerDependencies": { - "@firebase/app": "0.x", - "@firebase/app-types": "0.x" - } - }, - "node_modules/@firebase/firestore-types": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-1.12.0.tgz", - "integrity": "sha512-OqNxVb63wPZdUc7YnpacAW1WNIMSKERSewCRi+unCQ0YI0KNfrDSypyGCyel+S3GdOtKMk9KnvDknaGbnaFX4g==", - "peerDependencies": { - "@firebase/app-types": "0.x" - } - }, - "node_modules/@firebase/firestore/node_modules/tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" - }, - "node_modules/@firebase/functions": { - "version": "0.4.50", - "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.4.50.tgz", - "integrity": "sha512-eBsNrUm/Jfc/xsQXmxQRSkEg6pwHlMd2hice8N90/EeqgwqS/SCvC+O9cJITLlXroAghb9jWDWRvAkDU/TOhpw==", - "dependencies": { - "@firebase/component": "0.1.18", - "@firebase/functions-types": "0.3.17", - "@firebase/messaging-types": "0.5.0", - "isomorphic-fetch": "2.2.1", - "tslib": "^1.11.1" - }, - "peerDependencies": { - "@firebase/app": "0.x", - "@firebase/app-types": "0.x" - } - }, - "node_modules/@firebase/functions-types": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.3.17.tgz", - "integrity": "sha512-DGR4i3VI55KnYk4IxrIw7+VG7Q3gA65azHnZxo98Il8IvYLr2UTBlSh72dTLlDf25NW51HqvJgYJDKvSaAeyHQ==" - }, - "node_modules/@firebase/functions/node_modules/tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" - }, - "node_modules/@firebase/installations": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.4.16.tgz", - "integrity": "sha512-gqv3IrBUmPWKpH8wLJ0fZcAH1NEXwQhqjqnK3cQXRcIkEARP430cmIAaj7CcPdgdemHX9HqwJG+So/yBHIYXPA==", - "dependencies": { - "@firebase/component": "0.1.18", - "@firebase/installations-types": "0.3.4", - "@firebase/util": "0.3.1", - "idb": "3.0.2", - "tslib": "^1.11.1" - }, - "peerDependencies": { - "@firebase/app": "0.x", - "@firebase/app-types": "0.x" - } - }, - "node_modules/@firebase/installations-types": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.3.4.tgz", - "integrity": "sha512-RfePJFovmdIXb6rYwtngyxuEcWnOrzdZd9m7xAW0gRxDIjBT20n3BOhjpmgRWXo/DAxRmS7bRjWAyTHY9cqN7Q==", - "peerDependencies": { - "@firebase/app-types": "0.x" - } - }, - "node_modules/@firebase/installations/node_modules/tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" - }, - "node_modules/@firebase/logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.2.6.tgz", - "integrity": "sha512-KIxcUvW/cRGWlzK9Vd2KB864HlUnCfdTH0taHE0sXW5Xl7+W68suaeau1oKNEqmc3l45azkd4NzXTCWZRZdXrw==" - }, - "node_modules/@firebase/messaging": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.7.0.tgz", - "integrity": "sha512-PTD5pQw9QremOjiWWZYOkzcX6OKByMvlG+NQXdTnyL3kLbE01Bdp9iWhkH6ipNpHYMiwcK1RZD4TLkYVBviBsw==", - "dependencies": { - "@firebase/component": "0.1.18", - "@firebase/installations": "0.4.16", - "@firebase/messaging-types": "0.5.0", - "@firebase/util": "0.3.1", - "idb": "3.0.2", - "tslib": "^1.11.1" - }, - "peerDependencies": { - "@firebase/app": "0.x", - "@firebase/app-types": "0.x" - } - }, - "node_modules/@firebase/messaging-types": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@firebase/messaging-types/-/messaging-types-0.5.0.tgz", - "integrity": "sha512-QaaBswrU6umJYb/ZYvjR5JDSslCGOH6D9P136PhabFAHLTR4TWjsaACvbBXuvwrfCXu10DtcjMxqfhdNIB1Xfg==", - "peerDependencies": { - "@firebase/app-types": "0.x" - } - }, - "node_modules/@firebase/messaging/node_modules/tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" - }, - "node_modules/@firebase/performance": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.4.0.tgz", - "integrity": "sha512-LZG89G2wAjTRsIcuewIx152+DyRzQf8UtPCAjifkFiMcAY4GmZZKeIbIC3b4oQDwTgH5i0IKKd4EOv7dLD97gw==", - "dependencies": { - "@firebase/component": "0.1.18", - "@firebase/installations": "0.4.16", - "@firebase/logger": "0.2.6", - "@firebase/performance-types": "0.0.13", - "@firebase/util": "0.3.1", - "tslib": "^1.11.1" - }, - "peerDependencies": { - "@firebase/app": "0.x", - "@firebase/app-types": "0.x" - } - }, - "node_modules/@firebase/performance-types": { - "version": "0.0.13", - "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.0.13.tgz", - "integrity": "sha512-6fZfIGjQpwo9S5OzMpPyqgYAUZcFzZxHFqOyNtorDIgNXq33nlldTL/vtaUZA8iT9TT5cJlCrF/jthKU7X21EA==" - }, - "node_modules/@firebase/performance/node_modules/tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" - }, - "node_modules/@firebase/polyfill": { - "version": "0.3.36", - "resolved": "https://registry.npmjs.org/@firebase/polyfill/-/polyfill-0.3.36.tgz", - "integrity": "sha512-zMM9oSJgY6cT2jx3Ce9LYqb0eIpDE52meIzd/oe/y70F+v9u1LDqk5kUF5mf16zovGBWMNFmgzlsh6Wj0OsFtg==", - "dependencies": { - "core-js": "3.6.5", - "promise-polyfill": "8.1.3", - "whatwg-fetch": "2.0.4" - } - }, - "node_modules/@firebase/polyfill/node_modules/core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", - "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/@firebase/polyfill/node_modules/whatwg-fetch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", - "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" - }, - "node_modules/@firebase/remote-config": { - "version": "0.1.27", - "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.1.27.tgz", - "integrity": "sha512-BGjmQomRKNf+yGJ/3/5Kw6zNLM5jY9oTVjLmYsQXf6U+HMgz6J2H6EVGc1bZW7YSsvak8f6DomxegQtvfvwaMw==", - "dependencies": { - "@firebase/component": "0.1.18", - "@firebase/installations": "0.4.16", - "@firebase/logger": "0.2.6", - "@firebase/remote-config-types": "0.1.9", - "@firebase/util": "0.3.1", - "tslib": "^1.11.1" - }, - "peerDependencies": { - "@firebase/app": "0.x", - "@firebase/app-types": "0.x" - } - }, - "node_modules/@firebase/remote-config-types": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.1.9.tgz", - "integrity": "sha512-G96qnF3RYGbZsTRut7NBX0sxyczxt1uyCgXQuH/eAfUCngxjEGcZQnBdy6mvSdqdJh5mC31rWPO4v9/s7HwtzA==" - }, - "node_modules/@firebase/remote-config/node_modules/tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" - }, - "node_modules/@firebase/storage": { - "version": "0.3.42", - "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.3.42.tgz", - "integrity": "sha512-FqHDWZPhATQeOFBQUZPsQO7xhnGBxprYVDb9eIjCnh1yRl6WAv/OQGHOF+JU5+H+YkjsKTtr/5VjyDl3Y0UHxw==", - "dependencies": { - "@firebase/component": "0.1.18", - "@firebase/storage-types": "0.3.13", - "@firebase/util": "0.3.1", - "tslib": "^1.11.1" - }, - "peerDependencies": { - "@firebase/app": "0.x", - "@firebase/app-types": "0.x" - } - }, - "node_modules/@firebase/storage-types": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.3.13.tgz", - "integrity": "sha512-pL7b8d5kMNCCL0w9hF7pr16POyKkb3imOW7w0qYrhBnbyJTdVxMWZhb0HxCFyQWC0w3EiIFFmxoz8NTFZDEFog==", - "peerDependencies": { - "@firebase/app-types": "0.x", - "@firebase/util": "0.x" - } - }, - "node_modules/@firebase/storage/node_modules/tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" - }, - "node_modules/@firebase/util": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@firebase/util/-/util-0.3.1.tgz", - "integrity": "sha512-zjVd9rfL08dRRdZILFn1RZTHb1euCcnD9N/9P56gdBcm2bvT5XsCC4G6t5toQBpE/H/jYe5h6MZMqfLu3EQLXw==", - "dependencies": { - "tslib": "^1.11.1" - } - }, - "node_modules/@firebase/util/node_modules/tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" - }, - "node_modules/@firebase/webchannel-wrapper": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.3.0.tgz", - "integrity": "sha512-VniCGPIgSGNEgOkh5phb3iKmSGIzcwrccy3IomMFRWPCMiCk2y98UQNJEoDs1yIHtZMstVjYWKYxnunIGzC5UQ==" - }, - "node_modules/@grpc/grpc-js": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.1.5.tgz", - "integrity": "sha512-2huf5z85TdZI4nLmJQ9Zdfd+6vmIyBDs7B4L71bTaHKA9pRsGKAH24XaktMk/xneKJIqAgeIZtg1cyivVZtvrg==", - "dependencies": { - "@grpc/proto-loader": "^0.6.0-pre14", - "@types/node": "^12.12.47", - "google-auth-library": "^6.0.0", - "semver": "^6.2.0" - }, - "engines": { - "node": "^8.13.0 || >=10.10.0" - } - }, - "node_modules/@grpc/grpc-js/node_modules/@grpc/proto-loader": { - "version": "0.6.0-pre9", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.0-pre9.tgz", - "integrity": "sha512-oM+LjpEjNzW5pNJjt4/hq1HYayNeQT+eGrOPABJnYHv7TyNPDNzkQ76rDYZF86X5swJOa4EujEMzQ9iiTdPgww==", - "dependencies": { - "@types/long": "^4.0.1", - "lodash.camelcase": "^4.3.0", - "long": "^4.0.0", - "protobufjs": "^6.9.0", - "yargs": "^15.3.1" - }, - "bin": { - "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@grpc/grpc-js/node_modules/@types/node": { - "version": "12.12.54", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.54.tgz", - "integrity": "sha512-ge4xZ3vSBornVYlDnk7yZ0gK6ChHf/CHB7Gl1I0Jhah8DDnEQqBzgohYG4FX4p81TNirSETOiSyn+y1r9/IR6w==" - }, - "node_modules/@grpc/grpc-js/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@grpc/grpc-js/node_modules/ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dependencies": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@grpc/grpc-js/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@grpc/grpc-js/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/@grpc/grpc-js/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@grpc/grpc-js/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@grpc/grpc-js/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/@grpc/grpc-js/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@grpc/grpc-js/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@grpc/grpc-js/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@grpc/grpc-js/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@grpc/grpc-js/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@grpc/grpc-js/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@grpc/grpc-js/node_modules/string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@grpc/grpc-js/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@grpc/grpc-js/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@grpc/grpc-js/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@grpc/grpc-js/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@grpc/proto-loader": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.5.5.tgz", - "integrity": "sha512-WwN9jVNdHRQoOBo9FDH7qU+mgfjPc8GygPYms3M+y3fbQLfnCe/Kv/E01t7JRgnrsOHH8euvSbed3mIalXhwqQ==", - "dependencies": { - "lodash.camelcase": "^4.3.0", - "protobufjs": "^6.8.6" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@nicolo-ribaudo/chokidar-2": { - "version": "2.1.8-no-fsevents.3", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", - "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==", - "optional": true - }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" - }, - "node_modules/@sinonjs/commons": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", - "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", - "peer": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/commons/node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@sinonjs/formatio": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz", - "integrity": "sha512-ls6CAMA6/5gG+O/IdsBcblvnd8qcO/l1TYoNeAzp3wcISOxlPXQEus0mLcdwazEkWjaBdaJ3TaxmNgCLWwvWzg==", - "peer": true, - "dependencies": { - "samsam": "1.3.0" - } - }, - "node_modules/@sinonjs/samsam": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.3.tgz", - "integrity": "sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ==", - "peer": true, - "dependencies": { - "@sinonjs/commons": "^1.3.0", - "array-from": "^2.1.1", - "lodash": "^4.17.15" - } - }, - "node_modules/@sinonjs/text-encoding": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz", - "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", - "peer": true - }, - "node_modules/@tweenjs/tween.js": { - "version": "16.11.0", - "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-16.11.0.tgz", - "integrity": "sha1-bnqKPWx4oFfs1WBQh5MEBtTgWAA=" - }, - "node_modules/@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" - }, - "node_modules/@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" - }, - "node_modules/@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==" - }, - "node_modules/@types/glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", - "dependencies": { - "@types/events": "*", - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "node_modules/@types/long": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", - "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" - }, - "node_modules/@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" - }, - "node_modules/@types/node": { - "version": "12.12.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.12.tgz", - "integrity": "sha512-MGuvYJrPU0HUwqF7LqvIj50RZUX23Z+m583KBygKYUZLlZ88n6w28XRNJRJgsHukLEnLz6w6SvxZoLgbr5wLqQ==" - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dependencies": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==" - }, - "node_modules/@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "dependencies": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "node_modules/@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==" - }, - "node_modules/@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "dependencies": { - "@webassemblyjs/ast": "1.9.0" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "node_modules/a-sync-waterfall": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", - "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==" - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/accepts": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", - "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", - "dependencies": { - "mime-types": "~2.1.11", - "negotiator": "0.6.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", - "dependencies": { - "acorn": "^3.0.4" - } - }, - "node_modules/acorn-jsx/node_modules/acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "dependencies": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "node_modules/acorn-node/node_modules/acorn": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", - "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-to-esprima": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/acorn-to-esprima/-/acorn-to-esprima-2.0.8.tgz", - "integrity": "sha1-AD8MZC65ITL0F9NwjxStqCrfLrE=" - }, - "node_modules/acorn-walk": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.0.0.tgz", - "integrity": "sha512-7Bv1We7ZGuU79zZbb6rRqcpxo3OY+zrdtloZWoyD8fmGX+FeXRjE+iuGkZjSXLVovLzrsvMGMy0EkwA0E0umxg==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/aframe": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/aframe/-/aframe-0.8.2.tgz", - "integrity": "sha512-kp0c3f17moiilChTsD95q+USB7/12LuusGERSmO2X7Cgq6q6evVv9Oe7qRMZ6Baf26gS0T9Z7umc/e1alqcEVA==", - "dependencies": { - "@tweenjs/tween.js": "^16.8.0", - "browserify-css": "^0.8.2", - "debug": "github:ngokevin/debug#noTimestamp", - "deep-assign": "^2.0.0", - "document-register-element": "github:dmarcos/document-register-element#8ccc532b7", - "envify": "^3.4.1", - "load-bmfont": "^1.2.3", - "object-assign": "^4.0.1", - "present": "0.0.6", - "promise-polyfill": "^3.1.0", - "style-attr": "^1.0.2", - "three": "github:supermedium/three.js#r90fixMTLLoader", - "three-bmfont-text": "^2.1.0", - "webvr-polyfill": "^0.10.5" - }, - "engines": { - "node": ">= 4.6.0", - "npm": "^2.15.9" - } - }, - "node_modules/aframe-aabb-collider-component": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/aframe-aabb-collider-component/-/aframe-aabb-collider-component-3.2.0.tgz", - "integrity": "sha512-54ZRnsyhSfXiQmvWYC3RliVOjfUP3MtL7AL1OeaMx6WSUs2yTfUErrlKEBbEy+CJSG01p0Ev03Unl7wQuchEBw==" - }, - "node_modules/aframe-atlas-uvs-component": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/aframe-atlas-uvs-component/-/aframe-atlas-uvs-component-2.1.0.tgz", - "integrity": "sha512-+zUnGMcj20Lkbth1/nWJjJoKsoc3jOTj8tuD3vy5BjWDha3cpQhBslxekvFL8LcAl88yv0WwD1kfkmLKQKcdvw==" - }, - "node_modules/aframe-audioanalyser-component": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/aframe-audioanalyser-component/-/aframe-audioanalyser-component-6.1.0.tgz", - "integrity": "sha512-p/iLMZcKbditZIOH9Op40yk6tr26nGkk4LSc2dimRCVPq6mxtwva2qOPsEUG8Z9QeNNsBSNL1s/v/BLpmF5FzQ==" - }, - "node_modules/aframe-event-decorators": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/aframe-event-decorators/-/aframe-event-decorators-1.0.2.tgz", - "integrity": "sha512-Y2ngTXj5Zi48mvGyApPtDyXDX78TDhuKriOaMKuDOeInYbw5Z7Irzkamo/GdHKhyCRId/NcaaqgtlOBWlYK+5A==" - }, - "node_modules/aframe-event-set-component": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/aframe-event-set-component/-/aframe-event-set-component-4.2.1.tgz", - "integrity": "sha512-+mDd2vgFZASqFAVv/ik2sO61rWJPG8psszuZ2Wn4W5/W/LB2W2TfLcOSGta2iJlNvcYsiOUqU/B7ZE9W06Nr1A==" - }, - "node_modules/aframe-geometry-merger-component": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aframe-geometry-merger-component/-/aframe-geometry-merger-component-2.0.0.tgz", - "integrity": "sha512-+dbpPj6ON5bmChXbXPO8KzpqGURedW2FLMfbESTfKKRKUZB4i4mkS5s1xg4GsKLnJArNBZ+dikszcAZQ04xbTQ==" - }, - "node_modules/aframe-haptics-component": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/aframe-haptics-component/-/aframe-haptics-component-1.6.3.tgz", - "integrity": "sha512-KQzkvwGzxFfOr0d4nSKoQ69Cdi5oJ2s9pEOzBkEYjS7TFlfZUdWzKpAmQaJumU1CmrhYF6kzXhKkKdHvTvMJQQ==" - }, - "node_modules/aframe-layout-component": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aframe-layout-component/-/aframe-layout-component-5.3.0.tgz", - "integrity": "sha512-R6M23bLbHgTdYEO5nHHbHukJCq+Oqr/kNQHY3jZqyfJA/rUwvENwOlEbq2ue+/mORkCHVj8CaqkJMWU7BRr6Ow==", - "dependencies": { - "aframe": "^0.8.2", - "karma-chrome-launcher": "^2.2.0" - } - }, - "node_modules/aframe-log-component": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/aframe-log-component/-/aframe-log-component-1.0.7.tgz", - "integrity": "sha1-G8gpn5ih4Zie5tjrKDVlC3rMqsw=" - }, - "node_modules/aframe-orbit-controls": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aframe-orbit-controls/-/aframe-orbit-controls-1.2.0.tgz", - "integrity": "sha512-g3j3Z3Lpf+LxIuNUwteVcB+eJ5jXwYEEzHbbRhdCJ754a9yqlvjt4tjvBq56F5ilpsg/bNUi8cjza8FFvJfd5g==" - }, - "node_modules/aframe-proxy-event-component": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/aframe-proxy-event-component/-/aframe-proxy-event-component-2.1.0.tgz", - "integrity": "sha512-FJ1+ZQLsETYoZbNwCe3l9xkakOHPYnBgDIE4YJMpWvqiFjiq0+BY6VuFWraZDdluul78b/d+UXIXmdd1JZRYqg==" - }, - "node_modules/aframe-render-order-component": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/aframe-render-order-component/-/aframe-render-order-component-1.1.0.tgz", - "integrity": "sha512-EYx8kGGYXjAEM8USKZYFBpRHxwwbT0JEMzzQFELrkXuv2/ODDManYzJtHGf5dpmnt5eCR+FCN/UJOgC5Fl5dew==", - "dependencies": { - "@babel/cli": "^7.2.3", - "@babel/core": "^7.3.3", - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-decorators": "^7.0.0", - "@babel/plugin-proposal-do-expressions": "^7.0.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-export-namespace-from": "^7.0.0", - "@babel/plugin-proposal-function-bind": "^7.0.0", - "@babel/plugin-proposal-function-sent": "^7.0.0", - "@babel/plugin-proposal-json-strings": "^7.0.0", - "@babel/plugin-proposal-logical-assignment-operators": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-proposal-numeric-separator": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.0.0", - "@babel/plugin-proposal-pipeline-operator": "^7.0.0", - "@babel/plugin-proposal-throw-expressions": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.0.0", - "@babel/plugin-syntax-import-meta": "^7.0.0", - "@babel/preset-env": "^7.3.1", - "aframe": "*", - "babel-loader": "^8.0.5", - "babel-preset-minify": "^0.5.0", - "chai": "^3.4.1", - "chai-shallow-deep-equal": "^1.3.0", - "cross-env": "4.0.0", - "ghpages": "^0.0.8", - "karma": "^0.13.15", - "karma-browserify": "^4.4.2", - "karma-chai-shallow-deep-equal": "0.0.4", - "karma-chrome-launcher": "2.0.0", - "karma-env-preprocessor": "^0.1.1", - "karma-firefox-launcher": "^0.1.7", - "karma-mocha": "^0.2.1", - "karma-mocha-reporter": "^1.1.3", - "karma-sinon-chai": "^1.1.0", - "mocha": "^2.3.4", - "randomcolor": "^0.4.4", - "semistandard": "^8.0.0", - "shelljs": "^0.7.0", - "shx": "^0.2.2", - "sinon": "^1.17.5", - "sinon-chai": "^2.8.0", - "snazzy": "^4.0.0", - "superagent": "^3.8.2", - "webpack": "^4.29.5", - "webpack-cli": "*", - "webpack-dev-server": "^3.2.0", - "webpack-sources": "1.0.1" - } - }, - "node_modules/aframe-render-order-component/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/aframe-render-order-component/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/aframe-render-order-component/node_modules/ghpages": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ghpages/-/ghpages-0.0.8.tgz", - "integrity": "sha1-vmfaREODPJHyUDE5IPsMzNp32x8=", - "dependencies": { - "gh-pages": "^0.11.0", - "gitconfiglocal": "^1.0.0", - "meow": "^3.6.0", - "object-assign": "^4.0.1", - "opn": "^3.0.3", - "parse-github-url": "^0.2.1" - }, - "bin": { - "ghpages": "cli.js" - } - }, - "node_modules/aframe-render-order-component/node_modules/karma-chrome-launcher": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.0.0.tgz", - "integrity": "sha1-wnkMWjKxVXfQ//Wk1aJwOztDnCU=", - "dependencies": { - "fs-access": "^1.0.0", - "which": "^1.2.1" - } - }, - "node_modules/aframe-render-order-component/node_modules/lolex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.3.2.tgz", - "integrity": "sha512-YYp8cqz7/8eruZ15L1mzcPkvLYxipfdsWIDESvNdNmQP9o7TsDitRhNuV2xb7aFu2ofZngao1jiVrVZ842x4BQ==" - }, - "node_modules/aframe-render-order-component/node_modules/samsam": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.1.2.tgz", - "integrity": "sha512-iVL7LibpM3tl4rQPweOXXrmjGegxx27flTOjQEZD3PXe4oZNFzuz6Si4mgleK/JWU/hyCvtV01RUovjvBEpDmw==", - "deprecated": "This package has been deprecated in favour of @sinonjs/samsam" - }, - "node_modules/aframe-render-order-component/node_modules/semistandard": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/semistandard/-/semistandard-8.0.0.tgz", - "integrity": "sha1-/YaeLk19Lr/GWwRmJcGJt4tn3R4=", - "dependencies": { - "eslint": "^2.10.1", - "eslint-config-semistandard": "^6.0.2", - "eslint-config-standard": "5.3.1", - "eslint-config-standard-jsx": "1.2.0", - "eslint-plugin-promise": "^1.0.8", - "eslint-plugin-react": "^5.0.1", - "eslint-plugin-standard": "^1.3.1", - "semistandard-format": "^3.0.0", - "standard-engine": "^4.0.0" - }, - "bin": { - "semistandard": "bin/cmd.js" - } - }, - "node_modules/aframe-render-order-component/node_modules/sinon": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-1.17.7.tgz", - "integrity": "sha512-M9rtyQxKfcTTdB64rpPSRaTzOvunb+HHPv/3PxvNPrEDnFSny95Pi6/3VoD471ody0ay0IHyzT3BErfcLXj6NA==", - "dependencies": { - "formatio": "1.1.1", - "lolex": "1.3.2", - "samsam": "1.1.2", - "util": ">=0.10.3 <1" - }, - "engines": { - "node": ">=0.1.103" - } - }, - "node_modules/aframe-render-order-component/node_modules/snazzy": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/snazzy/-/snazzy-4.0.1.tgz", - "integrity": "sha1-noGXTO/1JlDHb9G+nZdkr7icxGY=", - "dependencies": { - "chalk": "^1.1.0", - "inherits": "^2.0.1", - "minimist": "^1.1.1", - "readable-stream": "^2.0.6", - "standard": "^7.0.0", - "standard-json": "^1.0.0", - "text-table": "^0.2.0" - }, - "bin": { - "snazzy": "bin/cmd.js" - } - }, - "node_modules/aframe-render-order-component/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/aframe-slice9-component": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/aframe-slice9-component/-/aframe-slice9-component-1.0.0.tgz", - "integrity": "sha1-+w+EQdrdHosRzCRRK6eqaS1iK+E=" - }, - "node_modules/aframe-state-component": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/aframe-state-component/-/aframe-state-component-6.7.0.tgz", - "integrity": "sha512-lYjW40u+ZhVin91a69JzVqvLS5JMWCEbVFHmmd59GGXLHx8POc1F36CYMh34yofNig//5J+GBX5a/xKs3FiKZw==", - "dependencies": { - "debug": "^2.6.9" - } - }, - "node_modules/aframe-state-component/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/aframe-super-hot-html-loader": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aframe-super-hot-html-loader/-/aframe-super-hot-html-loader-1.2.0.tgz", - "integrity": "sha512-oRuGT7b4LZGWq21/8WGKDX2An/vj8Hsb2zPXBAGVgRPWFhUpGMJZ1+RCxQntMXYNPzt3T87CtCIzCUXMBqOXmA==", - "dependencies": { - "diff-dom": "^3.1.0", - "loader-utils": "^1.2.3", - "nunjucks": "^3.1.7" - } - }, - "node_modules/aframe-super-hot-loader": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/aframe-super-hot-loader/-/aframe-super-hot-loader-1.7.0.tgz", - "integrity": "sha512-L7FTrBIRu/EBvfrBDPN7+PjBmzpaUMhcRXydC9qlZNTGe+75K/wrLAa6jKa/JhnYP+Apt/LAdTy0rYGptJHd0A==", - "dependencies": { - "loader-utils": "^1.2.3", - "nunjucks": "^3.1.7" - } - }, - "node_modules/aframe-thumb-controls-component": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/aframe-thumb-controls-component/-/aframe-thumb-controls-component-2.0.2.tgz", - "integrity": "sha512-tGpYoced5Igdl1NVzfdTNpon8uaDOnYb/Gepb/Gc/+iBkEjsRWQE6Wkh86DVkyMpBdnCCHK52y2VtyLUkxwZiQ==", - "dependencies": { - "rollup": "^0.59.1" - } - }, - "node_modules/aframe-thumb-controls-component/node_modules/rollup": { - "version": "0.59.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.59.4.tgz", - "integrity": "sha512-ISiMqq/aJa+57QxX2MRcvLESHdJ7wSavmr6U1euMr+6UgFe6KM+3QANrYy8LQofwhTC1I7BcAdlLnDiaODs1BA==", - "dependencies": { - "@types/estree": "0.0.39", - "@types/node": "*" - }, - "bin": { - "rollup": "bin/rollup" - } - }, - "node_modules/aframe/node_modules/debug": { - "version": "2.2.0", - "resolved": "git+ssh://git@github.com/ngokevin/debug.git#ef5f8e66d49ce8bc64c6f282c15f8b7164409e3a", - "integrity": "sha512-rUI9wkpSlmwV2QQcE+jDnEdUPyRG+alTguuGlIJHW1PRMycHzpGy24htiAOiBdg6jYFXduQw4JuA1lvKh3DwzA==", - "license": "MIT" - }, - "node_modules/aframe/node_modules/promise-polyfill": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-3.1.0.tgz", - "integrity": "sha1-YpUrAdBZsRW0MnY7fvRhuA9t9H0=" - }, - "node_modules/after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" - }, - "node_modules/agent-base": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.1.tgz", - "integrity": "sha512-01q25QQDwLSsyfhrKbn8yuur+JNw0H+0Y4JiGIKd3z9aYk/w/2kxD/Upc+t2ZBBSUNff50VjPsSW2YxM8QYKVg==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agentkeepalive": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-2.2.0.tgz", - "integrity": "sha1-xdG9SxKQCPEWPyNvhuX66iAm4u8=", - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "peerDependencies": { - "ajv": ">=5.0.0" - } - }, - "node_modules/ajv-keywords": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", - "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", - "peerDependencies": { - "ajv": ">=4.10.0" - } - }, - "node_modules/ajv/node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "peer": true - }, - "node_modules/ajv/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "peer": true - }, - "node_modules/algoliasearch": { - "version": "3.35.1", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-3.35.1.tgz", - "integrity": "sha512-K4yKVhaHkXfJ/xcUnil04xiSrB8B8yHZoFEhWNpXg23eiCnqvTZw1tn/SqvdsANlYHLJlKl0qi3I/Q2Sqo7LwQ==", - "dependencies": { - "agentkeepalive": "^2.2.0", - "debug": "^2.6.9", - "envify": "^4.0.0", - "es6-promise": "^4.1.0", - "events": "^1.1.0", - "foreach": "^2.0.5", - "global": "^4.3.2", - "inherits": "^2.0.1", - "isarray": "^2.0.1", - "load-script": "^1.0.0", - "object-keys": "^1.0.11", - "querystring-es3": "^0.2.1", - "reduce": "^1.0.1", - "semver": "^5.1.0", - "tunnel-agent": "^0.6.0" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/algoliasearch/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/algoliasearch/node_modules/envify": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/envify/-/envify-4.1.0.tgz", - "integrity": "sha512-IKRVVoAYr4pIx4yIWNsz9mOsboxlNXiu7TNBnem/K/uTHdkyzXWDzHCK7UTolqBbgaBz0tQHsD3YNls0uIIjiw==", - "dependencies": { - "esprima": "^4.0.0", - "through": "~2.3.4" - }, - "bin": { - "envify": "bin/envify" - } - }, - "node_modules/algoliasearch/node_modules/events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/algoliasearch/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - }, - "node_modules/align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "dependencies": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/align-text/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" - }, - "node_modules/amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "engines": { - "node": ">=0.4.2" - } - }, - "node_modules/an-array": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/an-array/-/an-array-1.0.0.tgz", - "integrity": "sha1-wSWlu4JXd4419LT2qpx9D6nkJmU=" - }, - "node_modules/ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" - }, - "node_modules/array-from": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", - "integrity": "sha512-GQTc6Uupx1FCavi5mPzBvVT7nEOeWMmUA9P95wpfpW1XwMSKs+KaymD5C2Up7KAUKg/mYwbsUYzdZWcoajlNZg==", - "peer": true - }, - "node_modules/array-shuffle": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-shuffle/-/array-shuffle-1.0.1.tgz", - "integrity": "sha1-fqSIKjVrS8pfVF4LblLq9tlxVXo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dependencies": { - "array-uniq": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array.prototype.find": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.0.tgz", - "integrity": "sha512-Wn41+K1yuO5p7wRZDl7890c3xvv5UBrfVXTVIe28rSQb6LS0fZMDrQB6PAcxQFRFy6vJTLDc3A2+3CjQdzVKRg==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.13.0" - } - }, - "node_modules/arraybuffer.slice": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", - "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=" - }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/as-number": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/as-number/-/as-number-1.0.0.tgz", - "integrity": "sha1-rLJ+NPj52KsNqeN287iVmGD4CmY=" - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" - }, - "node_modules/asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/assert": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.3.0.tgz", - "integrity": "sha1-A5OaYiWCqBLMICMgoLmlbJuBWEk=", - "dependencies": { - "util": "0.10.3" - } - }, - "node_modules/assert/node_modules/inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - }, - "node_modules/assert/node_modules/util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dependencies": { - "inherits": "2.0.1" - } - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "engines": { - "node": "*" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ast-types": { - "version": "0.9.6", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", - "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/astw": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/astw/-/astw-2.2.0.tgz", - "integrity": "sha1-e9QXhNMkk5h66yOba04cV6hzuRc=", - "dependencies": { - "acorn": "^4.0.3" - } - }, - "node_modules/astw/node_modules/acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" - }, - "node_modules/async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" - }, - "node_modules/async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/autoprefixer": { - "version": "7.2.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.6.tgz", - "integrity": "sha512-Iq8TRIB+/9eQ8rbGhcP7ct5cYb/3qjNYAR2SnzLCEcwF6rvVOax8+9+fccgXk4bEhQGjOZd5TLhsksmAdsbGqQ==", - "dependencies": { - "browserslist": "^2.11.3", - "caniuse-lite": "^1.0.30000805", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^6.0.17", - "postcss-value-parser": "^3.2.3" - }, - "bin": { - "autoprefixer-info": "bin/autoprefixer-info" - } - }, - "node_modules/autoprefixer/node_modules/browserslist": { - "version": "2.11.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz", - "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==", - "deprecated": "Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.", - "dependencies": { - "caniuse-lite": "^1.0.30000792", - "electron-to-chromium": "^1.3.30" - }, - "bin": { - "browserslist": "cli.js" - } - }, - "node_modules/babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dependencies": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, - "node_modules/babel-code-frame/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-code-frame/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-code-frame/node_modules/js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" - }, - "node_modules/babel-code-frame/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/babel-helper-evaluate-path": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.5.0.tgz", - "integrity": "sha512-mUh0UhS607bGh5wUMAQfOpt2JX2ThXMtppHRdRU1kL7ZLRWIXxoV2UIV1r2cAeeNeU1M5SB5/RSUgUxrK8yOkA==" - }, - "node_modules/babel-helper-flip-expressions": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.4.3.tgz", - "integrity": "sha1-NpZzahKKwYvCUlS19AoizrPB0/0=" - }, - "node_modules/babel-helper-is-nodes-equiv": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz", - "integrity": "sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ=" - }, - "node_modules/babel-helper-is-void-0": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-helper-is-void-0/-/babel-helper-is-void-0-0.4.3.tgz", - "integrity": "sha1-fZwBtFYee5Xb2g9u7kj1tg5nMT4=" - }, - "node_modules/babel-helper-mark-eval-scopes": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.4.3.tgz", - "integrity": "sha1-0kSjvvmESHJgP/tG4izorN9VFWI=" - }, - "node_modules/babel-helper-remove-or-void": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.4.3.tgz", - "integrity": "sha1-pPA7QAd6D/6I5F0HAQ3uJB/1rmA=" - }, - "node_modules/babel-helper-to-multiple-sequence-expressions": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.5.0.tgz", - "integrity": "sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA==" - }, - "node_modules/babel-loader": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", - "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", - "dependencies": { - "find-cache-dir": "^2.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1", - "pify": "^4.0.1" - }, - "engines": { - "node": ">= 6.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-minify-builtins": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.5.0.tgz", - "integrity": "sha512-wpqbN7Ov5hsNwGdzuzvFcjgRlzbIeVv1gMIlICbPj0xkexnfoIDe7q+AZHMkQmAE/F9R5jkrB6TLfTegImlXag==" - }, - "node_modules/babel-plugin-minify-constant-folding": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.5.0.tgz", - "integrity": "sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ==", - "dependencies": { - "babel-helper-evaluate-path": "^0.5.0" - } - }, - "node_modules/babel-plugin-minify-dead-code-elimination": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.1.tgz", - "integrity": "sha512-x8OJOZIrRmQBcSqxBcLbMIK8uPmTvNWPXH2bh5MDCW1latEqYiRMuUkPImKcfpo59pTUB2FT7HfcgtG8ZlR5Qg==", - "dependencies": { - "babel-helper-evaluate-path": "^0.5.0", - "babel-helper-mark-eval-scopes": "^0.4.3", - "babel-helper-remove-or-void": "^0.4.3", - "lodash": "^4.17.11" - } - }, - "node_modules/babel-plugin-minify-flip-comparisons": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.4.3.tgz", - "integrity": "sha1-AMqHDLjxO0XAOLPB68DyJyk8llo=", - "dependencies": { - "babel-helper-is-void-0": "^0.4.3" - } - }, - "node_modules/babel-plugin-minify-guarded-expressions": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.4.4.tgz", - "integrity": "sha512-RMv0tM72YuPPfLT9QLr3ix9nwUIq+sHT6z8Iu3sLbqldzC1Dls8DPCywzUIzkTx9Zh1hWX4q/m9BPoPed9GOfA==", - "dependencies": { - "babel-helper-evaluate-path": "^0.5.0", - "babel-helper-flip-expressions": "^0.4.3" - } - }, - "node_modules/babel-plugin-minify-infinity": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.4.3.tgz", - "integrity": "sha1-37h2obCKBldjhO8/kuZTumB7Oco=" - }, - "node_modules/babel-plugin-minify-mangle-names": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.0.tgz", - "integrity": "sha512-3jdNv6hCAw6fsX1p2wBGPfWuK69sfOjfd3zjUXkbq8McbohWy23tpXfy5RnToYWggvqzuMOwlId1PhyHOfgnGw==", - "dependencies": { - "babel-helper-mark-eval-scopes": "^0.4.3" - } - }, - "node_modules/babel-plugin-minify-numeric-literals": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.4.3.tgz", - "integrity": "sha1-jk/VYcefeAEob/YOjF/Z3u6TwLw=" - }, - "node_modules/babel-plugin-minify-replace": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.5.0.tgz", - "integrity": "sha512-aXZiaqWDNUbyNNNpWs/8NyST+oU7QTpK7J9zFEFSA0eOmtUNMU3fczlTTTlnCxHmq/jYNFEmkkSG3DDBtW3Y4Q==" - }, - "node_modules/babel-plugin-minify-simplify": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.5.1.tgz", - "integrity": "sha512-OSYDSnoCxP2cYDMk9gxNAed6uJDiDz65zgL6h8d3tm8qXIagWGMLWhqysT6DY3Vs7Fgq7YUDcjOomhVUb+xX6A==", - "dependencies": { - "babel-helper-evaluate-path": "^0.5.0", - "babel-helper-flip-expressions": "^0.4.3", - "babel-helper-is-nodes-equiv": "^0.0.1", - "babel-helper-to-multiple-sequence-expressions": "^0.5.0" - } - }, - "node_modules/babel-plugin-minify-type-constructors": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.4.3.tgz", - "integrity": "sha1-G8bxW4f3qxCF1CszC3F2V6IVZQA=", - "dependencies": { - "babel-helper-is-void-0": "^0.4.3" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-transform-inline-consecutive-adds": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.4.3.tgz", - "integrity": "sha1-Mj1Ho+pjqDp6w8gRro5pQfrysNE=" - }, - "node_modules/babel-plugin-transform-member-expression-literals": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.4.tgz", - "integrity": "sha1-NwOcmgwzE6OUlfqsL/OmtbnQOL8=" - }, - "node_modules/babel-plugin-transform-merge-sibling-variables": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.4.tgz", - "integrity": "sha1-hbQi/DN3tEnJ0c3kQIcgNTJAHa4=" - }, - "node_modules/babel-plugin-transform-minify-booleans": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.4.tgz", - "integrity": "sha1-rLs+VqNVXdI5KOS1gtKFFi3SsZg=" - }, - "node_modules/babel-plugin-transform-property-literals": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.4.tgz", - "integrity": "sha1-mMHSHiVXNlc/k+zlRFn2ziSYXTk=", - "dependencies": { - "esutils": "^2.0.2" - } - }, - "node_modules/babel-plugin-transform-regexp-constructors": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.4.3.tgz", - "integrity": "sha1-WLd3W2OvzzMyj66aX4j71PsLSWU=" - }, - "node_modules/babel-plugin-transform-remove-console": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz", - "integrity": "sha1-uYA2DAZzhOJLNXpYjYB9PINSd4A=" - }, - "node_modules/babel-plugin-transform-remove-debugger": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.4.tgz", - "integrity": "sha1-QrcnYxyXl44estGZp67IShgznvI=" - }, - "node_modules/babel-plugin-transform-remove-undefined": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.5.0.tgz", - "integrity": "sha512-+M7fJYFaEE/M9CXa0/IRkDbiV3wRELzA1kKQFCJ4ifhrzLKn/9VCCgj9OFmYWwBd8IB48YdgPkHYtbYq+4vtHQ==", - "dependencies": { - "babel-helper-evaluate-path": "^0.5.0" - } - }, - "node_modules/babel-plugin-transform-simplify-comparison-operators": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.4.tgz", - "integrity": "sha1-9ir+CWyrDh9ootdT/fKDiIRxzrk=" - }, - "node_modules/babel-plugin-transform-undefined-to-void": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.4.tgz", - "integrity": "sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA=" - }, - "node_modules/babel-preset-minify": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.5.1.tgz", - "integrity": "sha512-1IajDumYOAPYImkHbrKeiN5AKKP9iOmRoO2IPbIuVp0j2iuCcj0n7P260z38siKMZZ+85d3mJZdtW8IgOv+Tzg==", - "dependencies": { - "babel-plugin-minify-builtins": "^0.5.0", - "babel-plugin-minify-constant-folding": "^0.5.0", - "babel-plugin-minify-dead-code-elimination": "^0.5.1", - "babel-plugin-minify-flip-comparisons": "^0.4.3", - "babel-plugin-minify-guarded-expressions": "^0.4.4", - "babel-plugin-minify-infinity": "^0.4.3", - "babel-plugin-minify-mangle-names": "^0.5.0", - "babel-plugin-minify-numeric-literals": "^0.4.3", - "babel-plugin-minify-replace": "^0.5.0", - "babel-plugin-minify-simplify": "^0.5.1", - "babel-plugin-minify-type-constructors": "^0.4.3", - "babel-plugin-transform-inline-consecutive-adds": "^0.4.3", - "babel-plugin-transform-member-expression-literals": "^6.9.4", - "babel-plugin-transform-merge-sibling-variables": "^6.9.4", - "babel-plugin-transform-minify-booleans": "^6.9.4", - "babel-plugin-transform-property-literals": "^6.9.4", - "babel-plugin-transform-regexp-constructors": "^0.4.3", - "babel-plugin-transform-remove-console": "^6.9.4", - "babel-plugin-transform-remove-debugger": "^6.9.4", - "babel-plugin-transform-remove-undefined": "^0.5.0", - "babel-plugin-transform-simplify-comparison-operators": "^6.9.4", - "babel-plugin-transform-undefined-to-void": "^6.9.4", - "lodash": "^4.17.11" - } - }, - "node_modules/babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dependencies": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "node_modules/babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dependencies": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - } - }, - "node_modules/babel-traverse/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/babel-traverse/node_modules/globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dependencies": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - } - }, - "node_modules/babel-types/node_modules/to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "bin": { - "babylon": "bin/babylon.js" - } - }, - "node_modules/backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" - }, - "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base62": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/base62/-/base62-1.2.8.tgz", - "integrity": "sha512-V6YHUbjLxN1ymqNLb1DPHoU1CpfdL7d2YTIp5W3U4hhoG4hhxNmsFDs66M9EXxBiSEke5Bt5dwdfMwwZF70iLA==", - "engines": { - "node": "*" - } - }, - "node_modules/Base64": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/Base64/-/Base64-0.2.1.tgz", - "integrity": "sha1-ujpCMHCOGGcFBl5mur3Uw1z2ACg=" - }, - "node_modules/base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/base64-js": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", - "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/base64id": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", - "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/batch": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.5.3.tgz", - "integrity": "sha1-PzQU84AyF0O/wQQvmoP/HVgk1GQ=" - }, - "node_modules/better-assert": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", - "dependencies": { - "callsite": "1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "engines": { - "node": "*" - } - }, - "node_modules/bignumber.js": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", - "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/blob": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", - "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=" - }, - "node_modules/blob-slicer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/blob-slicer/-/blob-slicer-1.0.0.tgz", - "integrity": "sha512-1Re6x6auSR0At8qIsPceM3MuZQ8iDsL6UBl1V63EZfkoeLF2tr/GkbG15WW7fXhIcWObFH0v0q7D5WeCGUUBMA==", - "dependencies": { - "buffer": "^4.9.1" - } - }, - "node_modules/blob-slicer/node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/blob-slicer/node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "node_modules/bluebird": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", - "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=" - }, - "node_modules/bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" - }, - "node_modules/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dependencies": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", - "dependencies": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "node_modules/browser-pack": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-5.0.1.tgz", - "integrity": "sha1-QZdxmyDG4KqglFHFER5T77b7wY0=", - "dependencies": { - "combine-source-map": "~0.6.1", - "defined": "^1.0.0", - "JSONStream": "^1.0.3", - "through2": "^1.0.0", - "umd": "^3.0.0" - }, - "bin": { - "browser-pack": "bin/cmd.js" - } - }, - "node_modules/browser-pack/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "node_modules/browser-pack/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/browser-pack/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "node_modules/browser-pack/node_modules/through2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-1.1.1.tgz", - "integrity": "sha1-CEfLxESfNAVXTb3M2buEG4OsNUU=", - "dependencies": { - "readable-stream": ">=1.1.13-1 <1.2.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - }, - "node_modules/browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "dependencies": { - "resolve": "1.1.7" - } - }, - "node_modules/browser-resolve/node_modules/resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=" - }, - "node_modules/browserify": { - "version": "10.2.3", - "resolved": "https://registry.npmjs.org/browserify/-/browserify-10.2.3.tgz", - "integrity": "sha1-9qGNTWqzERP5/fg/ED+gFyioIGo=", - "dependencies": { - "assert": "~1.3.0", - "browser-pack": "^5.0.0", - "browser-resolve": "^1.7.1", - "browserify-zlib": "~0.1.2", - "buffer": "^3.0.0", - "builtins": "~0.0.3", - "commondir": "0.0.1", - "concat-stream": "~1.4.1", - "console-browserify": "^1.1.0", - "constants-browserify": "~0.0.1", - "crypto-browserify": "^3.0.0", - "deep-equal": "^1.0.0", - "defined": "^1.0.0", - "deps-sort": "^1.3.7", - "domain-browser": "~1.1.0", - "duplexer2": "~0.0.2", - "events": "~1.0.0", - "glob": "^4.0.5", - "has": "^1.0.0", - "htmlescape": "^1.1.0", - "http-browserify": "^1.4.0", - "https-browserify": "~0.0.0", - "inherits": "~2.0.1", - "insert-module-globals": "^6.4.1", - "isarray": "0.0.1", - "JSONStream": "^1.0.3", - "labeled-stream-splicer": "^1.0.0", - "module-deps": "^3.7.11", - "os-browserify": "~0.1.1", - "parents": "^1.0.1", - "path-browserify": "~0.0.0", - "process": "~0.11.0", - "punycode": "^1.3.2", - "querystring-es3": "~0.2.0", - "read-only-stream": "^1.1.1", - "readable-stream": "^1.1.13", - "resolve": "^1.1.4", - "shasum": "^1.0.0", - "shell-quote": "~0.0.1", - "stream-browserify": "^1.0.0", - "string_decoder": "~0.10.0", - "subarg": "^1.0.0", - "syntax-error": "^1.1.1", - "through2": "^1.0.0", - "timers-browserify": "^1.0.1", - "tty-browserify": "~0.0.0", - "url": "~0.10.1", - "util": "~0.10.1", - "vm-browserify": "~0.0.1", - "xtend": "^4.0.0" - }, - "bin": { - "browserify": "bin/cmd.js" - } - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/browserify-css": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/browserify-css/-/browserify-css-0.8.4.tgz", - "integrity": "sha1-Hk4nedy7By0Jvq605vaVAdVE1/M=", - "dependencies": { - "clean-css": "2.2.x", - "concat-stream": "1.4.x", - "css": "1.6.x", - "find-node-modules": "^1.0.1", - "lodash": "3.6.x", - "through2": "0.6.x" - } - }, - "node_modules/browserify-css/node_modules/lodash": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.6.0.tgz", - "integrity": "sha1-Umao9J3Zib5Pn2gbbyoMVShdDZo=" - }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dependencies": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - } - }, - "node_modules/browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "dependencies": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" - } - }, - "node_modules/browserify-zlib": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", - "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", - "dependencies": { - "pako": "~0.2.0" - } - }, - "node_modules/browserify/node_modules/commondir": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-0.0.1.tgz", - "integrity": "sha1-ifAP3NUbUZxXhzP+xWPmptp/W+I=", - "engines": { - "node": "*" - } - }, - "node_modules/browserify/node_modules/glob": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", - "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^2.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/browserify/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "node_modules/browserify/node_modules/minimatch": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", - "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", - "deprecated": "Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue", - "dependencies": { - "brace-expansion": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/browserify/node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/browserify/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/browserify/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "node_modules/browserify/node_modules/through2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-1.1.1.tgz", - "integrity": "sha1-CEfLxESfNAVXTb3M2buEG4OsNUU=", - "dependencies": { - "readable-stream": ">=1.1.13-1 <1.2.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - }, - "node_modules/browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-3.6.2.tgz", - "integrity": "sha512-c3M77NkHJxS0zx/ErxXhDLr1v3y2MDXPeTJPvLNOaIYJ4ymHBUFQ9EXzt9HYuqAJllMoNb/EZ8hIiulnQFAUuQ==", - "dependencies": { - "base64-js": "0.0.8", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "node_modules/buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "dependencies": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "node_modules/buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "engines": { - "node": "*" - } - }, - "node_modules/buffer-equal": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", - "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" - }, - "node_modules/buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" - }, - "node_modules/buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - }, - "node_modules/buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" - }, - "node_modules/buffer-to-arraybuffer": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", - "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=" - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" - }, - "node_modules/builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" - }, - "node_modules/builtins": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-0.0.7.tgz", - "integrity": "sha1-NVIZzWzxjb58Acx/0tznZc/cVJo=" - }, - "node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dependencies": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "node_modules/cacache/node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/cacache/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dependencies": { - "callsites": "^0.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", - "engines": { - "node": "*" - } - }, - "node_modules/callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dependencies": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/caniuse-api": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", - "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", - "dependencies": { - "browserslist": "^1.3.6", - "caniuse-db": "^1.0.30000529", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-api/node_modules/browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "deprecated": "Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.", - "dependencies": { - "caniuse-db": "^1.0.30000639", - "electron-to-chromium": "^1.2.7" - }, - "bin": { - "browserslist": "cli.js" - } - }, - "node_modules/caniuse-api/node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" - }, - "node_modules/caniuse-db": { - "version": "1.0.30001048", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30001048.tgz", - "integrity": "sha512-HqYsBIZlVARU5GDXPziXSFwFVpGx9KqCznr62iaey7bT2sqpx7/jI4B3PvbKguKi8kGeEannJ7WEPB5H71rjFQ==" - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001439", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001439.tgz", - "integrity": "sha512-1MgUzEkoMO6gKfXflStpYgZDlFM7M/ck/bgfVCACO5vnAf0fXoNVHdWtqGU+MYca+4bL9Z5bpOVmR33cWW9G2A==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] - }, - "node_modules/cardboard-vr-display": { - "version": "1.0.18", - "resolved": "https://registry.npmjs.org/cardboard-vr-display/-/cardboard-vr-display-1.0.18.tgz", - "integrity": "sha512-G1UEitQBT3pODLnMx37xv9JyZktCBTkwjxS4Vz9KmYL0Ln+Crm/CI7o4WEqAyS6xZjxR3cAvcClou1edX/JUbA==", - "dependencies": { - "gl-preserve-state": "^1.0.0", - "nosleep.js": "^0.7.0", - "webvr-polyfill-dpdb": "^1.0.17" - } - }, - "node_modules/center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dependencies": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/chai": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz", - "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=", - "dependencies": { - "assertion-error": "^1.0.1", - "deep-eql": "^0.1.3", - "type-detect": "^1.0.0" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/chai-shallow-deep-equal": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/chai-shallow-deep-equal/-/chai-shallow-deep-equal-1.4.6.tgz", - "integrity": "sha1-QYS1oTOTra40ts7wxptazILE2DQ=", - "engines": { - "node": ">= 0.6.0" - }, - "peerDependencies": { - "chai": ">= 1.9.0" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "node_modules/chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "deprecated": "CircularJSON is in maintenance only, flatted is its successor." - }, - "node_modules/clap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", - "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", - "dependencies": { - "chalk": "^1.1.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clap/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clap/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clap/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clean-css": { - "version": "2.2.23", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-2.2.23.tgz", - "integrity": "sha1-BZC1R4tRbEkD7cLYm9P9vdKGMow=", - "dependencies": { - "commander": "2.2.x" - }, - "bin": { - "cleancss": "bin/cleancss" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/clean-css/node_modules/commander": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.2.0.tgz", - "integrity": "sha1-F1rUuTF/P/YV8gHB5XIk9Vo+kd8=", - "engines": { - "node": ">= 0.6.x" - } - }, - "node_modules/cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dependencies": { - "restore-cursor": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" - }, - "node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "engines": { - "node": ">=4" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/coa": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", - "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", - "dependencies": { - "q": "^1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/collections": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/collections/-/collections-0.2.2.tgz", - "integrity": "sha1-HyMCay7zb5J+7MkB6ZxfDUj6M04=", - "dependencies": { - "weak-map": "1.0.0" - } - }, - "node_modules/color": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", - "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", - "dependencies": { - "clone": "^1.0.2", - "color-convert": "^1.3.0", - "color-string": "^0.3.0" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/color-string": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", - "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", - "dependencies": { - "color-name": "^1.0.0" - } - }, - "node_modules/colormin": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", - "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", - "dependencies": { - "color": "^0.11.0", - "css-color-names": "0.0.4", - "has": "^1.0.1" - } - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/combine-source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.6.1.tgz", - "integrity": "sha1-m0oJwxYDPXaODxHgKfonMOB5rZY=", - "dependencies": { - "convert-source-map": "~1.1.0", - "inline-source-map": "~0.5.0", - "lodash.memoize": "~3.0.3", - "source-map": "~0.4.2" - } - }, - "node_modules/combine-source-map/node_modules/convert-source-map": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", - "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=" - }, - "node_modules/combine-source-map/node_modules/source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dependencies": { - "amdefine": ">=0.0.4" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.0.1.tgz", - "integrity": "sha512-IPF4ouhCP+qdlcmCedhxX4xiGBPyigb8v5NeUp+0LyhwLgxMqyp3S0vl7TAPfS/hiP7FC3caI/PB9lTmP8r1NA==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" - }, - "node_modules/commoner": { - "version": "0.10.8", - "resolved": "https://registry.npmjs.org/commoner/-/commoner-0.10.8.tgz", - "integrity": "sha1-NPw2cs0kOT6LtH5wyqApOBH08sU=", - "dependencies": { - "commander": "^2.5.0", - "detective": "^4.3.1", - "glob": "^5.0.15", - "graceful-fs": "^4.1.2", - "iconv-lite": "^0.4.5", - "mkdirp": "^0.5.0", - "private": "^0.1.6", - "q": "^1.1.2", - "recast": "^0.11.17" - }, - "bin": { - "commonize": "bin/commonize" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commoner/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==" - }, - "node_modules/commoner/node_modules/glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, - "node_modules/component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" - }, - "node_modules/compressible": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", - "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", - "dependencies": { - "mime-db": ">= 1.40.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "node_modules/concat-stream": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.4.11.tgz", - "integrity": "sha512-X3JMh8+4je3U1cQpG87+f9lXHDrqcb2MVLg9L7o8b1UZ0DzhRrUpdn65ttzu10PpJPPI3MQNkis+oha6TSA9Mw==", - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "inherits": "~2.0.1", - "readable-stream": "~1.1.9", - "typedarray": "~0.0.5" - } - }, - "node_modules/concat-stream/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/concat-stream/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "node_modules/config-chain": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", - "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" - }, - "node_modules/constants-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-0.0.1.tgz", - "integrity": "sha1-kld9tSe6bEzwpFaNhLwDH0QeIfI=" - }, - "node_modules/content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "node_modules/cookiejar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", - "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" - }, - "node_modules/copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dependencies": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/core-js": { - "version": "2.6.10", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.10.tgz", - "integrity": "sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA==", - "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", - "hasInstallScript": true - }, - "node_modules/core-js-compat": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz", - "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==", - "dependencies": { - "browserslist": "^4.21.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "node_modules/create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" - } - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/cross-env": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-4.0.0.tgz", - "integrity": "sha1-Fgg4YtCCdaRiiwskOxIb7apV3YA=", - "dependencies": { - "cross-spawn": "^5.1.0", - "is-windows": "^1.0.0" - }, - "bin": { - "cross-env": "dist/bin/cross-env.js" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dependencies": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "node_modules/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - }, - "engines": { - "node": "*" - } - }, - "node_modules/css": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/css/-/css-1.6.0.tgz", - "integrity": "sha1-wG//CvuzE/zlvOBw12UxpsjTAKo=", - "dependencies": { - "css-parse": "1.7.0", - "css-stringify": "1.4.1" - } - }, - "node_modules/css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", - "engines": { - "node": "*" - } - }, - "node_modules/css-loader": { - "version": "0.28.11", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.11.tgz", - "integrity": "sha512-wovHgjAx8ZIMGSL8pTys7edA1ClmzxHeY6n/d97gg5odgsxEgKjULPR0viqyC+FWMCL9sfqoC/QCUBo62tLvPg==", - "dependencies": { - "babel-code-frame": "^6.26.0", - "css-selector-tokenizer": "^0.7.0", - "cssnano": "^3.10.0", - "icss-utils": "^2.1.0", - "loader-utils": "^1.0.2", - "lodash.camelcase": "^4.3.0", - "object-assign": "^4.1.1", - "postcss": "^5.0.6", - "postcss-modules-extract-imports": "^1.2.0", - "postcss-modules-local-by-default": "^1.2.0", - "postcss-modules-scope": "^1.1.0", - "postcss-modules-values": "^1.3.0", - "postcss-value-parser": "^3.3.0", - "source-list-map": "^2.0.0" - }, - "engines": { - "node": ">=0.12.0 || >= 4.3.0 < 5.0.0 || >=5.10" - } - }, - "node_modules/css-loader/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/css-loader/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/css-loader/node_modules/chalk/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/css-loader/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/css-loader/node_modules/postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dependencies": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/css-loader/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/css-parse": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz", - "integrity": "sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs=" - }, - "node_modules/css-selector-tokenizer": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.2.tgz", - "integrity": "sha512-yj856NGuAymN6r8bn8/Jl46pR+OC3eEvAhfGYDUe7YPtTPAYrSSw4oAniZ9Y8T5B92hjhwTBLUen0/vKPxf6pw==", - "dependencies": { - "cssesc": "^3.0.0", - "fastparse": "^1.1.2", - "regexpu-core": "^4.6.0" - } - }, - "node_modules/css-stringify": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/css-stringify/-/css-stringify-1.4.1.tgz", - "integrity": "sha1-JSzL8D9yOgCb3Ydw/n6ydBca/fo=", - "dependencies": { - "source-map": "~0.1.31" - } - }, - "node_modules/css-stringify/node_modules/source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", - "dependencies": { - "amdefine": ">=0.0.4" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", - "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", - "dependencies": { - "autoprefixer": "^6.3.1", - "decamelize": "^1.1.2", - "defined": "^1.0.0", - "has": "^1.0.1", - "object-assign": "^4.0.1", - "postcss": "^5.0.14", - "postcss-calc": "^5.2.0", - "postcss-colormin": "^2.1.8", - "postcss-convert-values": "^2.3.4", - "postcss-discard-comments": "^2.0.4", - "postcss-discard-duplicates": "^2.0.1", - "postcss-discard-empty": "^2.0.1", - "postcss-discard-overridden": "^0.1.1", - "postcss-discard-unused": "^2.2.1", - "postcss-filter-plugins": "^2.0.0", - "postcss-merge-idents": "^2.1.5", - "postcss-merge-longhand": "^2.0.1", - "postcss-merge-rules": "^2.0.3", - "postcss-minify-font-values": "^1.0.2", - "postcss-minify-gradients": "^1.0.1", - "postcss-minify-params": "^1.0.4", - "postcss-minify-selectors": "^2.0.4", - "postcss-normalize-charset": "^1.1.0", - "postcss-normalize-url": "^3.0.7", - "postcss-ordered-values": "^2.1.0", - "postcss-reduce-idents": "^2.2.2", - "postcss-reduce-initial": "^1.0.0", - "postcss-reduce-transforms": "^1.0.3", - "postcss-svgo": "^2.1.1", - "postcss-unique-selectors": "^2.0.2", - "postcss-value-parser": "^3.2.3", - "postcss-zindex": "^2.0.1" - } - }, - "node_modules/cssnano/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cssnano/node_modules/autoprefixer": { - "version": "6.7.7", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", - "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", - "dependencies": { - "browserslist": "^1.7.6", - "caniuse-db": "^1.0.30000634", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^5.2.16", - "postcss-value-parser": "^3.2.3" - } - }, - "node_modules/cssnano/node_modules/browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "deprecated": "Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.", - "dependencies": { - "caniuse-db": "^1.0.30000639", - "electron-to-chromium": "^1.2.7" - }, - "bin": { - "browserslist": "cli.js" - } - }, - "node_modules/cssnano/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cssnano/node_modules/chalk/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/cssnano/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cssnano/node_modules/postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dependencies": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/cssnano/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/csso": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", - "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", - "dependencies": { - "clap": "^1.0.9", - "source-map": "^0.5.3" - }, - "bin": { - "csso": "bin/csso" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dependencies": { - "array-find-index": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=" - }, - "node_modules/cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==" - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/debug-log": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", - "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/deep-assign": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-2.0.0.tgz", - "integrity": "sha1-6+BrHwfwja5ZdiDj3RYi83GhxXI=", - "dependencies": { - "is-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/deep-eql": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", - "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", - "dependencies": { - "type-detect": "0.1.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/deep-eql/node_modules/type-detect": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", - "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=", - "engines": { - "node": "*" - } - }, - "node_modules/deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dependencies": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" - }, - "node_modules/default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", - "dependencies": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dependencies": { - "clone": "^1.0.2" - } - }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" - }, - "node_modules/deglob": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/deglob/-/deglob-1.1.2.tgz", - "integrity": "sha1-dtV3wl/j9zKUEqK1nq3qV6xQDj8=", - "dependencies": { - "find-root": "^1.0.0", - "glob": "^7.0.5", - "ignore": "^3.0.9", - "pkg-config": "^1.1.0", - "run-parallel": "^1.1.2", - "uniq": "^1.0.1", - "xtend": "^4.0.0" - } - }, - "node_modules/del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "dependencies": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/del/node_modules/globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dependencies": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del/node_modules/globby/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/deps-sort": { - "version": "1.3.9", - "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-1.3.9.tgz", - "integrity": "sha1-Kd//U+F7Nq7K51MK27v2IsLtGnE=", - "dependencies": { - "JSONStream": "^1.0.3", - "shasum": "^1.0.0", - "subarg": "^1.0.0", - "through2": "^1.0.0" - }, - "bin": { - "deps-sort": "bin/cmd.js" - } - }, - "node_modules/deps-sort/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "node_modules/deps-sort/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/deps-sort/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "node_modules/deps-sort/node_modules/through2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-1.1.1.tgz", - "integrity": "sha1-CEfLxESfNAVXTb3M2buEG4OsNUU=", - "dependencies": { - "readable-stream": ">=1.1.13-1 <1.2.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - }, - "node_modules/des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "node_modules/detect-file": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-0.1.0.tgz", - "integrity": "sha1-STXe39lIhkjgBrASlWbpOGcR6mM=", - "dependencies": { - "fs-exists-sync": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/detect-node": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", - "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==" - }, - "node_modules/detective": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz", - "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==", - "dependencies": { - "acorn": "^5.2.1", - "defined": "^1.0.0" - } - }, - "node_modules/di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=" - }, - "node_modules/diff": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", - "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff-dom": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/diff-dom/-/diff-dom-3.1.0.tgz", - "integrity": "sha512-rb/ZbWpK4V0EsSCz8MegVtuzBNLqErwvzx0uUgmodM+KJYYk8B9sloV2fRga960oz/mRWG3fSdtE5lyCfzB7/Q==", - "dependencies": { - "rollup-plugin-terser": "^4.0.3" - } - }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/disparity": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/disparity/-/disparity-2.0.0.tgz", - "integrity": "sha1-V92stHMkrl9Y0swNqIbbTOnutxg=", - "dependencies": { - "ansi-styles": "^2.0.1", - "diff": "^1.3.2" - }, - "bin": { - "disparity": "bin/disparity" - } - }, - "node_modules/disparity/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" - }, - "node_modules/dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", - "dependencies": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "dependencies": { - "buffer-indexof": "^1.0.0" - } - }, - "node_modules/doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dependencies": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/document-register-element": { - "version": "0.5.4", - "resolved": "git+ssh://git@github.com/dmarcos/document-register-element.git#8ccc532b7f3744be954574caf3072a5fd260ca90", - "integrity": "sha512-dwvGei9I/m1pYQ/9aNODyVmvSWBtlncfIROn5Sbi4MVnIcZKre5QaWx+AGLI/j6VH9sp8jwLyeuWP1micANT0g==", - "license": "MIT" - }, - "node_modules/dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", - "dependencies": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "node_modules/dom-storage": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/dom-storage/-/dom-storage-2.1.0.tgz", - "integrity": "sha512-g6RpyWXzl0RR6OTElHKBl7nwnK87GUyZMYC7JWsB/IA73vpqK2K6LT39x4VepLxlSsWBFrPVLnsSR5Jyty0+2Q==", - "engines": { - "node": "*" - } - }, - "node_modules/dom-walk": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", - "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" - }, - "node_modules/domain-browser": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", - "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", - "engines": { - "node": ">=0.4", - "npm": ">=1.2" - } - }, - "node_modules/dtype": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dtype/-/dtype-2.0.0.tgz", - "integrity": "sha1-zQUjI84GFETs0uj1dI9popvihDQ=", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", - "dependencies": { - "readable-stream": "~1.1.9" - } - }, - "node_modules/duplexer2/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "node_modules/duplexer2/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/duplexer2/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "node_modules/duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dependencies": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/editorconfig": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.13.3.tgz", - "integrity": "sha512-WkjsUNVCu+ITKDj73QDvi0trvpdDWdkDyHybDGSXPfekLCqwmpD7CP7iPbvBgosNuLcI96XTDwNa75JyFl7tEQ==", - "dependencies": { - "bluebird": "^3.0.5", - "commander": "^2.9.0", - "lru-cache": "^3.2.0", - "semver": "^5.1.0", - "sigmund": "^1.0.1" - }, - "bin": { - "editorconfig": "bin/editorconfig" - } - }, - "node_modules/editorconfig/node_modules/bluebird": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz", - "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==" - }, - "node_modules/editorconfig/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==" - }, - "node_modules/editorconfig/node_modules/lru-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-3.2.0.tgz", - "integrity": "sha1-cXibO39Tmb7IVl3aOKow0qCX7+4=", - "dependencies": { - "pseudomap": "^1.0.1" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "node_modules/electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" - }, - "node_modules/elliptic": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", - "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", - "dependencies": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, - "node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "node_modules/emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", - "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/engine.io": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.5.tgz", - "integrity": "sha512-j1DWIcktw4hRwrv6nWx++5nFH2X64x16MAG2P0Lmi5Dvdfi3I+Jhc7JKJIdAmDJa+5aZ/imHV7dWRPy2Cqjh3A==", - "dependencies": { - "accepts": "1.3.3", - "base64id": "1.0.0", - "cookie": "0.3.1", - "debug": "2.3.3", - "engine.io-parser": "1.3.2", - "ws": "~1.1.5" - } - }, - "node_modules/engine.io-client": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.5.tgz", - "integrity": "sha512-AYTgHyeVUPitsseqjoedjhYJapNVoSPShbZ+tEUX9/73jgZ/Z3sUlJf9oYgdEBBdVhupUpUqSxH0kBCXlQnmZg==", - "dependencies": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "2.3.3", - "engine.io-parser": "1.3.2", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parsejson": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "~1.1.5", - "xmlhttprequest-ssl": "1.5.3", - "yeast": "0.1.2" - } - }, - "node_modules/engine.io-client/node_modules/component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" - }, - "node_modules/engine.io-client/node_modules/debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dependencies": { - "ms": "0.7.2" - } - }, - "node_modules/engine.io-client/node_modules/ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" - }, - "node_modules/engine.io-parser": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", - "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", - "dependencies": { - "after": "0.8.2", - "arraybuffer.slice": "0.0.6", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.4", - "has-binary": "0.1.7", - "wtf-8": "1.0.0" - } - }, - "node_modules/engine.io/node_modules/debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dependencies": { - "ms": "0.7.2" - } - }, - "node_modules/engine.io/node_modules/ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" - }, - "node_modules/enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/enhanced-resolve/node_modules/memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=" - }, - "node_modules/envify": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/envify/-/envify-3.4.1.tgz", - "integrity": "sha1-1xIjKejfFoi6dxsSUBkXyc5cvOg=", - "dependencies": { - "jstransform": "^11.0.3", - "through": "~2.3.4" - }, - "bin": { - "envify": "bin/envify" - } - }, - "node_modules/errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.0.tgz", - "integrity": "sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg==", - "dependencies": { - "es-to-primitive": "^1.2.0", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.0", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-inspect": "^1.6.0", - "object-keys": "^1.1.1", - "string.prototype.trimleft": "^2.1.0", - "string.prototype.trimright": "^2.1.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "dependencies": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-set": "~0.1.5", - "es6-symbol": "~3.1.1", - "event-emitter": "~0.3.5" - } - }, - "node_modules/es6-object-assign": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", - "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=" - }, - "node_modules/es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - }, - "node_modules/es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-symbol": "3.1.1", - "event-emitter": "~0.3.5" - } - }, - "node_modules/es6-set/node_modules/es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", - "dependencies": { - "es6-map": "^0.1.3", - "es6-weak-map": "^2.0.1", - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/esformatter": { - "version": "0.9.6", - "resolved": "https://registry.npmjs.org/esformatter/-/esformatter-0.9.6.tgz", - "integrity": "sha1-Ngiux4KN7uPNP0bhGSrrRyaKlX8=", - "dependencies": { - "acorn-to-esprima": "^2.0.6", - "babel-traverse": "^6.4.5", - "debug": "^0.7.4", - "disparity": "^2.0.0", - "esformatter-parser": "^1.0.0", - "glob": "^5.0.3", - "minimist": "^1.1.1", - "mout": ">=0.9 <2.0", - "npm-run": "^2.0.0", - "resolve": "^1.1.5", - "rocambole": ">=0.7 <2.0", - "rocambole-indent": "^2.0.4", - "rocambole-linebreak": "^1.0.2", - "rocambole-node": "~1.0", - "rocambole-token": "^1.1.2", - "rocambole-whitespace": "^1.0.0", - "stdin": "*", - "strip-json-comments": "~0.1.1", - "supports-color": "^1.3.1", - "user-home": "^2.0.0" - }, - "bin": { - "esformatter": "bin/esformatter" - } - }, - "node_modules/esformatter-eol-last": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/esformatter-eol-last/-/esformatter-eol-last-1.0.0.tgz", - "integrity": "sha1-RaeP9GIrHUnkT1a0mQV2amMpDAc=", - "dependencies": { - "string.prototype.endswith": "^0.2.0" - } - }, - "node_modules/esformatter-ignore": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/esformatter-ignore/-/esformatter-ignore-0.1.3.tgz", - "integrity": "sha1-BNO4db+knd4ATMWN9va7w8BWfx4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/esformatter-jsx": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/esformatter-jsx/-/esformatter-jsx-7.4.1.tgz", - "integrity": "sha1-siCa4JCPQTp0exIFcny/S6QklgI=", - "dependencies": { - "babylon": "6.14.1", - "esformatter-ignore": "^0.1.3", - "extend": "3.0.0", - "js-beautify": "1.6.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/esformatter-jsx/node_modules/babylon": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.14.1.tgz", - "integrity": "sha1-lWJ1+rcnU62bNDXXr+WPi/CimBU=", - "bin": { - "babylon": "bin/babylon.js" - } - }, - "node_modules/esformatter-jsx/node_modules/extend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", - "integrity": "sha1-WkdDU7nzNT3dgXbf03uRyDpG8dQ=" - }, - "node_modules/esformatter-literal-notation": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esformatter-literal-notation/-/esformatter-literal-notation-1.0.1.tgz", - "integrity": "sha1-cQ57QgF1/j9+WvrVu60ykQOELi8=", - "dependencies": { - "rocambole": "^0.3.6", - "rocambole-token": "^1.2.1" - } - }, - "node_modules/esformatter-literal-notation/node_modules/esprima": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", - "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/esformatter-literal-notation/node_modules/rocambole": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/rocambole/-/rocambole-0.3.6.tgz", - "integrity": "sha1-Teu/WUMUS8e2AG2Vvo+swLdDUqc=", - "dependencies": { - "esprima": "~1.0" - } - }, - "node_modules/esformatter-parser": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/esformatter-parser/-/esformatter-parser-1.0.0.tgz", - "integrity": "sha1-CFQHLQSHU57TnK442KVDLBfsEdM=", - "dependencies": { - "acorn-to-esprima": "^2.0.8", - "babel-traverse": "^6.9.0", - "babylon": "^6.8.0", - "rocambole": "^0.7.0" - } - }, - "node_modules/esformatter-quotes": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/esformatter-quotes/-/esformatter-quotes-1.1.0.tgz", - "integrity": "sha1-4ixsRFx/MGBB2BybnlH8psv6yoI=" - }, - "node_modules/esformatter-remove-trailing-commas": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esformatter-remove-trailing-commas/-/esformatter-remove-trailing-commas-1.0.1.tgz", - "integrity": "sha1-k5diTB+qmA/E7Mfl6YE+tPK1gqc=", - "dependencies": { - "rocambole-token": "^1.2.1" - } - }, - "node_modules/esformatter-semicolon-first": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/esformatter-semicolon-first/-/esformatter-semicolon-first-1.2.0.tgz", - "integrity": "sha1-47US0dTgcxDqvKv1cnfqfIpW4kI=", - "dependencies": { - "esformatter-parser": "^1.0", - "rocambole": ">=0.6.0 <2.0", - "rocambole-linebreak": "^1.0.2", - "rocambole-token": "^1.2.1" - } - }, - "node_modules/esformatter-spaced-lined-comment": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/esformatter-spaced-lined-comment/-/esformatter-spaced-lined-comment-2.0.1.tgz", - "integrity": "sha1-3F80B/k8KV4eVkRr00RWDaXm3Kw=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/esformatter/node_modules/debug": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", - "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=", - "engines": { - "node": "*" - } - }, - "node_modules/esformatter/node_modules/glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/esformatter/node_modules/strip-json-comments": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-0.1.3.tgz", - "integrity": "sha1-Fkxk43Coo8wAyeAbU55WmCPw7lQ=", - "bin": { - "strip-json-comments": "cli.js" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/esformatter/node_modules/supports-color": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.3.1.tgz", - "integrity": "sha1-FXWN8J2P87SswwdTn6vicJXhBC0=", - "bin": { - "supports-color": "cli.js" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-2.13.1.tgz", - "integrity": "sha1-5MyPoPAJ+4KaquI4VaKTYL4fbBE=", - "dependencies": { - "chalk": "^1.1.3", - "concat-stream": "^1.4.6", - "debug": "^2.1.1", - "doctrine": "^1.2.2", - "es6-map": "^0.1.3", - "escope": "^3.6.0", - "espree": "^3.1.6", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "file-entry-cache": "^1.1.1", - "glob": "^7.0.3", - "globals": "^9.2.0", - "ignore": "^3.1.2", - "imurmurhash": "^0.1.4", - "inquirer": "^0.12.0", - "is-my-json-valid": "^2.10.0", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.5.1", - "json-stable-stringify": "^1.0.0", - "levn": "^0.3.0", - "lodash": "^4.0.0", - "mkdirp": "^0.5.0", - "optionator": "^0.8.1", - "path-is-absolute": "^1.0.0", - "path-is-inside": "^1.0.1", - "pluralize": "^1.2.1", - "progress": "^1.1.8", - "require-uncached": "^1.0.2", - "shelljs": "^0.6.0", - "strip-json-comments": "~1.0.1", - "table": "^3.7.8", - "text-table": "~0.2.0", - "user-home": "^2.0.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/eslint-config-semistandard": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/eslint-config-semistandard/-/eslint-config-semistandard-6.0.2.tgz", - "integrity": "sha1-JXuWM30qjy6yDiDl8OgjUBShkNQ=", - "peerDependencies": { - "eslint-config-standard": "^5.3.1" - } - }, - "node_modules/eslint-config-standard": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-5.3.1.tgz", - "integrity": "sha1-WRyWkVF0QTL1YdO5FagS6kE/5JA=", - "peerDependencies": { - "eslint": "^2.0.0-rc.0", - "eslint-plugin-promise": "^1.0.8", - "eslint-plugin-standard": "^1.3.1" - } - }, - "node_modules/eslint-config-standard-jsx": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-1.2.0.tgz", - "integrity": "sha1-yp/Vk2EOavVaKtP0MACS0ejA3vU=", - "peerDependencies": { - "eslint": "^2.0.0-rc.0", - "eslint-plugin-react": ">=2.7.1" - } - }, - "node_modules/eslint-plugin-promise": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-1.3.2.tgz", - "integrity": "sha1-/OMy1vX/UjIApTdwSGPsPCQiunw=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-5.2.2.tgz", - "integrity": "sha1-fbBo4fVIf2hx5N7vNqOBwwPqwWE=", - "dependencies": { - "doctrine": "^1.2.2", - "jsx-ast-utils": "^1.2.1" - } - }, - "node_modules/eslint-plugin-standard": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-1.3.3.tgz", - "integrity": "sha1-owhUUVI0MedvQJxwy4+U4yvw7H8=" - }, - "node_modules/eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dependencies": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint/node_modules/json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dependencies": { - "jsonify": "~0.0.0" - } - }, - "node_modules/eslint/node_modules/shelljs": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.6.1.tgz", - "integrity": "sha1-7GIRvtGSBEIIj+D3Cyg3Iy7SyKg=", - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/espree": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", - "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", - "dependencies": { - "acorn": "^5.5.0", - "acorn-jsx": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esprima-fb": { - "version": "15001.1.0-dev-harmony-fb", - "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1.0-dev-harmony-fb.tgz", - "integrity": "sha1-MKlHMDxrjV6VW+4rmbHSMyBqaQE=", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dependencies": { - "estraverse": "^4.1.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse-fb": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/estraverse-fb/-/estraverse-fb-1.3.2.tgz", - "integrity": "sha1-0yOky15awzHOoDNBOpJT4WQ+B8Q=", - "peerDependencies": { - "estraverse": "*" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz", - "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==" - }, - "node_modules/events": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/events/-/events-1.0.2.tgz", - "integrity": "sha1-dYSdz+k9EPsFfDAFWv29UdBqjiQ=", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/eventsource": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", - "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", - "dependencies": { - "original": "^1.0.0" - }, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/execa/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-braces": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", - "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", - "dependencies": { - "array-slice": "^0.2.3", - "array-unique": "^0.2.1", - "braces": "^0.1.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-braces/node_modules/array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-braces/node_modules/braces": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", - "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", - "dependencies": { - "expand-range": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-braces/node_modules/expand-range": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", - "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", - "dependencies": { - "is-number": "^0.1.1", - "repeat-string": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-braces/node_modules/is-number": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", - "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-braces/node_modules/repeat-string": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", - "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dependencies": { - "fill-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-range/node_modules/fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "dependencies": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-range/node_modules/is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-range/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-range/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-tilde": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", - "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=", - "dependencies": { - "os-homedir": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "dependencies": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "node_modules/express/node_modules/cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/ext": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.2.0.tgz", - "integrity": "sha512-0ccUQK/9e3NreLFg6K6np8aPyRgwycx+oFGtfx1dSp7Wj00Ozw9r05FgBRlzjf2XBM7LAzwgLyDscRrtSU91hA==", - "dependencies": { - "type": "^2.0.0" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz", - "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==" - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extend-shallow/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - }, - "node_modules/fast-text-encoding": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz", - "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==" - }, - "node_modules/fastparse": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", - "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==" - }, - "node_modules/faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" - }, - "node_modules/figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dependencies": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/file-entry-cache": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-1.3.1.tgz", - "integrity": "sha1-RMYepgeuS+nBQC9B9EJwy/4zT/g=", - "dependencies": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-node-modules": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/find-node-modules/-/find-node-modules-1.0.4.tgz", - "integrity": "sha1-tt6zzMtpnIcDdne87eLF9YYrJVA=", - "dependencies": { - "findup-sync": "0.4.2", - "merge": "^1.2.0" - } - }, - "node_modules/find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" - }, - "node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/findit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findit/-/findit-2.0.0.tgz", - "integrity": "sha1-ZQnwEmr0wXhVHPqZOU4DLhOk1W4=" - }, - "node_modules/findup-sync": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.4.2.tgz", - "integrity": "sha1-qBF9D3MST1pFRoOVef5S1xKfteU=", - "dependencies": { - "detect-file": "^0.1.0", - "is-glob": "^2.0.1", - "micromatch": "^2.3.7", - "resolve-dir": "^0.1.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/findup-sync/node_modules/arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dependencies": { - "arr-flatten": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dependencies": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dependencies": { - "is-posix-bracket": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dependencies": { - "is-extglob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dependencies": { - "is-extglob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dependencies": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/firebase": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/firebase/-/firebase-7.19.0.tgz", - "integrity": "sha512-gS0nFagMfDLEucgcMD/tCfpLH+crnTurpyMsh6JEvith7GA8cRA4S3T3300xPL6dSZliI7EiGsCNBXBil6sAUw==", - "dependencies": { - "@firebase/analytics": "0.4.2", - "@firebase/app": "0.6.10", - "@firebase/app-types": "0.6.1", - "@firebase/auth": "0.14.9", - "@firebase/database": "0.6.11", - "@firebase/firestore": "1.16.5", - "@firebase/functions": "0.4.50", - "@firebase/installations": "0.4.16", - "@firebase/messaging": "0.7.0", - "@firebase/performance": "0.4.0", - "@firebase/polyfill": "0.3.36", - "@firebase/remote-config": "0.1.27", - "@firebase/storage": "0.3.42", - "@firebase/util": "0.3.1" - }, - "engines": { - "node": "^8.13.0 || >=10.10.0" - } - }, - "node_modules/flat-cache": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", - "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", - "dependencies": { - "circular-json": "^0.3.1", - "graceful-fs": "^4.1.2", - "rimraf": "~2.6.2", - "write": "^0.2.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/flatten": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", - "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==", - "deprecated": "flatten is deprecated in favor of utility frameworks such as lodash." - }, - "node_modules/flatten-vertex-data": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/flatten-vertex-data/-/flatten-vertex-data-1.0.2.tgz", - "integrity": "sha512-BvCBFK2NZqerFTdMDgqfHBwxYWnxeCkwONsw6PvBMcUXqo8U/KDWwmXhqx1x2kLIg7DqIsJfOaJFOmlua3Lxuw==", - "dependencies": { - "dtype": "^2.0.0" - } - }, - "node_modules/flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "node_modules/follow-redirects": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.9.0.tgz", - "integrity": "sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A==", - "dependencies": { - "debug": "^3.0.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/follow-redirects/node_modules/debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/follow-redirects/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dependencies": { - "for-in": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" - }, - "node_modules/form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/formatio": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.1.1.tgz", - "integrity": "sha512-cPh7is6k3d8tIUh+pnXXuAbD/uhSXGgqLPw0UrYpv5lfdJ+MMMSjx40JNpqP7Top9Nt25YomWEiRmkHbOvkCaA==", - "deprecated": "This package is unmaintained. Use @sinonjs/formatio instead", - "dependencies": { - "samsam": "~1.1" - } - }, - "node_modules/formatio/node_modules/samsam": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.1.3.tgz", - "integrity": "sha512-t9rCPskf50hZ53eH8Z+cSWD4LfJBac+8vSSuzi1Y2HzygyXxtAl0BaR3hr6iI6A+nFQbkmJNC/brQLNEeVnrmg==", - "deprecated": "This package has been deprecated in favour of @sinonjs/samsam" - }, - "node_modules/formidable": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz", - "integrity": "sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg==", - "deprecated": "Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau" - }, - "node_modules/forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "node_modules/fs": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.2.tgz", - "integrity": "sha1-4fJE7zkzwbKmS9R5kTYGDQ9ZFPg=" - }, - "node_modules/fs-access": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", - "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", - "dependencies": { - "null-check": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fs-exists-sync": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", - "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==" - }, - "node_modules/fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", - "dependencies": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "node_modules/fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", - "bundleDependencies": [ - "node-pre-gyp" - ], - "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/fsevents/node_modules/abbrev": { - "version": "1.1.1", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/ansi-regex": { - "version": "2.1.1", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "inBundle": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fsevents/node_modules/aproba": { - "version": "1.2.0", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/are-we-there-yet": { - "version": "1.1.5", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "inBundle": true, - "optional": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "node_modules/fsevents/node_modules/balanced-match": { - "version": "1.0.0", - "integrity": "sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/brace-expansion": { - "version": "1.1.11", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "inBundle": true, - "optional": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/fsevents/node_modules/chownr": { - "version": "1.1.1", - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/code-point-at": { - "version": "1.1.0", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", - "inBundle": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fsevents/node_modules/concat-map": { - "version": "0.0.1", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/console-control-strings": { - "version": "1.1.0", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/core-util-is": { - "version": "1.0.2", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/debug": { - "version": "4.1.1", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "inBundle": true, - "optional": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/fsevents/node_modules/deep-extend": { - "version": "0.6.0", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "inBundle": true, - "optional": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/fsevents/node_modules/delegates": { - "version": "1.0.0", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/detect-libc": { - "version": "1.0.3", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "inBundle": true, - "optional": true, - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/fsevents/node_modules/fs-minipass": { - "version": "1.2.5", - "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", - "inBundle": true, - "optional": true, - "dependencies": { - "minipass": "^2.2.1" - } - }, - "node_modules/fsevents/node_modules/fs.realpath": { - "version": "1.0.0", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/gauge": { - "version": "2.7.4", - "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", - "inBundle": true, - "optional": true, - "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "node_modules/fsevents/node_modules/glob": { - "version": "7.1.3", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "inBundle": true, - "optional": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/fsevents/node_modules/has-unicode": { - "version": "2.0.1", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/iconv-lite": { - "version": "0.4.24", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "inBundle": true, - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fsevents/node_modules/ignore-walk": { - "version": "3.0.1", - "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", - "inBundle": true, - "optional": true, - "dependencies": { - "minimatch": "^3.0.4" - } - }, - "node_modules/fsevents/node_modules/inflight": { - "version": "1.0.6", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "inBundle": true, - "optional": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/fsevents/node_modules/inherits": { - "version": "2.0.3", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/ini": { - "version": "1.3.5", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "deprecated": "Please update to ini >=1.3.6 to avoid a prototype pollution issue", - "inBundle": true, - "optional": true, - "engines": { - "node": "*" - } - }, - "node_modules/fsevents/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "inBundle": true, - "optional": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fsevents/node_modules/isarray": { - "version": "1.0.0", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/minimatch": { - "version": "3.0.4", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "inBundle": true, - "optional": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/fsevents/node_modules/minimist": { - "version": "0.0.8", - "integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/minipass": { - "version": "2.3.5", - "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", - "inBundle": true, - "optional": true, - "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "node_modules/fsevents/node_modules/minizlib": { - "version": "1.2.1", - "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", - "inBundle": true, - "optional": true, - "dependencies": { - "minipass": "^2.2.1" - } - }, - "node_modules/fsevents/node_modules/mkdirp": { - "version": "0.5.1", - "integrity": "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", - "inBundle": true, - "optional": true, - "dependencies": { - "minimist": "0.0.8" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/fsevents/node_modules/ms": { - "version": "2.1.1", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/needle": { - "version": "2.3.0", - "integrity": "sha512-QBZu7aAFR0522EyaXZM0FZ9GLpq6lvQ3uq8gteiDUp7wKdy0lSd2hPlgFwVuW1CBkfEs9PfDQsQzZghLs/psdg==", - "inBundle": true, - "optional": true, - "dependencies": { - "debug": "^4.1.0", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" - }, - "engines": { - "node": ">= 4.4.x" - } - }, - "node_modules/fsevents/node_modules/node-pre-gyp": { - "version": "0.12.0", - "integrity": "sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==", - "deprecated": "Please upgrade to @mapbox/node-pre-gyp: the non-scoped node-pre-gyp package is deprecated and only the @mapbox scoped package will recieve updates in the future", - "inBundle": true, - "optional": true, - "dependencies": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - } - }, - "node_modules/fsevents/node_modules/nopt": { - "version": "4.0.1", - "integrity": "sha512-+5XZFpQZEY0cg5JaxLwGxDlKNKYxuXwGt8/Oi3UXm5/4ymrJve9d2CURituxv3rSrVCGZj4m1U1JlHTdcKt2Ng==", - "inBundle": true, - "optional": true, - "dependencies": { - "abbrev": "1", - "osenv": "^0.1.4" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/fsevents/node_modules/npm-bundled": { - "version": "1.0.6", - "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/npm-packlist": { - "version": "1.4.1", - "integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==", - "inBundle": true, - "optional": true, - "dependencies": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "node_modules/fsevents/node_modules/npmlog": { - "version": "4.1.2", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "inBundle": true, - "optional": true, - "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "node_modules/fsevents/node_modules/number-is-nan": { - "version": "1.0.1", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", - "inBundle": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fsevents/node_modules/object-assign": { - "version": "4.1.1", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "inBundle": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fsevents/node_modules/once": { - "version": "1.4.0", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "inBundle": true, - "optional": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/fsevents/node_modules/os-homedir": { - "version": "1.0.2", - "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", - "inBundle": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fsevents/node_modules/os-tmpdir": { - "version": "1.0.2", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "inBundle": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fsevents/node_modules/osenv": { - "version": "0.1.5", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "inBundle": true, - "optional": true, - "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "node_modules/fsevents/node_modules/path-is-absolute": { - "version": "1.0.1", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "inBundle": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fsevents/node_modules/process-nextick-args": { - "version": "2.0.0", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/rc": { - "version": "1.2.8", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "inBundle": true, - "optional": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/fsevents/node_modules/rc/node_modules/minimist": { - "version": "1.2.0", - "integrity": "sha512-7Wl+Jz+IGWuSdgsQEJ4JunV0si/iMhg42MnQQG6h1R6TNeVenp4U9x5CC5v/gYqz/fENLQITAWXidNtVL0NNbw==", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/readable-stream": { - "version": "2.3.6", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "inBundle": true, - "optional": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/fsevents/node_modules/rimraf": { - "version": "2.6.3", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "inBundle": true, - "optional": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/fsevents/node_modules/safe-buffer": { - "version": "5.1.2", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/safer-buffer": { - "version": "2.1.2", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/sax": { - "version": "1.2.4", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/semver": { - "version": "5.7.0", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "inBundle": true, - "optional": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/fsevents/node_modules/set-blocking": { - "version": "2.0.0", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/signal-exit": { - "version": "3.0.2", - "integrity": "sha512-meQNNykwecVxdu1RlYMKpQx4+wefIYpmxi6gexo/KAbwquJrBUrBmKYJrE8KFkVQAAVWEnwNdu21PgrD77J3xA==", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/string_decoder": { - "version": "1.1.1", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "inBundle": true, - "optional": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/fsevents/node_modules/string-width": { - "version": "1.0.2", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "inBundle": true, - "optional": true, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fsevents/node_modules/strip-ansi": { - "version": "3.0.1", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "inBundle": true, - "optional": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fsevents/node_modules/strip-json-comments": { - "version": "2.0.1", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "inBundle": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fsevents/node_modules/tar": { - "version": "4.4.8", - "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", - "inBundle": true, - "optional": true, - "dependencies": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - }, - "engines": { - "node": ">=4.5" - } - }, - "node_modules/fsevents/node_modules/util-deprecate": { - "version": "1.0.2", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/wide-align": { - "version": "1.1.3", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "inBundle": true, - "optional": true, - "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/fsevents/node_modules/wrappy": { - "version": "1.0.2", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "inBundle": true, - "optional": true - }, - "node_modules/fsevents/node_modules/yallist": { - "version": "3.0.3", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", - "inBundle": true, - "optional": true - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/gaxios": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-3.1.0.tgz", - "integrity": "sha512-DDTn3KXVJJigtz+g0J3vhcfbDbKtAroSTxauWsdnP57sM5KZ3d2c/3D9RKFJ86s43hfw6WULg6TXYw/AYiBlpA==", - "dependencies": { - "abort-controller": "^3.0.0", - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.3.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/gaxios/node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/gcp-metadata": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.1.4.tgz", - "integrity": "sha512-5J/GIH0yWt/56R3dNaNWPGQ/zXsZOddYECfJaqxFWgrZ9HC2Kvc5vl9upOgUUHKzURjAVf2N+f6tEJiojqXUuA==", - "dependencies": { - "gaxios": "^3.0.0", - "json-bigint": "^1.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/generate-function": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", - "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", - "dependencies": { - "is-property": "^1.0.2" - } - }, - "node_modules/generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dependencies": { - "is-property": "^1.0.0" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gh-pages": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-0.11.0.tgz", - "integrity": "sha1-kzE8bcv8dNQmvIminr/2QgrMPBs=", - "dependencies": { - "async": "1.5.2", - "commander": "2.9.0", - "globby": "^4.0.0", - "graceful-fs": "4.1.2", - "q": "1.4.1", - "q-io": "1.13.2", - "wrench": "1.5.8" - }, - "bin": { - "gh-pages": "bin/gh-pages" - } - }, - "node_modules/gh-pages/node_modules/commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dependencies": { - "graceful-readlink": ">= 1.0.0" - }, - "engines": { - "node": ">= 0.6.x" - } - }, - "node_modules/gh-pages/node_modules/graceful-fs": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.2.tgz", - "integrity": "sha1-/iI5t1dJcuZ+QfgIgj+b+kqZHjc=", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/gh-pages/node_modules/q": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", - "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/ghpages": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/ghpages/-/ghpages-0.0.10.tgz", - "integrity": "sha1-zpZbwLGyfPI+atM7kuwaL42S4LQ=", - "dev": true, - "dependencies": { - "gh-pages": "^0.11.0", - "gitconfiglocal": "^1.0.0", - "meow": "^3.6.0", - "object-assign": "^4.0.1", - "opn": "^3.0.3", - "parse-github-url": "^0.2.1" - }, - "bin": { - "ghpages": "cli.js" - } - }, - "node_modules/gitconfiglocal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", - "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=", - "dependencies": { - "ini": "^1.3.2" - } - }, - "node_modules/gl-preserve-state": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gl-preserve-state/-/gl-preserve-state-1.0.0.tgz", - "integrity": "sha512-zQZ25l3haD4hvgJZ6C9+s0ebdkW9y+7U2qxvGu1uWOJh8a4RU+jURIKEQhf8elIlFpMH6CrAY2tH0mYrRjet3Q==" - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dependencies": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-base/node_modules/glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dependencies": { - "is-glob": "^2.0.0" - } - }, - "node_modules/glob-base/node_modules/is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-base/node_modules/is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dependencies": { - "is-extglob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", - "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", - "dependencies": { - "min-document": "^2.19.0", - "process": "~0.5.1" - } - }, - "node_modules/global-modules": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", - "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=", - "dependencies": { - "global-prefix": "^0.1.4", - "is-windows": "^0.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-modules/node_modules/is-windows": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", - "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-prefix": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", - "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=", - "dependencies": { - "homedir-polyfill": "^1.0.0", - "ini": "^1.3.4", - "is-windows": "^0.2.0", - "which": "^1.2.12" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-prefix/node_modules/is-windows": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", - "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-4.1.0.tgz", - "integrity": "sha1-CA9UVJ7BuCpsYOYx/ILhIR2+lfg=", - "dependencies": { - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "glob": "^6.0.1", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/globby/node_modules/glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/globby/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/google-auth-library": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-6.0.6.tgz", - "integrity": "sha512-fWYdRdg55HSJoRq9k568jJA1lrhg9i2xgfhVIMJbskUmbDpJGHsbv9l41DGhCDXM21F9Kn4kUwdysgxSYBYJUw==", - "dependencies": { - "arrify": "^2.0.0", - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "fast-text-encoding": "^1.0.0", - "gaxios": "^3.0.0", - "gcp-metadata": "^4.1.0", - "gtoken": "^5.0.0", - "jws": "^4.0.0", - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/google-auth-library/node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "engines": { - "node": ">=8" - } - }, - "node_modules/google-auth-library/node_modules/base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" - }, - "node_modules/google-auth-library/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/google-auth-library/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/google-p12-pem": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.0.2.tgz", - "integrity": "sha512-tbjzndQvSIHGBLzHnhDs3cL4RBjLbLXc2pYvGH+imGVu5b4RMAttUTdnmW2UH0t11QeBTXZ7wlXPS7hrypO/tg==", - "dependencies": { - "node-forge": "^0.9.0" - }, - "bin": { - "gp12-pem": "build/src/bin/gp12-pem.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" - }, - "node_modules/graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" - }, - "node_modules/growl": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", - "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=" - }, - "node_modules/gtoken": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.0.3.tgz", - "integrity": "sha512-Nyd1wZCMRc2dj/mAD0LlfQLcAO06uKdpKJXvK85SGrF5+5+Bpfil9u/2aw35ltvEHjvl0h5FMKN5knEU+9JrOg==", - "dependencies": { - "gaxios": "^3.0.0", - "google-p12-pem": "^3.0.0", - "jws": "^4.0.0", - "mime": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/gtoken/node_modules/mime": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", - "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/handle-thing": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", - "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==" - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-binary": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", - "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/has-binary/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "node_modules/has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/hat": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/hat/-/hat-0.0.3.tgz", - "integrity": "sha1-uwFKnmSzeIrtgAWRdBPU/z1QLYo=", - "engines": { - "node": "*" - } - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true, - "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dependencies": { - "parse-passwd": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", - "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==" - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/html-comment-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==" - }, - "node_modules/html-entities": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", - "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", - "engines": [ - "node >= 0.4.0" - ] - }, - "node_modules/html-require-loader": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/html-require-loader/-/html-require-loader-1.0.1.tgz", - "integrity": "sha512-shPrGPYlRuIKFU7XQu6CXy/MKCAIfzHLKhBSSRMkeu7Y3iFWH5qlkzcIC30ADw+g18kGFk6uI4OtU7n/x2BvcQ==", - "dependencies": { - "loader-utils": "^1.2.3" - } - }, - "node_modules/htmlescape": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", - "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/http-browserify": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/http-browserify/-/http-browserify-1.7.0.tgz", - "integrity": "sha1-M3la3nLfiKz7/TZ3PO/tp2RzWyA=", - "dependencies": { - "Base64": "~0.2.0", - "inherits": "~2.0.1" - } - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" - }, - "node_modules/http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http-errors/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "node_modules/http-parser-js": { - "version": "0.4.10", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", - "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=" - }, - "node_modules/http-proxy": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz", - "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", - "dependencies": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/https-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", - "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=" - }, - "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-replace-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=" - }, - "node_modules/icss-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", - "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", - "dependencies": { - "postcss": "^6.0.1" - } - }, - "node_modules/idb": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/idb/-/idb-3.0.2.tgz", - "integrity": "sha512-+FLa/0sTXqyux0o6C+i2lOR0VoS60LU/jzUo5xjfY6+7sEEgy4Gz1O7yFBXvjd7N0NyIGWIRg8DcQSLEG+VSPw==" - }, - "node_modules/ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, - "node_modules/iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==" - }, - "node_modules/ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" - }, - "node_modules/import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dependencies": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dependencies": { - "repeating": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" - }, - "node_modules/indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" - }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "deprecated": "Please update to ini >=1.3.6 to avoid a prototype pollution issue", - "engines": { - "node": "*" - } - }, - "node_modules/inline-source-map": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.5.0.tgz", - "integrity": "sha1-Skxd2OT7Xps82mDIIt+tyu5m4K8=", - "dependencies": { - "source-map": "~0.4.0" - } - }, - "node_modules/inline-source-map/node_modules/source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dependencies": { - "amdefine": ">=0.0.4" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/inquirer": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", - "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", - "dependencies": { - "ansi-escapes": "^1.1.0", - "ansi-regex": "^2.0.0", - "chalk": "^1.0.0", - "cli-cursor": "^1.0.1", - "cli-width": "^2.0.0", - "figures": "^1.3.5", - "lodash": "^4.3.0", - "readline2": "^1.0.1", - "run-async": "^0.1.0", - "rx-lite": "^3.1.2", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.0", - "through": "^2.3.6" - } - }, - "node_modules/inquirer/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/inquirer/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/inquirer/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/insert-module-globals": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-6.6.3.tgz", - "integrity": "sha1-IGOOKaMPntHKLjqCX7wsulJG3fw=", - "dependencies": { - "combine-source-map": "~0.6.1", - "concat-stream": "~1.4.1", - "is-buffer": "^1.1.0", - "JSONStream": "^1.0.3", - "lexical-scope": "^1.2.0", - "process": "~0.11.0", - "through2": "^1.0.0", - "xtend": "^4.0.0" - }, - "bin": { - "insert-module-globals": "bin/cmd.js" - } - }, - "node_modules/insert-module-globals/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "node_modules/insert-module-globals/node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/insert-module-globals/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/insert-module-globals/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "node_modules/insert-module-globals/node_modules/through2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-1.1.1.tgz", - "integrity": "sha1-CEfLxESfNAVXTb3M2buEG4OsNUU=", - "dependencies": { - "readable-stream": ">=1.1.13-1 <1.2.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - }, - "node_modules/internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "dependencies": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/interpret": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" - }, - "node_modules/ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "engines": { - "node": ">=4" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", - "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, - "node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "node_modules/is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dependencies": { - "is-primitive": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-function": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", - "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=" - }, - "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-my-ip-valid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", - "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==" - }, - "node_modules/is-my-json-valid": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.0.tgz", - "integrity": "sha512-XTHBZSIIxNsIsZXg7XB5l8z/OBFosl1Wao4tXLpeC7eKU4Vm/kdop2azkPqULwnfGQjmeDIyey9g7afMMtdWAA==", - "dependencies": { - "generate-function": "^2.0.0", - "generate-object-property": "^1.1.0", - "is-my-ip-valid": "^1.0.0", - "jsonpointer": "^4.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", - "dependencies": { - "is-path-inside": "^2.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", - "dependencies": { - "path-is-inside": "^1.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" - }, - "node_modules/is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dependencies": { - "has": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" - }, - "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-svg": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", - "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", - "dependencies": { - "html-comment-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dependencies": { - "has-symbols": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "node_modules/isbinaryfile": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", - "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", - "dependencies": { - "buffer-alloc": "^1.2.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "dependencies": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } - }, - "node_modules/isomorphic-fetch/node_modules/node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "dependencies": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, - "node_modules/jade": { - "version": "0.26.3", - "resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz", - "integrity": "sha1-jxDXl32NefL2/4YqgbBRPMslaGw=", - "deprecated": "Jade has been renamed to pug, please install the latest version of pug instead of jade", - "dependencies": { - "commander": "0.6.1", - "mkdirp": "0.3.0" - }, - "bin": { - "jade": "bin/jade" - } - }, - "node_modules/jade/node_modules/commander": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz", - "integrity": "sha1-+mihT2qUXVTbvlDYzbMyDp47GgY=", - "engines": { - "node": ">= 0.4.x" - } - }, - "node_modules/jade/node_modules/mkdirp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", - "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", - "engines": { - "node": "*" - } - }, - "node_modules/jest-worker": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", - "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", - "dependencies": { - "merge-stream": "^2.0.0", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/js-base64": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.2.tgz", - "integrity": "sha512-Vg8czh0Q7sFBSUMWWArX/miJeBWYBPpdU/3M/DKSaekLMqrqVPaedp+5mZhie/r0lgrcaYBfwXatEew6gwgiQQ==" - }, - "node_modules/js-beautify": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.6.4.tgz", - "integrity": "sha1-qa95aZdCrJobb93B/bx4vE1RX8M=", - "dependencies": { - "config-chain": "~1.1.5", - "editorconfig": "^0.13.2", - "mkdirp": "~0.5.0", - "nopt": "~3.0.1" - }, - "bin": { - "css-beautify": "js/bin/css-beautify.js", - "html-beautify": "js/bin/html-beautify.js", - "js-beautify": "js/bin/js-beautify.js" - } - }, - "node_modules/js-string-escape": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", - "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/js-yaml/node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-bigint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "dependencies": { - "bignumber.js": "^9.0.0" - } - }, - "node_modules/json-loader": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", - "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==" - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json-stable-stringify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", - "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", - "dependencies": { - "jsonify": "~0.0.0" - } - }, - "node_modules/json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", - "deprecated": "Please use the native JSON object instead of JSON 3" - }, - "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", - "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "engines": [ - "node >= 0.2.0" - ] - }, - "node_modules/jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/jstransform": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/jstransform/-/jstransform-11.0.3.tgz", - "integrity": "sha1-CaeJk+CuTU70SH9hVakfYZDLQiM=", - "dependencies": { - "base62": "^1.1.0", - "commoner": "^0.10.1", - "esprima-fb": "^15001.1.0-dev-harmony-fb", - "object-assign": "^2.0.0", - "source-map": "^0.4.2" - }, - "bin": { - "jstransform": "bin/jstransform" - }, - "engines": { - "node": ">=0.8.8" - } - }, - "node_modules/jstransform/node_modules/object-assign": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", - "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jstransform/node_modules/source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dependencies": { - "amdefine": ">=0.0.4" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/jsx-ast-utils": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz", - "integrity": "sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE=", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/just-extend": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", - "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", - "peer": true - }, - "node_modules/jwa": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", - "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", - "dependencies": { - "jwa": "^2.0.0", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/karma": { - "version": "0.13.22", - "resolved": "https://registry.npmjs.org/karma/-/karma-0.13.22.tgz", - "integrity": "sha1-B3ULG9Bj1+fnuRvNLmNU2PKqh0Q=", - "dependencies": { - "batch": "^0.5.3", - "bluebird": "^2.9.27", - "body-parser": "^1.12.4", - "chokidar": "^1.4.1", - "colors": "^1.1.0", - "connect": "^3.3.5", - "core-js": "^2.1.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.0", - "expand-braces": "^0.1.1", - "glob": "^7.0.0", - "graceful-fs": "^4.1.2", - "http-proxy": "^1.13.0", - "isbinaryfile": "^3.0.0", - "lodash": "^3.8.0", - "log4js": "^0.6.31", - "mime": "^1.3.4", - "minimatch": "^3.0.0", - "optimist": "^0.6.1", - "rimraf": "^2.3.3", - "socket.io": "^1.4.5", - "source-map": "^0.5.3", - "useragent": "^2.1.6" - }, - "bin": { - "karma": "bin/karma" - }, - "engines": { - "node": "0.10 || 0.12 || 4 || 5" - } - }, - "node_modules/karma-browserify": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/karma-browserify/-/karma-browserify-4.4.2.tgz", - "integrity": "sha1-QS7h/GMy7SSJ2Ax5l8qjzms61GE=", - "dependencies": { - "browserify": "10.2.3", - "convert-source-map": "~0.3.3", - "hat": "0.0.3", - "js-string-escape": "^1.0.0", - "lodash": "^3.10.1", - "minimatch": "^1.0.0", - "os-shim": "~0.1.2", - "watchify": "3.2.1" - }, - "peerDependencies": { - "karma": ">=0.10" - } - }, - "node_modules/karma-browserify/node_modules/convert-source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", - "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=" - }, - "node_modules/karma-browserify/node_modules/lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" - }, - "node_modules/karma-browserify/node_modules/lru-cache": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=" - }, - "node_modules/karma-browserify/node_modules/minimatch": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-1.0.0.tgz", - "integrity": "sha1-4N0hILSeG3JM6NcUxSCCKpQ4V20=", - "deprecated": "Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue", - "dependencies": { - "lru-cache": "2", - "sigmund": "~1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/karma-chai-shallow-deep-equal": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/karma-chai-shallow-deep-equal/-/karma-chai-shallow-deep-equal-0.0.4.tgz", - "integrity": "sha1-GmdPbPaOBZ+592OmUMK9Q4LaqJg=", - "engines": { - "node": ">= 0.10.0" - }, - "peerDependencies": { - "chai": "*", - "chai-shallow-deep-equal": "*", - "karma": ">=0.10" - } - }, - "node_modules/karma-chrome-launcher": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", - "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", - "dependencies": { - "fs-access": "^1.0.0", - "which": "^1.2.1" - } - }, - "node_modules/karma-env-preprocessor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/karma-env-preprocessor/-/karma-env-preprocessor-0.1.1.tgz", - "integrity": "sha1-u+jIfVnADtt2BwvTwxtLOdXcfhU=" - }, - "node_modules/karma-firefox-launcher": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-0.1.7.tgz", - "integrity": "sha1-wF3YZTNpHmLzGVJZUJjovTV9OfM=" - }, - "node_modules/karma-mocha": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-0.2.2.tgz", - "integrity": "sha1-OI7ZF9oV3LGW0bkVwZNO+AMZP44=", - "peerDependencies": { - "mocha": "*" - } - }, - "node_modules/karma-mocha-reporter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/karma-mocha-reporter/-/karma-mocha-reporter-1.3.0.tgz", - "integrity": "sha1-r2pGwIqcVcf9OUw6WqJhetoVhKU=", - "dependencies": { - "chalk": "1.1.1", - "karma": ">=0.13" - } - }, - "node_modules/karma-mocha-reporter/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/karma-mocha-reporter/node_modules/chalk": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.1.tgz", - "integrity": "sha1-UJr7ZwZudJn36zU1x3RFdyri0Bk=", - "dependencies": { - "ansi-styles": "^2.1.0", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/karma-mocha-reporter/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/karma-sinon-chai": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/karma-sinon-chai/-/karma-sinon-chai-1.3.4.tgz", - "integrity": "sha512-Oatu8tdkfWaSveM809euI6KGcNJRdoXFilz9ozSf+vPwrM73kncu54nsfkLcMqR/iht3PXASAGK9La5oU2xDKQ==", - "dependencies": { - "lolex": "^1.6.0" - }, - "peerDependencies": { - "chai": ">=3.5.0 <5", - "sinon": ">=2.1.0 <5", - "sinon-chai": ">=2.9.0 <4" - } - }, - "node_modules/karma/node_modules/anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "dependencies": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" - } - }, - "node_modules/karma/node_modules/arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dependencies": { - "arr-flatten": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/karma/node_modules/array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/karma/node_modules/braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dependencies": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/karma/node_modules/chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", - "dependencies": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" - }, - "optionalDependencies": { - "fsevents": "^1.0.0" - } - }, - "node_modules/karma/node_modules/expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dependencies": { - "is-posix-bracket": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/karma/node_modules/extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dependencies": { - "is-extglob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/karma/node_modules/glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dependencies": { - "is-glob": "^2.0.0" - } - }, - "node_modules/karma/node_modules/is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/karma/node_modules/is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dependencies": { - "is-extglob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/karma/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/karma/node_modules/lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" - }, - "node_modules/karma/node_modules/micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dependencies": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/karma/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" - }, - "node_modules/kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/labeled-stream-splicer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-1.0.2.tgz", - "integrity": "sha1-RhUzFTd4SYHo/SZOHzpDTE4N3WU=", - "dependencies": { - "inherits": "^2.0.1", - "isarray": "~0.0.1", - "stream-splicer": "^1.1.0" - } - }, - "node_modules/labeled-stream-splicer/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "node_modules/layout-bmfont-text": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/layout-bmfont-text/-/layout-bmfont-text-1.3.4.tgz", - "integrity": "sha1-8g8sVGR3T0jabOipl/vObUaUW4E=", - "dependencies": { - "as-number": "^1.0.0", - "word-wrapper": "^1.0.7", - "xtend": "^4.0.0" - } - }, - "node_modules/lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dependencies": { - "invert-kv": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lexical-scope": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz", - "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=", - "dependencies": { - "astw": "^2.0.0" - } - }, - "node_modules/load-bmfont": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.0.tgz", - "integrity": "sha512-kT63aTAlNhZARowaNYcY29Fn/QYkc52M3l6V1ifRcPewg2lvUZDAj7R6dXjOL9D0sict76op3T5+odumDSF81g==", - "dependencies": { - "buffer-equal": "0.0.1", - "mime": "^1.3.4", - "parse-bmfont-ascii": "^1.0.3", - "parse-bmfont-binary": "^1.0.5", - "parse-bmfont-xml": "^1.1.4", - "phin": "^2.9.1", - "xhr": "^2.0.1", - "xtend": "^4.0.0" - } - }, - "node_modules/load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/load-json-file/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/load-script": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/load-script/-/load-script-1.0.0.tgz", - "integrity": "sha1-BJGTngvuVkPuSUp+PaPSuscMbKQ=" - }, - "node_modules/loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/loader-utils/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" - }, - "node_modules/lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", - "peer": true - }, - "node_modules/lodash.memoize": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", - "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" - }, - "node_modules/log4js": { - "version": "0.6.38", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", - "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", - "deprecated": "0.x is no longer supported. Please upgrade to 6.x or higher.", - "dependencies": { - "readable-stream": "~1.0.2", - "semver": "~4.3.3" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/log4js/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "node_modules/log4js/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/log4js/node_modules/semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/log4js/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "node_modules/loglevel": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.6.tgz", - "integrity": "sha512-Sgr5lbboAUBo3eXCSPL4/KoVz3ROKquOjcctxmHIt+vol2DrqTQe3SwkKKuYhEiWB5kYa13YyopJ69deJ1irzQ==", - "engines": { - "node": ">= 0.6.0" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/subscription/pkg/npm-loglevel?utm_medium=referral&utm_source=npm_fund" - } - }, - "node_modules/lolex": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.6.0.tgz", - "integrity": "sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY=" - }, - "node_modules/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "node_modules/longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dependencies": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dependencies": { - "p-defer": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-limit": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/map-limit/-/map-limit-0.0.1.tgz", - "integrity": "sha1-63lhAxwPDo0AG/LVb6toXViCLzg=", - "dependencies": { - "once": "~1.3.0" - } - }, - "node_modules/map-limit/node_modules/once": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", - "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/math-expression-evaluator": { - "version": "1.2.22", - "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.22.tgz", - "integrity": "sha512-L0j0tFVZBQQLeEjmWOvDLoRciIY8gQGWahvkztXUal8jH8R5Rlqo9GCvgqvXcy9LQhEWdQCVvzqAbxgYNt4blQ==" - }, - "node_modules/math-random": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", - "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==" - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "dependencies": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "node_modules/meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dependencies": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/merge": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", - "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==" - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.42.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", - "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.25", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", - "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", - "dependencies": { - "mime-db": "1.42.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimeparse": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/mimeparse/-/mimeparse-0.1.4.tgz", - "integrity": "sha1-2vsCdSNw/SJgk64xUsJxrwGsJUo=", - "engines": { - "node": "*" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "dependencies": { - "dom-walk": "^0.1.0" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dependencies": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mississippi/node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/mississippi/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", - "dependencies": { - "minimist": "0.0.8" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mkdirp/node_modules/minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "node_modules/mocha": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-2.5.3.tgz", - "integrity": "sha1-FhvlvetJZ3HrmzV0UFC2IrWu/Fg=", - "dependencies": { - "commander": "2.3.0", - "debug": "2.2.0", - "diff": "1.4.0", - "escape-string-regexp": "1.0.2", - "glob": "3.2.11", - "growl": "1.9.2", - "jade": "0.26.3", - "mkdirp": "0.5.1", - "supports-color": "1.2.0", - "to-iso-string": "0.0.2" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, - "engines": { - "node": ">= 0.8.x" - } - }, - "node_modules/mocha/node_modules/commander": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.3.0.tgz", - "integrity": "sha1-/UMOiJgy7DU7ms0d4hfBHLPu+HM=", - "engines": { - "node": ">= 0.6.x" - } - }, - "node_modules/mocha/node_modules/debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dependencies": { - "ms": "0.7.1" - } - }, - "node_modules/mocha/node_modules/escape-string-regexp": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz", - "integrity": "sha1-Tbwv5nTnGUnK8/smlc5/LcHZqNE=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/mocha/node_modules/glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", - "dependencies": { - "inherits": "2", - "minimatch": "0.3" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mocha/node_modules/lru-cache": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=" - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", - "deprecated": "Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue", - "dependencies": { - "lru-cache": "2", - "sigmund": "~1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.2.0.tgz", - "integrity": "sha1-/x7R5hFp0Gs88tWI4YixjYhH4X4=", - "bin": { - "supports-color": "cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/module-deps": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-3.9.1.tgz", - "integrity": "sha1-6nXK+RmQkNJbDVUStaysuW5/h/M=", - "dependencies": { - "browser-resolve": "^1.7.0", - "concat-stream": "~1.4.5", - "defined": "^1.0.0", - "detective": "^4.0.0", - "duplexer2": "0.0.2", - "inherits": "^2.0.1", - "JSONStream": "^1.0.3", - "parents": "^1.0.0", - "readable-stream": "^1.1.13", - "resolve": "^1.1.3", - "stream-combiner2": "~1.0.0", - "subarg": "^1.0.0", - "through2": "^1.0.0", - "xtend": "^4.0.0" - }, - "bin": { - "module-deps": "bin/cmd.js" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/module-deps/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "node_modules/module-deps/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/module-deps/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "node_modules/module-deps/node_modules/through2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-1.1.1.tgz", - "integrity": "sha1-CEfLxESfNAVXTb3M2buEG4OsNUU=", - "dependencies": { - "readable-stream": ">=1.1.13-1 <1.2.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - }, - "node_modules/mout": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/mout/-/mout-1.2.2.tgz", - "integrity": "sha512-w0OUxFEla6z3d7sVpMZGBCpQvYh8PHS1wZ6Wu9GNKHMpAHWJ0if0LsQZh3DlOqw55HlhJEOMLpFnwtxp99Y5GA==" - }, - "node_modules/move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", - "dependencies": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", - "dependencies": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" - }, - "node_modules/multiline": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/multiline/-/multiline-1.0.2.tgz", - "integrity": "sha1-abHyX/B00oKJBPJE3dBrfZbvbJM=", - "dependencies": { - "strip-indent": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mute-stream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", - "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=" - }, - "node_modules/nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", - "optional": true - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node_modules/negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node_modules/new-array": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/new-array/-/new-array-1.0.0.tgz", - "integrity": "sha1-XbxjnZYerH8an7wacUbsEvKST78=" - }, - "node_modules/next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" - }, - "node_modules/nice-color-palettes": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/nice-color-palettes/-/nice-color-palettes-1.0.1.tgz", - "integrity": "sha1-h16gHchu+uf1leBmqLJmDnIGBT4=", - "dependencies": { - "map-limit": "0.0.1", - "minimist": "^1.2.0", - "new-array": "^1.0.0", - "xhr-request": "^1.0.1" - }, - "bin": { - "nice-color-palettes": "bin/index.js" - } - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, - "node_modules/nise": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.5.3.tgz", - "integrity": "sha512-Ymbac/94xeIrMf59REBPOv0thr+CJVFMhrlAkW/gjCIE58BGQdCj0x7KRCb3yz+Ga2Rz3E9XXSvUyyxqqhjQAQ==", - "peer": true, - "dependencies": { - "@sinonjs/formatio": "^3.2.1", - "@sinonjs/text-encoding": "^0.7.1", - "just-extend": "^4.0.2", - "lolex": "^5.0.1", - "path-to-regexp": "^1.7.0" - } - }, - "node_modules/nise/node_modules/@sinonjs/formatio": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.2.tgz", - "integrity": "sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ==", - "peer": true, - "dependencies": { - "@sinonjs/commons": "^1", - "@sinonjs/samsam": "^3.1.0" - } - }, - "node_modules/nise/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "peer": true - }, - "node_modules/nise/node_modules/lolex": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz", - "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==", - "peer": true, - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/nise/node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "peer": true, - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/node-fetch": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", - "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==", - "engines": { - "node": "4.x || >=6.0.0" - } - }, - "node_modules/node-forge": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", - "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==", - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dependencies": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - } - }, - "node_modules/node-libs-browser/node_modules/base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" - }, - "node_modules/node-libs-browser/node_modules/browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dependencies": { - "pako": "~1.0.5" - } - }, - "node_modules/node-libs-browser/node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "node_modules/node-libs-browser/node_modules/constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" - }, - "node_modules/node-libs-browser/node_modules/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", - "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/node-libs-browser/node_modules/https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" - }, - "node_modules/node-libs-browser/node_modules/os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" - }, - "node_modules/node-libs-browser/node_modules/pako": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", - "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==" - }, - "node_modules/node-libs-browser/node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/node-libs-browser/node_modules/stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dependencies": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "node_modules/node-libs-browser/node_modules/timers-browserify": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", - "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", - "dependencies": { - "setimmediate": "^1.0.4" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/node-libs-browser/node_modules/tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" - }, - "node_modules/node-libs-browser/node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/node-libs-browser/node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - }, - "node_modules/node-libs-browser/node_modules/util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dependencies": { - "inherits": "2.0.3" - } - }, - "node_modules/node-libs-browser/node_modules/util/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "node_modules/node-libs-browser/node_modules/vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" - }, - "node_modules/node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" - }, - "node_modules/nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", - "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", - "dependencies": { - "object-assign": "^4.0.1", - "prepend-http": "^1.0.0", - "query-string": "^4.1.0", - "sort-keys": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/normalize-url/node_modules/query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", - "dependencies": { - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nosleep.js": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/nosleep.js/-/nosleep.js-0.7.0.tgz", - "integrity": "sha1-z9kZwlUjyg0PSmn7MwXAg62u4ok=" - }, - "node_modules/npm-path": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-1.1.0.tgz", - "integrity": "sha1-BHSuAEGcMn1UcBt88s0F3Ii+EUA=", - "dependencies": { - "which": "^1.2.4" - }, - "bin": { - "npm-path": "bin/npm-path" - } - }, - "node_modules/npm-run": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-run/-/npm-run-2.0.0.tgz", - "integrity": "sha1-KN/ArV4uRv4ISOK9WN3wAue3PBU=", - "dependencies": { - "minimist": "^1.1.1", - "npm-path": "^1.0.1", - "npm-which": "^2.0.0", - "serializerr": "^1.0.1", - "spawn-sync": "^1.0.5", - "sync-exec": "^0.5.0" - }, - "bin": { - "npm-run": "bin/npm-run.js" - } - }, - "node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-which": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-2.0.0.tgz", - "integrity": "sha1-DEaYIWC3gwk2YdHQG9RJbS/qu6w=", - "dependencies": { - "commander": "^2.2.0", - "npm-path": "^1.0.0", - "which": "^1.0.5" - }, - "bin": { - "npm-which": "bin/npm-which.js" - } - }, - "node_modules/npm-which/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==" - }, - "node_modules/null-check": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", - "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nunjucks": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.0.tgz", - "integrity": "sha512-YS/qEQ6N7qCnUdm6EoYRBfJUdWNT0PpKbbRnogV2XyXbBm2STIP1O6yrdZHgwMVK7fIYUx7i8+yatEixnXSB1w==", - "dependencies": { - "a-sync-waterfall": "^1.0.0", - "asap": "^2.0.3", - "yargs": "^3.32.0" - }, - "bin": { - "nunjucks-precompile": "bin/precompile" - }, - "engines": { - "node": ">= 6.9.0" - }, - "optionalDependencies": { - "chokidar": "^2.0.0" - } - }, - "node_modules/nunjucks/node_modules/cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "node_modules/nunjucks/node_modules/invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nunjucks/node_modules/lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dependencies": { - "invert-kv": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nunjucks/node_modules/os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dependencies": { - "lcid": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nunjucks/node_modules/window-size": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", - "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=", - "bin": { - "window-size": "cli.js" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/nunjucks/node_modules/wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nunjucks/node_modules/y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" - }, - "node_modules/nunjucks/node_modules/yargs": { - "version": "3.32.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", - "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", - "dependencies": { - "camelcase": "^2.0.1", - "cliui": "^3.0.3", - "decamelize": "^1.1.1", - "os-locale": "^1.4.0", - "string-width": "^1.0.1", - "window-size": "^0.1.4", - "y18n": "^3.2.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-component": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz", - "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", - "dependencies": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dependencies": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" - }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/opn": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/opn/-/opn-3.0.3.tgz", - "integrity": "sha1-ttmec5n3jWXDuq/+8fsojpuFJDo=", - "dependencies": { - "object-assign": "^4.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dependencies": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - } - }, - "node_modules/optimist/node_modules/minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" - }, - "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/options": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", - "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", - "dependencies": { - "url-parse": "^1.4.3" - } - }, - "node_modules/os-browserify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.1.2.tgz", - "integrity": "sha1-ScoCk+CxlZCl9d4Qx/JlphfY/lQ=" - }, - "node_modules/os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dependencies": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/os-shim": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz", - "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/outpipe": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/outpipe/-/outpipe-1.1.1.tgz", - "integrity": "sha1-UM+GFjZeh+Ax4ppeyTOaPaRyX6I=", - "dependencies": { - "shell-quote": "^1.4.2" - } - }, - "node_modules/outpipe/node_modules/shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" - }, - "node_modules/p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", - "dependencies": { - "retry": "^0.12.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=" - }, - "node_modules/parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "dependencies": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "node_modules/parents": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", - "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", - "dependencies": { - "path-platform": "~0.11.15" - } - }, - "node_modules/parse-asn1": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", - "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", - "dependencies": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/parse-bmfont-ascii": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", - "integrity": "sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=" - }, - "node_modules/parse-bmfont-binary": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", - "integrity": "sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=" - }, - "node_modules/parse-bmfont-xml": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", - "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", - "dependencies": { - "xml-parse-from-string": "^1.0.0", - "xml2js": "^0.4.5" - } - }, - "node_modules/parse-github-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-0.2.1.tgz", - "integrity": "sha1-4XM1Al4CyCehQZi2FOc6tbmQS+g=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dependencies": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parse-glob/node_modules/is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parse-glob/node_modules/is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dependencies": { - "is-extglob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parse-headers": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz", - "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==" - }, - "node_modules/parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dependencies": { - "error-ex": "^1.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parsejson": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", - "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", - "dependencies": { - "better-assert": "~1.0.0" - } - }, - "node_modules/parseqs": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", - "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", - "dependencies": { - "better-assert": "~1.0.0" - } - }, - "node_modules/parseuri": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", - "dependencies": { - "better-assert": "~1.0.0" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/path/-/path-0.11.14.tgz", - "integrity": "sha1-y8dWk1XLPIOv60rOQ+z/lSMeWn0=" - }, - "node_modules/path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" - }, - "node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "engines": { - "node": ">=4" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" - }, - "node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "engines": { - "node": ">=4" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-platform": { - "version": "0.11.15", - "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", - "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "node_modules/path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dependencies": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-type/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/phin": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", - "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==" - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "optional": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pkg-conf": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", - "integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=", - "dev": true, - "dependencies": { - "find-up": "^2.0.0", - "load-json-file": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-conf/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-conf/node_modules/load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-conf/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-conf/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-conf/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-conf/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-conf/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-conf/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-conf/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-config": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pkg-config/-/pkg-config-1.1.1.tgz", - "integrity": "sha1-VX7yLXPaPIg3EHdmxS6tq94pj+Q=", - "dependencies": { - "debug-log": "^1.0.0", - "find-root": "^1.0.0", - "xtend": "^4.0.1" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pluralize": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", - "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=" - }, - "node_modules/portfinder": { - "version": "1.0.25", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.25.tgz", - "integrity": "sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg==", - "dependencies": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.1" - }, - "engines": { - "node": ">= 0.12.0" - } - }, - "node_modules/portfinder/node_modules/async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/portfinder/node_modules/debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/portfinder/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dependencies": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/postcss-calc": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", - "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", - "dependencies": { - "postcss": "^5.0.2", - "postcss-message-helpers": "^2.0.0", - "reduce-css-calc": "^1.2.6" - } - }, - "node_modules/postcss-calc/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-calc/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-calc/node_modules/chalk/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-calc/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-calc/node_modules/postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dependencies": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/postcss-calc/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-colormin": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", - "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", - "dependencies": { - "colormin": "^1.0.5", - "postcss": "^5.0.13", - "postcss-value-parser": "^3.2.3" - } - }, - "node_modules/postcss-colormin/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-colormin/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-colormin/node_modules/chalk/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-colormin/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-colormin/node_modules/postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dependencies": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/postcss-colormin/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-convert-values": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", - "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", - "dependencies": { - "postcss": "^5.0.11", - "postcss-value-parser": "^3.1.2" - } - }, - "node_modules/postcss-convert-values/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-convert-values/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-convert-values/node_modules/chalk/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-convert-values/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-convert-values/node_modules/postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dependencies": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/postcss-convert-values/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-discard-comments": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", - "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", - "dependencies": { - "postcss": "^5.0.14" - } - }, - "node_modules/postcss-discard-comments/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-discard-comments/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-discard-comments/node_modules/chalk/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-discard-comments/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-discard-comments/node_modules/postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dependencies": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/postcss-discard-comments/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", - "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", - "dependencies": { - "postcss": "^5.0.4" - } - }, - "node_modules/postcss-discard-duplicates/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-discard-duplicates/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-discard-duplicates/node_modules/chalk/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-discard-duplicates/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-discard-duplicates/node_modules/postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dependencies": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/postcss-discard-duplicates/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-discard-empty": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", - "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", - "dependencies": { - "postcss": "^5.0.14" - } - }, - "node_modules/postcss-discard-empty/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-discard-empty/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-discard-empty/node_modules/chalk/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-discard-empty/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-discard-empty/node_modules/postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dependencies": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/postcss-discard-empty/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", - "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", - "dependencies": { - "postcss": "^5.0.16" - } - }, - "node_modules/postcss-discard-overridden/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-discard-overridden/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-discard-overridden/node_modules/chalk/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-discard-overridden/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-discard-overridden/node_modules/postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dependencies": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/postcss-discard-overridden/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-discard-unused": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", - "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", - "dependencies": { - "postcss": "^5.0.14", - "uniqs": "^2.0.0" - } - }, - "node_modules/postcss-discard-unused/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-discard-unused/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-discard-unused/node_modules/chalk/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-discard-unused/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-discard-unused/node_modules/postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dependencies": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/postcss-discard-unused/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-filter-plugins": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz", - "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==", - "dependencies": { - "postcss": "^5.0.4" - } - }, - "node_modules/postcss-filter-plugins/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-filter-plugins/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-filter-plugins/node_modules/chalk/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-filter-plugins/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-filter-plugins/node_modules/postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dependencies": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/postcss-filter-plugins/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-merge-idents": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", - "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", - "dependencies": { - "has": "^1.0.1", - "postcss": "^5.0.10", - "postcss-value-parser": "^3.1.1" - } - }, - "node_modules/postcss-merge-idents/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-merge-idents/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-merge-idents/node_modules/chalk/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-merge-idents/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-merge-idents/node_modules/postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dependencies": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/postcss-merge-idents/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-merge-longhand": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", - "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", - "dependencies": { - "postcss": "^5.0.4" - } - }, - "node_modules/postcss-merge-longhand/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-merge-longhand/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-merge-longhand/node_modules/chalk/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-merge-longhand/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-merge-longhand/node_modules/postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dependencies": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/postcss-merge-longhand/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-merge-rules": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", - "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", - "dependencies": { - "browserslist": "^1.5.2", - "caniuse-api": "^1.5.2", - "postcss": "^5.0.4", - "postcss-selector-parser": "^2.2.2", - "vendors": "^1.0.0" - } - }, - "node_modules/postcss-merge-rules/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-merge-rules/node_modules/browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "deprecated": "Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.", - "dependencies": { - "caniuse-db": "^1.0.30000639", - "electron-to-chromium": "^1.2.7" - }, - "bin": { - "browserslist": "cli.js" - } - }, - "node_modules/postcss-merge-rules/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-merge-rules/node_modules/chalk/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-merge-rules/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-merge-rules/node_modules/postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dependencies": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/postcss-merge-rules/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-message-helpers": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz", - "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=" - }, - "node_modules/postcss-minify-font-values": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", - "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", - "dependencies": { - "object-assign": "^4.0.1", - "postcss": "^5.0.4", - "postcss-value-parser": "^3.0.2" - } - }, - "node_modules/postcss-minify-font-values/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-minify-font-values/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-minify-font-values/node_modules/chalk/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-minify-font-values/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-minify-font-values/node_modules/postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dependencies": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/postcss-minify-font-values/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", - "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", - "dependencies": { - "postcss": "^5.0.12", - "postcss-value-parser": "^3.3.0" - } - }, - "node_modules/postcss-minify-gradients/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-minify-gradients/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-minify-gradients/node_modules/chalk/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-minify-gradients/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-minify-gradients/node_modules/postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dependencies": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/postcss-minify-gradients/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-minify-params": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", - "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", - "dependencies": { - "alphanum-sort": "^1.0.1", - "postcss": "^5.0.2", - "postcss-value-parser": "^3.0.2", - "uniqs": "^2.0.0" - } - }, - "node_modules/postcss-minify-params/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-minify-params/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-minify-params/node_modules/chalk/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-minify-params/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-minify-params/node_modules/postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dependencies": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/postcss-minify-params/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", - "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", - "dependencies": { - "alphanum-sort": "^1.0.2", - "has": "^1.0.1", - "postcss": "^5.0.14", - "postcss-selector-parser": "^2.0.0" - } - }, - "node_modules/postcss-minify-selectors/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-minify-selectors/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-minify-selectors/node_modules/chalk/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-minify-selectors/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-minify-selectors/node_modules/postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dependencies": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/postcss-minify-selectors/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz", - "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==", - "dependencies": { - "postcss": "^6.0.1" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", - "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", - "dependencies": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" - } - }, - "node_modules/postcss-modules-scope": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", - "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", - "dependencies": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" - } - }, - "node_modules/postcss-modules-values": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", - "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", - "dependencies": { - "icss-replace-symbols": "^1.1.0", - "postcss": "^6.0.1" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", - "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", - "dependencies": { - "postcss": "^5.0.5" - } - }, - "node_modules/postcss-normalize-charset/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-normalize-charset/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-normalize-charset/node_modules/chalk/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-normalize-charset/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-normalize-charset/node_modules/postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dependencies": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/postcss-normalize-charset/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-normalize-url": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", - "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", - "dependencies": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^1.4.0", - "postcss": "^5.0.14", - "postcss-value-parser": "^3.2.3" - } - }, - "node_modules/postcss-normalize-url/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-normalize-url/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-normalize-url/node_modules/chalk/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-normalize-url/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-normalize-url/node_modules/is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-normalize-url/node_modules/postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dependencies": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/postcss-normalize-url/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-ordered-values": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", - "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", - "dependencies": { - "postcss": "^5.0.4", - "postcss-value-parser": "^3.0.1" - } - }, - "node_modules/postcss-ordered-values/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-ordered-values/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-ordered-values/node_modules/chalk/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-ordered-values/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-ordered-values/node_modules/postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dependencies": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/postcss-ordered-values/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-reduce-idents": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", - "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", - "dependencies": { - "postcss": "^5.0.4", - "postcss-value-parser": "^3.0.2" - } - }, - "node_modules/postcss-reduce-idents/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-reduce-idents/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-reduce-idents/node_modules/chalk/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-reduce-idents/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-reduce-idents/node_modules/postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dependencies": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/postcss-reduce-idents/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", - "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", - "dependencies": { - "postcss": "^5.0.4" - } - }, - "node_modules/postcss-reduce-initial/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-reduce-initial/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-reduce-initial/node_modules/chalk/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-reduce-initial/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-reduce-initial/node_modules/postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dependencies": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/postcss-reduce-initial/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", - "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", - "dependencies": { - "has": "^1.0.1", - "postcss": "^5.0.8", - "postcss-value-parser": "^3.0.1" - } - }, - "node_modules/postcss-reduce-transforms/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-reduce-transforms/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-reduce-transforms/node_modules/chalk/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-reduce-transforms/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-reduce-transforms/node_modules/postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dependencies": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/postcss-reduce-transforms/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-selector-parser": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", - "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", - "dependencies": { - "flatten": "^1.0.2", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "node_modules/postcss-svgo": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", - "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", - "dependencies": { - "is-svg": "^2.0.0", - "postcss": "^5.0.14", - "postcss-value-parser": "^3.2.3", - "svgo": "^0.7.0" - } - }, - "node_modules/postcss-svgo/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-svgo/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-svgo/node_modules/chalk/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-svgo/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-svgo/node_modules/postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dependencies": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/postcss-svgo/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", - "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", - "dependencies": { - "alphanum-sort": "^1.0.1", - "postcss": "^5.0.4", - "uniqs": "^2.0.0" - } - }, - "node_modules/postcss-unique-selectors/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-unique-selectors/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-unique-selectors/node_modules/chalk/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-unique-selectors/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-unique-selectors/node_modules/postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dependencies": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/postcss-unique-selectors/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-zindex": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", - "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", - "dependencies": { - "has": "^1.0.1", - "postcss": "^5.0.4", - "uniqs": "^2.0.0" - } - }, - "node_modules/postcss-zindex/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-zindex/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-zindex/node_modules/chalk/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss-zindex/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-zindex/node_modules/postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dependencies": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/postcss-zindex/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/present": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/present/-/present-0.0.6.tgz", - "integrity": "sha1-nu/3ANqp6ZhhM1Lkf3rCMk1PrwI=" - }, - "node_modules/preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/process": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/profane-words": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/profane-words/-/profane-words-1.3.1.tgz", - "integrity": "sha512-F9ejqCswcSF+1ZRLN+exMF78gtCHdI4t9MsWVAUtedyo22lprZKhY6vJY3rCUXJZ8nryCzFjkdLQNWkLpA2UFQ==", - "funding": { - "type": "ko-fi", - "url": "https://ko-fi.com/zacanger" - } - }, - "node_modules/progress": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", - "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" - }, - "node_modules/promise-polyfill": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.1.3.tgz", - "integrity": "sha512-MG5r82wBzh7pSKDRa9y+vllNHz3e3d4CNj1PQE4BQYxLme0gKYYBm9YENq+UkEikyZ0XbiGWxYlVw3Rl9O/U8g==" - }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" - }, - "node_modules/protobufjs": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.10.1.tgz", - "integrity": "sha512-pb8kTchL+1Ceg4lFd5XUpK8PdWacbvV5SK2ULH2ebrYtl4GjJmS24m6CKME67jzV53tbJxHlnNOSqQHbTsR9JQ==", - "hasInstallScript": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.1", - "@types/node": "^13.7.0", - "long": "^4.0.0" - }, - "bin": { - "pbjs": "bin/pbjs", - "pbts": "bin/pbts" - } - }, - "node_modules/protobufjs/node_modules/@types/node": { - "version": "13.13.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.15.tgz", - "integrity": "sha512-kwbcs0jySLxzLsa2nWUAGOd/s21WU1jebrEdtzhsj1D4Yps1EOuyI1Qcu+FD56dL7NRNIJtDDjcqIG22NwkgLw==" - }, - "node_modules/protochain": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/protochain/-/protochain-1.0.5.tgz", - "integrity": "sha1-mRxAfpneJkqt+PgVBLXn+ve/omA=" - }, - "node_modules/proxy-addr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", - "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", - "dependencies": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" - }, - "node_modules/pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "node_modules/pumpify/node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/q-io": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/q-io/-/q-io-1.13.2.tgz", - "integrity": "sha1-7qEw1IHdteGqG8WmaFX3OR0G8AM=", - "dependencies": { - "collections": "^0.2.0", - "mime": "^1.2.11", - "mimeparse": "^0.1.4", - "q": "^1.0.1", - "qs": "^1.2.1", - "url2": "^0.0.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/qs": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-1.2.2.tgz", - "integrity": "sha1-GbV/8k3CqZzh+L32r82ln472H4g=" - }, - "node_modules/quad-indices": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/quad-indices/-/quad-indices-2.0.1.tgz", - "integrity": "sha1-ppQdiaE9Y+7WwdSlpiGgRjYXqBQ=", - "dependencies": { - "an-array": "^1.0.0", - "dtype": "^2.0.0", - "is-buffer": "^1.0.2" - } - }, - "node_modules/query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "dependencies": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/querystringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", - "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==" - }, - "node_modules/randomatic": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", - "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", - "dependencies": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/randomatic/node_modules/is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/randomcolor": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/randomcolor/-/randomcolor-0.4.4.tgz", - "integrity": "sha1-X/VoYul7oDvrBBn/BTbsev9Z7us=" - }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/read-only-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-1.1.1.tgz", - "integrity": "sha1-Xad8eZ7ROI0++IoYRxu1kk+KC6E=", - "dependencies": { - "readable-stream": "^1.0.31", - "readable-wrap": "^1.0.0" - } - }, - "node_modules/read-only-stream/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "node_modules/read-only-stream/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/read-only-stream/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "node_modules/read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dependencies": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dependencies": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dependencies": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dependencies": { - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readable-wrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/readable-wrap/-/readable-wrap-1.0.0.tgz", - "integrity": "sha1-O1ohHGMeEjA6VJkcgGwX564ga/8=", - "dependencies": { - "readable-stream": "^1.1.13-1" - } - }, - "node_modules/readable-wrap/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "node_modules/readable-wrap/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/readable-wrap/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/readline2": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", - "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "mute-stream": "0.0.5" - } - }, - "node_modules/recast": { - "version": "0.11.23", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", - "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=", - "dependencies": { - "ast-types": "0.9.6", - "esprima": "~3.1.0", - "private": "~0.1.5", - "source-map": "~0.5.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/recast/node_modules/esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dependencies": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/reduce": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/reduce/-/reduce-1.0.2.tgz", - "integrity": "sha512-xX7Fxke/oHO5IfZSk77lvPa/7bjMh9BuCk4OOoX5XTXrM7s0Z+MkPfSDfz0q7r91BhhGSs8gii/VEN/7zhCPpQ==", - "dependencies": { - "object-keys": "^1.1.0" - } - }, - "node_modules/reduce-css-calc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", - "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", - "dependencies": { - "balanced-match": "^0.4.2", - "math-expression-evaluator": "^1.2.14", - "reduce-function-call": "^1.0.1" - } - }, - "node_modules/reduce-css-calc/node_modules/balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=" - }, - "node_modules/reduce-function-call": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.3.tgz", - "integrity": "sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "node_modules/regenerate-unicode-properties": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", - "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", - "dependencies": { - "regenerate": "^1.4.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - }, - "node_modules/regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dependencies": { - "is-equal-shallow": "^0.1.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz", - "integrity": "sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA==", - "dependencies": { - "define-properties": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/regexpu-core": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz", - "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==", - "dependencies": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.1.0", - "regjsgen": "^0.5.0", - "regjsparser": "^0.6.0", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsgen": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz", - "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==" - }, - "node_modules/regjsparser": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", - "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - }, - "node_modules/repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dependencies": { - "is-finite": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, - "node_modules/require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dependencies": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "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" - } - }, - "node_modules/resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dependencies": { - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-dir": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz", - "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=", - "dependencies": { - "expand-tilde": "^1.2.2", - "global-modules": "^0.2.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "deprecated": "https://github.com/lydell/resolve-url#deprecated" - }, - "node_modules/restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "dependencies": { - "exit-hook": "^1.0.0", - "onetime": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "engines": { - "node": ">=0.12" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", - "engines": { - "node": ">= 4" - } - }, - "node_modules/right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dependencies": { - "align-text": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/rocambole": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/rocambole/-/rocambole-0.7.0.tgz", - "integrity": "sha1-9seVBVF9xCtvuECEK4uVOw+WhYU=", - "dependencies": { - "esprima": "^2.1" - } - }, - "node_modules/rocambole-indent": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/rocambole-indent/-/rocambole-indent-2.0.4.tgz", - "integrity": "sha1-oYokl3ygQAuGHapGMehh3LUtCFw=", - "dependencies": { - "debug": "^2.1.3", - "mout": "^0.11.0", - "rocambole-token": "^1.2.1" - } - }, - "node_modules/rocambole-indent/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/rocambole-indent/node_modules/mout": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/mout/-/mout-0.11.1.tgz", - "integrity": "sha1-ujYR318OWx/7/QEWa48C0fX6K5k=" - }, - "node_modules/rocambole-linebreak": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/rocambole-linebreak/-/rocambole-linebreak-1.0.2.tgz", - "integrity": "sha1-A2IVFbQ7RyHJflocG8paA2Y2jy8=", - "dependencies": { - "debug": "^2.1.3", - "rocambole-token": "^1.2.1", - "semver": "^4.3.1" - } - }, - "node_modules/rocambole-linebreak/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/rocambole-linebreak/node_modules/semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/rocambole-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rocambole-node/-/rocambole-node-1.0.0.tgz", - "integrity": "sha1-21tJ3nQHsAgN1RSHLyjjk9D3/z8=" - }, - "node_modules/rocambole-token": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/rocambole-token/-/rocambole-token-1.2.1.tgz", - "integrity": "sha1-x4XfdCjcPLJ614lwR71SOMwHDTU=" - }, - "node_modules/rocambole-whitespace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rocambole-whitespace/-/rocambole-whitespace-1.0.0.tgz", - "integrity": "sha1-YzMJSSVrKZQfWbGQRZ+ZnGsdO/k=", - "dependencies": { - "debug": "^2.1.3", - "repeat-string": "^1.5.0", - "rocambole-token": "^1.2.1" - } - }, - "node_modules/rocambole-whitespace/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/rocambole/node_modules/esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/rollup": { - "version": "1.32.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.32.1.tgz", - "integrity": "sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A==", - "peer": true, - "dependencies": { - "@types/estree": "*", - "@types/node": "*", - "acorn": "^7.1.0" - }, - "bin": { - "rollup": "dist/bin/rollup" - } - }, - "node_modules/rollup-plugin-terser": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-4.0.4.tgz", - "integrity": "sha512-wPANT5XKVJJ8RDUN0+wIr7UPd0lIXBo4UdJ59VmlPCtlFsE20AM+14pe+tk7YunCsWEiuzkDBY3QIkSCjtrPXg==", - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "jest-worker": "^24.0.0", - "serialize-javascript": "^1.6.1", - "terser": "^3.14.1" - }, - "peerDependencies": { - "rollup": ">=0.66.0 <2" - } - }, - "node_modules/rollup-plugin-terser/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==" - }, - "node_modules/rollup-plugin-terser/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/terser": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", - "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", - "dependencies": { - "commander": "^2.19.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.10" - }, - "bin": { - "terser": "bin/uglifyjs" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/rollup/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/run-async": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", - "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", - "dependencies": { - "once": "^1.3.0" - } - }, - "node_modules/run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==" - }, - "node_modules/run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", - "dependencies": { - "aproba": "^1.1.1" - } - }, - "node_modules/rx": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/rx/-/rx-2.5.3.tgz", - "integrity": "sha1-Ia3H2A8CACr1Da6X/Z2/JIdV9WY=" - }, - "node_modules/rx-lite": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", - "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=" - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/samsam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.3.0.tgz", - "integrity": "sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg==", - "deprecated": "This package has been deprecated in favour of @sinonjs/samsam", - "peer": true - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/schema-utils/node_modules/ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", - "dependencies": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "node_modules/schema-utils/node_modules/ajv-keywords": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", - "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" - }, - "node_modules/selfsigned": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz", - "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==", - "dependencies": { - "node-forge": "0.9.0" - } - }, - "node_modules/semi": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/semi/-/semi-4.0.5.tgz", - "integrity": "sha1-S5lcDBZjkjj2rimMhAWCqL8FEe4=", - "dependencies": { - "eslint": "^0.24.1", - "findit": "^2.0.0", - "minimist": "^1.1.0", - "mkdirp": "^0.5.0" - }, - "bin": { - "semi": "bin/semi" - } - }, - "node_modules/semi/node_modules/ansi-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-1.1.1.tgz", - "integrity": "sha1-QchHGUZGN15qGl0Qw8oFTvn8mA0=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/semi/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/semi/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/semi/node_modules/cli-width": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-1.1.1.tgz", - "integrity": "sha1-pNKT72frt7iNSk1CwMzwDE0eNm0=" - }, - "node_modules/semi/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/semi/node_modules/doctrine": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-0.6.4.tgz", - "integrity": "sha1-gUKEkalC7xiwSSBW7aOADu5X1h0=", - "dependencies": { - "esutils": "^1.1.6", - "isarray": "0.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/semi/node_modules/eslint": { - "version": "0.24.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-0.24.1.tgz", - "integrity": "sha1-VKUICYVbllVyHG8u5Xs1HtzigQE=", - "dependencies": { - "chalk": "^1.0.0", - "concat-stream": "^1.4.6", - "debug": "^2.1.1", - "doctrine": "^0.6.2", - "escape-string-regexp": "^1.0.2", - "escope": "^3.1.0", - "espree": "^2.0.1", - "estraverse": "^4.1.0", - "estraverse-fb": "^1.3.1", - "globals": "^8.0.0", - "inquirer": "^0.8.2", - "is-my-json-valid": "^2.10.0", - "js-yaml": "^3.2.5", - "minimatch": "^2.0.1", - "mkdirp": "^0.5.0", - "object-assign": "^2.0.0", - "optionator": "^0.5.0", - "path-is-absolute": "^1.0.0", - "strip-json-comments": "~1.0.1", - "text-table": "~0.2.0", - "user-home": "^1.0.0", - "xml-escape": "~1.0.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/semi/node_modules/espree": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/espree/-/espree-2.2.5.tgz", - "integrity": "sha1-32kbkxCIlAKuspzAZnCMVmkLhUs=", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/semi/node_modules/esutils": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.1.6.tgz", - "integrity": "sha1-wBzKqa5LiXxtDD4hCuUvPHqEQ3U=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/semi/node_modules/fast-levenshtein": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.0.7.tgz", - "integrity": "sha1-AXjc3uAjuSkFGTrwlZ6KdjnP3Lk=" - }, - "node_modules/semi/node_modules/globals": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-8.18.0.tgz", - "integrity": "sha1-k9SmK9ysOM+vr8R9awNHaMsP/LQ=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/semi/node_modules/inquirer": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.8.5.tgz", - "integrity": "sha1-29dAz2yjtzEpamPOb22WGFHzNt8=", - "dependencies": { - "ansi-regex": "^1.1.1", - "chalk": "^1.0.0", - "cli-width": "^1.0.1", - "figures": "^1.3.5", - "lodash": "^3.3.1", - "readline2": "^0.1.1", - "rx": "^2.4.3", - "through": "^2.3.6" - } - }, - "node_modules/semi/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "node_modules/semi/node_modules/levn": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.2.5.tgz", - "integrity": "sha1-uo0znQykphDjo/FFucr0iAcVUFQ=", - "dependencies": { - "prelude-ls": "~1.1.0", - "type-check": "~0.3.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/semi/node_modules/lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" - }, - "node_modules/semi/node_modules/minimatch": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", - "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", - "deprecated": "Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue", - "dependencies": { - "brace-expansion": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/semi/node_modules/mute-stream": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.4.tgz", - "integrity": "sha1-qSGZYKbV1dBGWXruUSUsZlX3F34=" - }, - "node_modules/semi/node_modules/object-assign": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", - "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/semi/node_modules/optionator": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.5.0.tgz", - "integrity": "sha1-t1qJlaLUF98ltuTjhi9QqohlE2g=", - "dependencies": { - "deep-is": "~0.1.2", - "fast-levenshtein": "~1.0.0", - "levn": "~0.2.5", - "prelude-ls": "~1.1.1", - "type-check": "~0.3.1", - "wordwrap": "~0.0.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/semi/node_modules/readline2": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/readline2/-/readline2-0.1.1.tgz", - "integrity": "sha1-mUQ7pug7gw7zBRv9fcJBqCco1Wg=", - "dependencies": { - "mute-stream": "0.0.4", - "strip-ansi": "^2.0.1" - } - }, - "node_modules/semi/node_modules/readline2/node_modules/strip-ansi": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-2.0.1.tgz", - "integrity": "sha1-32LBqpTtLxFOHQ8h/R1QSCt5pg4=", - "dependencies": { - "ansi-regex": "^1.0.0" - }, - "bin": { - "strip-ansi": "cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/semi/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/semi/node_modules/user-home": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", - "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", - "bin": { - "user-home": "cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/semistandard": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/semistandard/-/semistandard-10.0.0.tgz", - "integrity": "sha1-1olPdnO5tzfCYtypTK3zXoOS3ek=", - "dev": true, - "dependencies": { - "eslint": "~3.15.0", - "eslint-config-semistandard": "8.0.0", - "eslint-config-standard": "7.0.0", - "eslint-config-standard-jsx": "3.3.0", - "eslint-plugin-promise": "~3.4.0", - "eslint-plugin-react": "~6.9.0", - "eslint-plugin-standard": "~2.0.1", - "standard-engine": "~5.4.0" - }, - "bin": { - "semistandard": "bin/cmd.js" - } - }, - "node_modules/semistandard-format": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/semistandard-format/-/semistandard-format-3.0.0.tgz", - "integrity": "sha1-eF8VANyEBd1WHdC4r8GXFEj1I+s=", - "dependencies": { - "minimist": "^1.1.0", - "semi": "^4.0.4", - "standard-format": "^2.1.1", - "stdin": "0.0.1" - }, - "bin": { - "semistandard-format": "bin.js" - } - }, - "node_modules/semistandard/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/semistandard/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/semistandard/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/semistandard/node_modules/deglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.1.tgz", - "integrity": "sha512-2kjwuGGonL7gWE1XU4Fv79+vVzpoQCl0V+boMwWtOQJV2AGDabCwez++nB1Nli/8BabAfZQ/UuHPlp6AymKdWw==", - "dev": true, - "dependencies": { - "find-root": "^1.0.0", - "glob": "^7.0.5", - "ignore": "^3.0.9", - "pkg-config": "^1.1.0", - "run-parallel": "^1.1.2", - "uniq": "^1.0.1" - } - }, - "node_modules/semistandard/node_modules/eslint": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.15.0.tgz", - "integrity": "sha1-vcxqbF/+CBYOe5PAZmlTYqkeMPI=", - "dev": true, - "dependencies": { - "babel-code-frame": "^6.16.0", - "chalk": "^1.1.3", - "concat-stream": "^1.4.6", - "debug": "^2.1.1", - "doctrine": "^1.2.2", - "escope": "^3.6.0", - "espree": "^3.4.0", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "glob": "^7.0.3", - "globals": "^9.14.0", - "ignore": "^3.2.0", - "imurmurhash": "^0.1.4", - "inquirer": "^0.12.0", - "is-my-json-valid": "^2.10.0", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.5.1", - "json-stable-stringify": "^1.0.0", - "levn": "^0.3.0", - "lodash": "^4.0.0", - "mkdirp": "^0.5.0", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.1", - "pluralize": "^1.2.1", - "progress": "^1.1.8", - "require-uncached": "^1.0.2", - "shelljs": "^0.7.5", - "strip-bom": "^3.0.0", - "strip-json-comments": "~2.0.1", - "table": "^3.7.8", - "text-table": "~0.2.0", - "user-home": "^2.0.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/semistandard/node_modules/eslint-config-semistandard": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-semistandard/-/eslint-config-semistandard-8.0.0.tgz", - "integrity": "sha1-+4I5N5odzBFM3np9y7yAvuozNLA=", - "dev": true, - "peerDependencies": { - "eslint-config-standard": "^7.0.0" - } - }, - "node_modules/semistandard/node_modules/eslint-config-standard": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-7.0.0.tgz", - "integrity": "sha1-TxYbxlaV5LxhMxxVue6spFjNmcY=", - "dev": true, - "peerDependencies": { - "eslint": ">=3.8.1", - "eslint-plugin-promise": ">=3.3.0", - "eslint-plugin-standard": ">=2.0.0" - } - }, - "node_modules/semistandard/node_modules/eslint-config-standard-jsx": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-3.3.0.tgz", - "integrity": "sha1-yrCAGhWjYL9j+suXqyL73YjYpeA=", - "dev": true, - "peerDependencies": { - "eslint": ">=3.0.0", - "eslint-plugin-react": ">=2.7.1" - } - }, - "node_modules/semistandard/node_modules/eslint-plugin-promise": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.4.2.tgz", - "integrity": "sha1-G+J5Pq/i0YtbEjuBNsJp+AT+cSI=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/semistandard/node_modules/eslint-plugin-react": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-6.9.0.tgz", - "integrity": "sha1-VMLpkGt2+dEBQgML3DTp1oQKC7I=", - "dev": true, - "dependencies": { - "array.prototype.find": "^2.0.1", - "doctrine": "^1.2.2", - "jsx-ast-utils": "^1.3.4" - }, - "engines": { - "node": ">=0.10" - }, - "peerDependencies": { - "eslint": "^2.0.0 || ^3.0.0" - } - }, - "node_modules/semistandard/node_modules/eslint-plugin-standard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-2.0.1.tgz", - "integrity": "sha1-NYlpn/nJF/LCX3apFmh/ZBw2n/M=", - "dev": true, - "peerDependencies": { - "eslint": ">=3.0.0" - } - }, - "node_modules/semistandard/node_modules/file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true, - "dependencies": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/semistandard/node_modules/get-stdin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", - "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/semistandard/node_modules/globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/semistandard/node_modules/json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "dependencies": { - "jsonify": "~0.0.0" - } - }, - "node_modules/semistandard/node_modules/standard-engine": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-5.4.0.tgz", - "integrity": "sha1-4OhpWeoHhkJdM4PkDBv3DS+YVXk=", - "dev": true, - "dependencies": { - "deglob": "^2.1.0", - "get-stdin": "^5.0.1", - "home-or-tmp": "^2.0.0", - "minimist": "^1.1.0", - "pkg-conf": "^2.0.0" - } - }, - "node_modules/semistandard/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/semistandard/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/semistandard/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "dependencies": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - }, - "node_modules/serialize-javascript": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz", - "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==" - }, - "node_modules/serializerr": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/serializerr/-/serializerr-1.0.3.tgz", - "integrity": "sha1-EtTFqhw/+49tHcXzlaqUVVacP5E=", - "dependencies": { - "protochain": "^1.0.5" - } - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "node_modules/serve-index/node_modules/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "node_modules/serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/shasum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", - "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", - "dependencies": { - "json-stable-stringify": "~0.0.0", - "sha.js": "~2.4.4" - } - }, - "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shell-quote": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-0.0.1.tgz", - "integrity": "sha1-GkEZbzwDM8SCMjWT1ohuzxU92YY=", - "engines": { - "node": "*" - } - }, - "node_modules/shelljs": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", - "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "iojs": "*", - "node": ">=0.11.0" - } - }, - "node_modules/shx": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/shx/-/shx-0.2.2.tgz", - "integrity": "sha1-CjBNAgsO3xMGrYFXDoDwNG31ijk=", - "dependencies": { - "es6-object-assign": "^1.0.3", - "minimist": "^1.2.0", - "shelljs": "^0.7.3" - }, - "bin": { - "shx": "lib/cli.js" - } - }, - "node_modules/sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=" - }, - "node_modules/signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, - "node_modules/simple-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", - "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" - }, - "node_modules/simple-get": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", - "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", - "dependencies": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/sinon": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-4.5.0.tgz", - "integrity": "sha512-trdx+mB0VBBgoYucy6a9L7/jfQOmvGeaKZT4OOJ+lPAtI8623xyGr8wLiE4eojzBS8G9yXbhx42GHUOVLr4X2w==", - "hasInstallScript": true, - "peer": true, - "dependencies": { - "@sinonjs/formatio": "^2.0.0", - "diff": "^3.1.0", - "lodash.get": "^4.4.2", - "lolex": "^2.2.0", - "nise": "^1.2.0", - "supports-color": "^5.1.0", - "type-detect": "^4.0.5" - } - }, - "node_modules/sinon-chai": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-2.14.0.tgz", - "integrity": "sha512-9stIF1utB0ywNHNT7RgiXbdmen8QDCRsrTjw+G9TgKt1Yexjiv8TOWZ6WHsTPz57Yky3DIswZvEqX8fpuHNDtQ==", - "peerDependencies": { - "chai": ">=1.9.2 <5", - "sinon": "^1.4.0 || ^2.1.0 || ^3.0.0 || ^4.0.0" - } - }, - "node_modules/sinon/node_modules/diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "peer": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/sinon/node_modules/lolex": { - "version": "2.7.5", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.5.tgz", - "integrity": "sha512-l9x0+1offnKKIzYVjyXU2SiwhXDLekRzKyhnbyldPHvC7BvLPVpdNUNR2KeMAiCN2D/kLNttZgQD5WjSxuBx3Q==", - "peer": true - }, - "node_modules/sinon/node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snazzy": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/snazzy/-/snazzy-7.0.0.tgz", - "integrity": "sha1-le2szEqNb4D0rFzHtSDo+PmsIyU=", - "dev": true, - "dependencies": { - "chalk": "^1.1.0", - "inherits": "^2.0.1", - "minimist": "^1.1.1", - "readable-stream": "^2.0.6", - "standard-json": "^1.0.0", - "text-table": "^0.2.0" - }, - "bin": { - "snazzy": "bin/cmd.js" - } - }, - "node_modules/snazzy/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snazzy/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snazzy/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/socket.io": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.4.tgz", - "integrity": "sha1-L37O3DORvy1cc+KR/iM+bjTU3QA=", - "dependencies": { - "debug": "2.3.3", - "engine.io": "~1.8.4", - "has-binary": "0.1.7", - "object-assign": "4.1.0", - "socket.io-adapter": "0.5.0", - "socket.io-client": "1.7.4", - "socket.io-parser": "2.3.1" - } - }, - "node_modules/socket.io-adapter": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", - "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", - "dependencies": { - "debug": "2.3.3", - "socket.io-parser": "2.3.1" - } - }, - "node_modules/socket.io-adapter/node_modules/debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dependencies": { - "ms": "0.7.2" - } - }, - "node_modules/socket.io-adapter/node_modules/ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" - }, - "node_modules/socket.io-client": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.4.tgz", - "integrity": "sha1-7J+CA1btme9tNX8HVtZIcXvdQoE=", - "dependencies": { - "backo2": "1.0.2", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "2.3.3", - "engine.io-client": "~1.8.4", - "has-binary": "0.1.7", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseuri": "0.0.5", - "socket.io-parser": "2.3.1", - "to-array": "0.1.4" - } - }, - "node_modules/socket.io-client/node_modules/component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" - }, - "node_modules/socket.io-client/node_modules/debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dependencies": { - "ms": "0.7.2" - } - }, - "node_modules/socket.io-client/node_modules/ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" - }, - "node_modules/socket.io-parser": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", - "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", - "dependencies": { - "component-emitter": "1.1.2", - "debug": "2.2.0", - "isarray": "0.0.1", - "json3": "3.3.2" - } - }, - "node_modules/socket.io-parser/node_modules/component-emitter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", - "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=" - }, - "node_modules/socket.io-parser/node_modules/debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dependencies": { - "ms": "0.7.1" - } - }, - "node_modules/socket.io-parser/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "node_modules/socket.io-parser/node_modules/ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" - }, - "node_modules/socket.io/node_modules/debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dependencies": { - "ms": "0.7.2" - } - }, - "node_modules/socket.io/node_modules/ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" - }, - "node_modules/socket.io/node_modules/object-assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", - "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sockjs": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", - "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", - "dependencies": { - "faye-websocket": "^0.10.0", - "uuid": "^3.0.1" - } - }, - "node_modules/sockjs-client": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", - "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", - "dependencies": { - "debug": "^3.2.5", - "eventsource": "^1.0.7", - "faye-websocket": "~0.11.1", - "inherits": "^2.0.3", - "json3": "^3.3.2", - "url-parse": "^1.4.3" - } - }, - "node_modules/sockjs-client/node_modules/debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/sockjs-client/node_modules/faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/sockjs-client/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "dependencies": { - "is-plain-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "dependencies": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", - "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated" - }, - "node_modules/spawn-sync": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz", - "integrity": "sha1-sAeZVX63+wyDdsKdROih6mfldHY=", - "hasInstallScript": true, - "dependencies": { - "concat-stream": "^1.4.7", - "os-shim": "^0.1.2" - } - }, - "node_modules/spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==" - }, - "node_modules/spdy": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz", - "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==", - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/spdy-transport/node_modules/readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "node_modules/ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", - "dependencies": { - "figgy-pudding": "^3.5.1" - } - }, - "node_modules/standard": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/standard/-/standard-7.1.2.tgz", - "integrity": "sha1-QBZu7sJAUGXRpPDj8VurxuJ0YH4=", - "dependencies": { - "eslint": "~2.10.2", - "eslint-config-standard": "5.3.1", - "eslint-config-standard-jsx": "1.2.1", - "eslint-plugin-promise": "^1.0.8", - "eslint-plugin-react": "^5.0.1", - "eslint-plugin-standard": "^1.3.1", - "standard-engine": "^4.0.0" - }, - "bin": { - "standard": "bin/cmd.js" - } - }, - "node_modules/standard-engine": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-4.1.3.tgz", - "integrity": "sha1-ejGq1U8D2fOTVfQzic4GlPQJQVU=", - "dependencies": { - "defaults": "^1.0.2", - "deglob": "^1.0.0", - "find-root": "^1.0.0", - "get-stdin": "^5.0.1", - "minimist": "^1.1.0", - "multiline": "^1.0.2", - "pkg-config": "^1.0.1", - "xtend": "^4.0.0" - } - }, - "node_modules/standard-engine/node_modules/get-stdin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", - "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/standard-format": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/standard-format/-/standard-format-2.2.4.tgz", - "integrity": "sha1-uQ+zmmNfdJzU/RF/5HMNMRearu8=", - "dependencies": { - "deglob": "^1.0.0", - "esformatter": "^0.9.0", - "esformatter-eol-last": "^1.0.0", - "esformatter-jsx": "^7.0.0", - "esformatter-literal-notation": "^1.0.0", - "esformatter-quotes": "^1.0.0", - "esformatter-remove-trailing-commas": "^1.0.1", - "esformatter-semicolon-first": "^1.1.0", - "esformatter-spaced-lined-comment": "^2.0.0", - "minimist": "^1.1.0", - "stdin": "0.0.1" - }, - "bin": { - "standard-format": "bin.js" - } - }, - "node_modules/standard-json": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/standard-json/-/standard-json-1.1.0.tgz", - "integrity": "sha512-nkonX+n5g3pyVBvJZmvRlFtT/7JyLbNh4CtrYC3Qfxihgs8PKX52f6ONKQXORStuBWJ5PI83EUrNXme7LKfiTQ==", - "dependencies": { - "concat-stream": "^2.0.0" - }, - "bin": { - "standard-json": "bin.js" - } - }, - "node_modules/standard-json/node_modules/concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", - "engines": [ - "node >= 6.0" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/standard-json/node_modules/readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/standard/node_modules/acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/standard/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/standard/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/standard/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/standard/node_modules/eslint": { - "version": "2.10.2", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-2.10.2.tgz", - "integrity": "sha1-sjCUgv7wQ9MgM2WjIShebM4Bw9c=", - "dependencies": { - "chalk": "^1.1.3", - "concat-stream": "^1.4.6", - "debug": "^2.1.1", - "doctrine": "^1.2.1", - "es6-map": "^0.1.3", - "escope": "^3.6.0", - "espree": "3.1.4", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "file-entry-cache": "^1.1.1", - "glob": "^7.0.3", - "globals": "^9.2.0", - "ignore": "^3.1.2", - "imurmurhash": "^0.1.4", - "inquirer": "^0.12.0", - "is-my-json-valid": "^2.10.0", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.5.1", - "json-stable-stringify": "^1.0.0", - "lodash": "^4.0.0", - "mkdirp": "^0.5.0", - "optionator": "^0.8.1", - "path-is-absolute": "^1.0.0", - "path-is-inside": "^1.0.1", - "pluralize": "^1.2.1", - "progress": "^1.1.8", - "require-uncached": "^1.0.2", - "shelljs": "^0.6.0", - "strip-json-comments": "~1.0.1", - "table": "^3.7.8", - "text-table": "~0.2.0", - "user-home": "^2.0.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/standard/node_modules/eslint-config-standard-jsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-1.2.1.tgz", - "integrity": "sha1-DRmxcF8K1INj7yqLv6cd8BLZibM=", - "peerDependencies": { - "eslint": "^2.1.0", - "eslint-plugin-react": ">=2.7.1" - } - }, - "node_modules/standard/node_modules/espree": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.1.4.tgz", - "integrity": "sha1-BybXrIOvl6fISY2ps2OjYJ0qaKE=", - "dependencies": { - "acorn": "^3.1.0", - "acorn-jsx": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/standard/node_modules/globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/standard/node_modules/json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dependencies": { - "jsonify": "~0.0.0" - } - }, - "node_modules/standard/node_modules/shelljs": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.6.1.tgz", - "integrity": "sha1-7GIRvtGSBEIIj+D3Cyg3Iy7SyKg=", - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/standard/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/stdin": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/stdin/-/stdin-0.0.1.tgz", - "integrity": "sha1-0wQZgarsPf28d6GzjWNy449ftx4=" - }, - "node_modules/stream-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-1.0.0.tgz", - "integrity": "sha1-v5tKv7QrJ011FHnkTg/yZWtvEZM=", - "dependencies": { - "inherits": "~2.0.1", - "readable-stream": "^1.0.27-1" - } - }, - "node_modules/stream-browserify/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "node_modules/stream-browserify/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/stream-browserify/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "node_modules/stream-combiner2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.0.2.tgz", - "integrity": "sha1-unKmtQy/q/qVD8i8h2BL0B62BnE=", - "dependencies": { - "duplexer2": "~0.0.2", - "through2": "~0.5.1" - } - }, - "node_modules/stream-combiner2/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "node_modules/stream-combiner2/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/stream-combiner2/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "node_modules/stream-combiner2/node_modules/through2": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz", - "integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=", - "dependencies": { - "readable-stream": "~1.0.17", - "xtend": "~3.0.0" - } - }, - "node_modules/stream-combiner2/node_modules/xtend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", - "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dependencies": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" - }, - "node_modules/stream-splicer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-1.3.2.tgz", - "integrity": "sha1-PARBvhW5v04iYnXm3IOWR0VUZmE=", - "dependencies": { - "indexof": "0.0.1", - "inherits": "^2.0.1", - "isarray": "~0.0.1", - "readable-stream": "^1.1.13-1", - "readable-wrap": "^1.0.0", - "through2": "^1.0.0" - } - }, - "node_modules/stream-splicer/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "node_modules/stream-splicer/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/stream-splicer/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "node_modules/stream-splicer/node_modules/through2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-1.1.1.tgz", - "integrity": "sha1-CEfLxESfNAVXTb3M2buEG4OsNUU=", - "dependencies": { - "readable-stream": ">=1.1.13-1 <1.2.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - }, - "node_modules/strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string.prototype.endswith": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/string.prototype.endswith/-/string.prototype.endswith-0.2.0.tgz", - "integrity": "sha1-oZwg3uUamHd+mkfhDwm+OTubunU=" - }, - "node_modules/string.prototype.trimleft": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", - "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", - "dependencies": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/string.prototype.trimright": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", - "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", - "dependencies": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dependencies": { - "is-utf8": "^0.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dependencies": { - "get-stdin": "^4.0.1" - }, - "bin": { - "strip-indent": "cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-json-comments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", - "bin": { - "strip-json-comments": "cli.js" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/style-attr": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/style-attr/-/style-attr-1.3.0.tgz", - "integrity": "sha512-srFr54gzEZoy73WgYfnbxCAtNCzF0Hn5RGzK7gi/0G6ttZd9v3WZFGY4ed5ABr43dbGjPNr4T46geUxxUP9i6w==" - }, - "node_modules/style-loader": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz", - "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==", - "dependencies": { - "loader-utils": "^1.1.0", - "schema-utils": "^1.0.0" - }, - "engines": { - "node": ">= 0.12.0" - } - }, - "node_modules/subarg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", - "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", - "dependencies": { - "minimist": "^1.1.0" - } - }, - "node_modules/super-nunjucks-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/super-nunjucks-loader/-/super-nunjucks-loader-2.0.0.tgz", - "integrity": "sha512-WDYt02RmS/fvEt0Cp5d7V/Gxt0KbNZMPNMW0rsdHUWAudllqLhyxCjdz/CZjESkR1jizoCnrMJ70mIC0bUmeUQ==", - "dependencies": { - "loader-utils": "^1.2.3", - "nunjucks": "^3.1.7" - } - }, - "node_modules/superagent": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", - "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", - "deprecated": "Please upgrade to v7.0.2+ of superagent. We have fixed numerous issues with streams, form-data, attach(), filesystem errors not bubbling up (ENOENT on attach()), and all tests are now passing. See the releases tab for more information at .", - "dependencies": { - "component-emitter": "^1.2.0", - "cookiejar": "^2.1.0", - "debug": "^3.1.0", - "extend": "^3.0.0", - "form-data": "^2.3.1", - "formidable": "^1.2.0", - "methods": "^1.1.1", - "mime": "^1.4.1", - "qs": "^6.5.1", - "readable-stream": "^2.3.5" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/superagent/node_modules/debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/superagent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/superagent/node_modules/qs": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.1.tgz", - "integrity": "sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA==", - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svgo": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", - "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", - "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", - "dependencies": { - "coa": "~1.0.1", - "colors": "~1.1.2", - "csso": "~2.3.1", - "js-yaml": "~3.7.0", - "mkdirp": "~0.5.1", - "sax": "~1.2.1", - "whet.extend": "~0.9.9" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/svgo/node_modules/colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/svgo/node_modules/esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/svgo/node_modules/js-yaml": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", - "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^2.6.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/sync-exec": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/sync-exec/-/sync-exec-0.5.0.tgz", - "integrity": "sha1-P3JY5KW6FyRTgZCfpqb2z1BuFmE=" - }, - "node_modules/syntax-error": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", - "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", - "dependencies": { - "acorn-node": "^1.2.0" - } - }, - "node_modules/table": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", - "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", - "dependencies": { - "ajv": "^4.7.0", - "ajv-keywords": "^1.0.0", - "chalk": "^1.1.1", - "lodash": "^4.0.0", - "slice-ansi": "0.0.4", - "string-width": "^2.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha512-I/bSHSNEcFFqXLf91nchoNB9D1Kie3QKcWdchYUaoIg1+1bdWDkdfdlvdIOJbi9U8xR0y+MWc5D+won9v95WlQ==", - "dependencies": { - "co": "^4.6.0", - "json-stable-stringify": "^1.0.1" - } - }, - "node_modules/table/node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "engines": { - "node": ">=4" - } - }, - "node_modules/table/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/table/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/table/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "engines": { - "node": ">=4" - } - }, - "node_modules/table/node_modules/json-stable-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.2.tgz", - "integrity": "sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g==", - "dependencies": { - "jsonify": "^0.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/table/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/table/node_modules/string-width/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/table/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "dependencies": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "engines": { - "node": ">= 6.9.0" - }, - "peerDependencies": { - "webpack": "^4.0.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/terser-webpack-plugin/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/terser/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==" - }, - "node_modules/terser/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" - }, - "node_modules/three": { - "version": "0.90.0", - "resolved": "git+ssh://git@github.com/supermedium/three.js.git#5ef2887ab3621cae54fa129a500424d6caa25b62", - "integrity": "sha512-I3qUdpDBTltVg6YXEZQeckf6GCq8u/6elelab9kfHzkloUzb9aexZyNVyselBejvSmqxq70VIJksRQgxGoeJ1Q==", - "license": "MIT" - }, - "node_modules/three-bmfont-text": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/three-bmfont-text/-/three-bmfont-text-2.3.0.tgz", - "integrity": "sha512-HG6QHR129cNMGBhMgLsyKJiNW5r2XI+2P1JyjJl/9+D1e0iySzVZl3r8peTFpoJzPODl5Ckb8nu0U1zWjc6dNg==", - "dependencies": { - "array-shuffle": "^1.0.1", - "inherits": "^2.0.1", - "layout-bmfont-text": "^1.2.0", - "nice-color-palettes": "^1.0.1", - "object-assign": "^4.0.1", - "quad-indices": "^2.0.1", - "three-buffer-vertex-data": "^1.0.0" - } - }, - "node_modules/three-buffer-vertex-data": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/three-buffer-vertex-data/-/three-buffer-vertex-data-1.1.0.tgz", - "integrity": "sha1-zyKOeEJ2ZYhLlhpMq+H4XtOfgrE=", - "dependencies": { - "flatten-vertex-data": "^1.0.0" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "node_modules/through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dependencies": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - }, - "node_modules/through2/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "node_modules/through2/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/through2/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" - }, - "node_modules/timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/timers-browserify": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", - "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", - "dependencies": { - "process": "~0.11.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/timers-browserify/node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" - }, - "node_modules/to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-iso-string": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/to-iso-string/-/to-iso-string-0.0.2.tgz", - "integrity": "sha1-TcGeZk38y+Jb2NtQiwDG2hWCVdE=", - "deprecated": "to-iso-string has been deprecated, use @segment/to-iso-string instead." - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" - }, - "node_modules/tty-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", - "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==" - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz", - "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=", - "engines": { - "node": "*" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, - "node_modules/uglify-es": { - "version": "3.3.10", - "resolved": "git+ssh://git@github.com/mishoo/UglifyJS2.git#569757d14dbbe04f66af65d7bf0600b3a75efd96", - "license": "BSD-2-Clause", - "dependencies": { - "commander": "~2.14.1", - "source-map": "~0.6.1" - }, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/uglify-es/node_modules/commander": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz", - "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==" - }, - "node_modules/uglify-es/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/uglify-js": { - "name": "uglify-es", - "version": "3.3.10", - "resolved": "git+ssh://git@github.com/mishoo/UglifyJS2.git#569757d14dbbe04f66af65d7bf0600b3a75efd96", - "integrity": "sha512-875XHREePaji3eGpJp0mqveaZq03AoswEHsFZj/oIUYd7RRODt6rkTePxR6QA2/Il1nzKtTq5dmxmu6bAnxsFg==", - "license": "BSD-2-Clause", - "dependencies": { - "commander": "~2.14.1", - "source-map": "~0.6.1" - }, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/uglify-js/node_modules/commander": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz", - "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==" - }, - "node_modules/uglify-js/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "optional": true - }, - "node_modules/uglifyjs-webpack-plugin": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", - "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", - "hasInstallScript": true, - "dependencies": { - "source-map": "^0.5.6", - "uglify-js": "^2.8.29", - "webpack-sources": "^1.0.1" - }, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - }, - "peerDependencies": { - "webpack": "^1.9 || ^2 || ^2.1.0-beta || ^2.2.0-rc || ^3.0.0" - } - }, - "node_modules/uglifyjs-webpack-plugin/node_modules/camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/uglifyjs-webpack-plugin/node_modules/cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dependencies": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" - } - }, - "node_modules/uglifyjs-webpack-plugin/node_modules/uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dependencies": { - "source-map": "~0.5.1", - "yargs": "~3.10.0" - }, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - }, - "optionalDependencies": { - "uglify-to-browserify": "~1.0.0" - } - }, - "node_modules/uglifyjs-webpack-plugin/node_modules/wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/uglifyjs-webpack-plugin/node_modules/yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dependencies": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" - } - }, - "node_modules/ultron": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", - "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=" - }, - "node_modules/umd": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", - "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", - "bin": { - "umd": "bin/cli.js" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", - "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", - "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" - }, - "node_modules/uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" - }, - "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unzip-js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unzip-js/-/unzip-js-1.0.0.tgz", - "integrity": "sha512-tpEM1avg2vW8EDvt1JlOY5vk8Di6p01AWgn4Qcf/Qb2z/5dz0SqX61iq8rfmDk5V3uZve45Wm0jiX9i28+pRvg==", - "dependencies": { - "blob-slicer": "^1.0.0", - "buffer-crc32": "^0.2.13" - } - }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist-lint": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/uri-js/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "deprecated": "Please see https://github.com/lydell/urix#deprecated" - }, - "node_modules/url": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", - "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/url-loader": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-1.1.2.tgz", - "integrity": "sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==", - "dependencies": { - "loader-utils": "^1.1.0", - "mime": "^2.0.3", - "schema-utils": "^1.0.0" - }, - "engines": { - "node": ">= 6.9.0" - }, - "peerDependencies": { - "webpack": "^3.0.0 || ^4.0.0" - } - }, - "node_modules/url-loader/node_modules/mime": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", - "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/url-set-query": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", - "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=" - }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - }, - "node_modules/url2": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/url2/-/url2-0.0.0.tgz", - "integrity": "sha1-Tqq9HVw6yQ1iq0SFyZhCKGWgSxo=" - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/user-home": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", - "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", - "dependencies": { - "os-homedir": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/useragent": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", - "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", - "dependencies": { - "lru-cache": "4.1.x", - "tmp": "0.0.x" - } - }, - "node_modules/util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "dependencies": { - "inherits": "2.0.3" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "node_modules/util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "dependencies": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "node_modules/util/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", - "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz", - "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==" - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vendors": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/vm-browserify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "dependencies": { - "indexof": "0.0.1" - } - }, - "node_modules/void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchify": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/watchify/-/watchify-3.2.1.tgz", - "integrity": "sha1-Gbz9e/y/Qdf0/jwpdAvORfdk4gM=", - "dependencies": { - "browserify": "^10.0.0", - "chokidar": "^1.0.0", - "defined": "^1.0.0", - "outpipe": "^1.1.0", - "through2": "~0.6.3", - "xtend": "^4.0.0" - }, - "bin": { - "watchify": "bin/cmd.js" - } - }, - "node_modules/watchify/node_modules/anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "dependencies": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" - } - }, - "node_modules/watchify/node_modules/arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dependencies": { - "arr-flatten": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchify/node_modules/array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchify/node_modules/braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dependencies": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchify/node_modules/chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", - "dependencies": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" - }, - "optionalDependencies": { - "fsevents": "^1.0.0" - } - }, - "node_modules/watchify/node_modules/expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dependencies": { - "is-posix-bracket": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchify/node_modules/extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dependencies": { - "is-extglob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchify/node_modules/glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dependencies": { - "is-glob": "^2.0.0" - } - }, - "node_modules/watchify/node_modules/is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchify/node_modules/is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dependencies": { - "is-extglob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchify/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchify/node_modules/micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dependencies": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchify/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", - "dependencies": { - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" - }, - "optionalDependencies": { - "chokidar": "^3.4.1", - "watchpack-chokidar2": "^2.0.1" - } - }, - "node_modules/watchpack-chokidar2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", - "optional": true, - "dependencies": { - "chokidar": "^2.1.8" - } - }, - "node_modules/watchpack/node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "optional": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/watchpack/node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/watchpack/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "optional": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/watchpack/node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "optional": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/watchpack/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "optional": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/watchpack/node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/watchpack/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==", - "optional": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/watchpack/node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "optional": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/watchpack/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==", - "optional": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/watchpack/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "optional": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/watchpack/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==", - "optional": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/weak-map": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/weak-map/-/weak-map-1.0.0.tgz", - "integrity": "sha1-tm5Wqd8L0lp2u/G1FNsSkIBhSjc=" - }, - "node_modules/webpack": { - "version": "4.46.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", - "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.5.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=6.11.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - }, - "webpack-command": { - "optional": true - } - } - }, - "node_modules/webpack-cli": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.10.tgz", - "integrity": "sha512-u1dgND9+MXaEt74sJR4PR7qkPxXUSQ0RXYq8x1L6Jg1MYVEmGPrH6Ah6C4arD4r0J1P5HKjRqpab36k0eIzPqg==", - "dependencies": { - "chalk": "2.4.2", - "cross-spawn": "6.0.5", - "enhanced-resolve": "4.1.0", - "findup-sync": "3.0.0", - "global-modules": "2.0.0", - "import-local": "2.0.0", - "interpret": "1.2.0", - "loader-utils": "1.2.3", - "supports-color": "6.1.0", - "v8-compile-cache": "2.0.3", - "yargs": "13.2.4" - }, - "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=6.11.5" - }, - "peerDependencies": { - "webpack": "4.x.x" - } - }, - "node_modules/webpack-cli/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/webpack-cli/node_modules/detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-cli/node_modules/enhanced-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", - "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", - "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/webpack-cli/node_modules/expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-cli/node_modules/findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", - "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/webpack-cli/node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-cli/node_modules/global-modules/node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-cli/node_modules/global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dependencies": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-cli/node_modules/resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dependencies": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-cli/node_modules/resolve-dir/node_modules/global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dependencies": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-cli/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-middleware": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", - "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", - "dependencies": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "webpack": "^4.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/mime": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", - "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/webpack-dev-server": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.9.0.tgz", - "integrity": "sha512-E6uQ4kRrTX9URN9s/lIbqTAztwEPdvzVrcmHE8EQ9YnuT9J8Es5Wrd8n9BKg1a0oZ5EgEke/EQFgUsp18dSTBw==", - "dependencies": { - "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.1.8", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "debug": "^4.1.1", - "del": "^4.1.1", - "express": "^4.17.1", - "html-entities": "^1.2.1", - "http-proxy-middleware": "0.19.1", - "import-local": "^2.0.0", - "internal-ip": "^4.3.0", - "ip": "^1.1.5", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "loglevel": "^1.6.4", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.25", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.7", - "semver": "^6.3.0", - "serve-index": "^1.9.1", - "sockjs": "0.3.19", - "sockjs-client": "1.4.0", - "spdy": "^4.0.1", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "12.0.5" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 6.11.5" - }, - "peerDependencies": { - "webpack": "^4.0.0" - } - }, - "node_modules/webpack-dev-server/node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-dev-server/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dependencies": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "node_modules/webpack-dev-server/node_modules/cliui/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-dev-server/node_modules/get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" - }, - "node_modules/webpack-dev-server/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-dev-server/node_modules/opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "dependencies": { - "is-wsl": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-dev-server/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - }, - "node_modules/webpack-dev-server/node_modules/require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" - }, - "node_modules/webpack-dev-server/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/webpack-dev-server/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-dev-server/node_modules/string-width/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-dev-server/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/webpack-dev-server/node_modules/wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/wrap-ansi/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/webpack-dev-server/node_modules/yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", - "dependencies": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" - } - }, - "node_modules/webpack-dev-server/node_modules/yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "node_modules/webpack-glsl-loader": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/webpack-glsl-loader/-/webpack-glsl-loader-1.0.1.tgz", - "integrity": "sha1-cqDjAZK9V5R9YNbVBckVvmgNCsw=", - "dependencies": { - "fs": "0.0.2", - "path": "^0.11.14" - } - }, - "node_modules/webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "dependencies": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/webpack-sources": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.0.1.tgz", - "integrity": "sha512-05tMxipUCwHqYaVS8xc7sYPTly8PzXayRCB4dTxLhWTqlKUiwH6ezmEe0OSreL1c30LAuA3Zqmc+uEBUGFJDjw==", - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.5.3" - } - }, - "node_modules/webpack/node_modules/acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/webpack/node_modules/ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", - "dependencies": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "node_modules/webpack/node_modules/ajv-keywords": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", - "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/webpack/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/webpack/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", - "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", - "dependencies": { - "http-parser-js": ">=0.4.0 <0.4.11", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", - "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/webvr-polyfill": { - "version": "0.10.11", - "resolved": "https://registry.npmjs.org/webvr-polyfill/-/webvr-polyfill-0.10.11.tgz", - "integrity": "sha512-mzTuMpC3W/aKmm5QxYtTzXAxhVo3tR4c0D5Kihk8Q38GVxiCOvS4Ga4LBN8CsFVpXu1WkGeuf/hMzF75iWYiyA==", - "dependencies": { - "cardboard-vr-display": "^1.0.18" - } - }, - "node_modules/webvr-polyfill-dpdb": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/webvr-polyfill-dpdb/-/webvr-polyfill-dpdb-1.0.17.tgz", - "integrity": "sha512-WOd4s0gSrb0fOlOtIpqFbwLBATax/ka7DFAB/u+C9KJBBJk1/x/FZlFynOqsNrUxMJniOdO7ViFJwVdMScMQzA==" - }, - "node_modules/whatwg-fetch": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.4.0.tgz", - "integrity": "sha512-rsum2ulz2iuZH08mJkT0Yi6JnKhwdw4oeyMjokgxd+mmqYSd9cPpOQf01TIWgjxG/U4+QR+AwKq6lSbXVxkyoQ==" - }, - "node_modules/whet.extend": { - "version": "0.9.9", - "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", - "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, - "node_modules/window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/word-wrapper": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/word-wrapper/-/word-wrapper-1.0.7.tgz", - "integrity": "sha1-HxSv6/Zt/fD+9V79NxhO+9CMKLY=" - }, - "node_modules/wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dependencies": { - "errno": "~0.1.7" - } - }, - "node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "engines": { - "node": ">=4" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "node_modules/wrench": { - "version": "1.5.8", - "resolved": "https://registry.npmjs.org/wrench/-/wrench-1.5.8.tgz", - "integrity": "sha1-ejHJf3hpJG12xc8vXJd6HEyOWrU=", - "deprecated": "wrench.js is deprecated! You should check out fs-extra (https://github.com/jprichardson/node-fs-extra) for any operations you were using wrench for. Thanks for all the usage over the years.", - "engines": { - "node": ">=0.1.97" - } - }, - "node_modules/write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dependencies": { - "mkdirp": "^0.5.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ws": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", - "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", - "dependencies": { - "options": ">=0.0.5", - "ultron": "1.0.x" - } - }, - "node_modules/wtf-8": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", - "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=" - }, - "node_modules/xhr": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz", - "integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==", - "dependencies": { - "global": "~4.3.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/xhr-request": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", - "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", - "dependencies": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" - } - }, - "node_modules/xml-escape": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/xml-escape/-/xml-escape-1.0.0.tgz", - "integrity": "sha1-AJY9aXsq3wwYXE4E5zF0upsojrI=" - }, - "node_modules/xml-parse-from-string": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", - "integrity": "sha1-qQKekp09vN7RafPG4oI42VpdWig=" - }, - "node_modules/xml2js": { - "version": "0.4.22", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.22.tgz", - "integrity": "sha512-MWTbxAQqclRSTnehWWe5nMKzI3VmJ8ltiJEco8akcC6j3miOhjjfzKum5sId+CWhfxdOs/1xauYr8/ZDBtQiRw==", - "dependencies": { - "sax": ">=0.6.0", - "util.promisify": "~1.0.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/xmlhttprequest": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", - "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/xmlhttprequest-ssl": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", - "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" - }, - "node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - }, - "node_modules/yargs": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", - "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", - "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "os-locale": "^3.1.0", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.0" - } - }, - "node_modules/yargs-parser": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", - "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "node_modules/yargs-parser/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "engines": { - "node": ">=4" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" - }, - "node_modules/zip-loader": { - "version": "1.1.0", - "resolved": "git+ssh://git@github.com/ngokevin/ziploader.git#b50d8d21725ad0597e01f7e901bf0e92c73b26ae", - "integrity": "sha512-Xwdw2kBKxoQF9yCCB3ll0kuhWpzySaiVh2NSocDbY+aTnsJENKcDP4C6QR36q2O7o3V5QjRtpMtetFzSanwCCA==", - "license": "MIT", - "dependencies": { - "pako": "^1.0.6" - } - }, - "node_modules/zip-loader/node_modules/pako": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", - "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==" - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/cli": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.19.3.tgz", - "integrity": "sha512-643/TybmaCAe101m2tSVHi9UKpETXP9c/Ff4mD2tAwkdP6esKIfaauZFc67vGEM6r9fekbEGid+sZhbEnSe3dg==", - "requires": { - "@jridgewell/trace-mapping": "^0.3.8", - "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3", - "chokidar": "^3.4.0", - "commander": "^4.0.1", - "convert-source-map": "^1.1.0", - "fs-readdir-recursive": "^1.1.0", - "glob": "^7.2.0", - "make-dir": "^2.1.0", - "slash": "^2.0.0" - }, - "dependencies": { - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "optional": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "optional": true - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "optional": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "optional": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "optional": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "optional": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "optional": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "optional": true - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "optional": true, - "requires": { - "picomatch": "^2.2.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==", - "optional": true, - "requires": { - "is-number": "^7.0.0" - } - } - } - }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/compat-data": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.5.tgz", - "integrity": "sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==" - }, - "@babel/core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz", - "integrity": "sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==", - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.5", - "@babel/parser": "^7.20.5", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/generator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz", - "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==", - "requires": { - "@babel/types": "^7.20.5", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", - "requires": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", - "requires": { - "@babel/compat-data": "^7.20.0", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.5.tgz", - "integrity": "sha512-3RCdA/EmEaikrhayahwToF0fpweU/8o2p8vhc1c/1kftHOdTKuC65kik/TLc+qfbS8JKw4qqJbne4ovICDhmww==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.19.1", - "@babel/helper-split-export-declaration": "^7.18.6" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz", - "integrity": "sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.2.1" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" - }, - "regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "requires": { - "regenerate": "^1.4.2" - } - }, - "regexpu-core": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", - "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==", - "requires": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsgen": "^0.7.1", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - } - }, - "regjsgen": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", - "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" - }, - "regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "requires": { - "jsesc": "~0.5.0" - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==" - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==" - }, - "unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" - } - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "requires": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", - "requires": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", - "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", - "requires": { - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-replace-supers": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", - "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.19.1", - "@babel/types": "^7.19.0" - } - }, - "@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "requires": { - "@babel/types": "^7.20.2" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", - "requires": { - "@babel/types": "^7.20.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" - }, - "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" - }, - "@babel/helper-wrap-function": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", - "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", - "requires": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" - } - }, - "@babel/helpers": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz", - "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==", - "requires": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" - } - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz", - "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==" - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", - "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-proposal-optional-chaining": "^7.18.9" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz", - "integrity": "sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", - "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-proposal-decorators": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.5.tgz", - "integrity": "sha512-Lac7PpRJXcC3s9cKsBfl+uc+DYXU5FD06BrTFunQO6QIQT+DwyzDPURAowI3bcvD1dZF/ank1Z5rstUJn3Hn4Q==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.19.1", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/plugin-syntax-decorators": "^7.19.0" - } - }, - "@babel/plugin-proposal-do-expressions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-do-expressions/-/plugin-proposal-do-expressions-7.18.6.tgz", - "integrity": "sha512-ddToGCONJhCuL+l4FhtGnKl5ZYCj9fDVFiqiCdQDpeIbVn/NvMeSib+7T1/rk08jRafae4qNiP8OnJyuqlsuYA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-do-expressions": "^7.18.6" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-default-from": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.18.10.tgz", - "integrity": "sha512-5H2N3R2aQFxkV4PIBUR/i7PUSwgTZjouJKzI8eKswfIjT0PhvzkPn0t0wIS5zn6maQuvtT0t1oHtMUz61LOuow==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-default-from": "^7.18.6" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-function-bind": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-function-bind/-/plugin-proposal-function-bind-7.18.9.tgz", - "integrity": "sha512-9RfxqKkRBCCT0xoBl9AqieCMscJmSAL9HYixGMWH549jUpT9csWWK/HEYZEx9t9iW/PRSXgX95x9bDlgtAJGFA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-function-bind": "^7.18.6" - } - }, - "@babel/plugin-proposal-function-sent": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-function-sent/-/plugin-proposal-function-sent-7.18.6.tgz", - "integrity": "sha512-UdaOKPOLPt0O+Xu26tnw6oAZMLXhk+yMrXOzn6kAzTHBnWHJsoN1hlrgxFAQ+FRLS0ql1oYIQ2phvoFzmN3GMw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-wrap-function": "^7.18.6", - "@babel/plugin-syntax-function-sent": "^7.18.6" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", - "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz", - "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==", - "requires": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.1" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", - "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-pipeline-operator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-pipeline-operator/-/plugin-proposal-pipeline-operator-7.18.9.tgz", - "integrity": "sha512-Pc33e6m8f4MJhRXVCUwiKZNtEm+W2CUPHIL0lyJNtkp+w6d75CLw3gsBKQ81VAMUgT9jVPIEU8gwJ5nJgmJ1Ag==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-pipeline-operator": "^7.18.6" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz", - "integrity": "sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-proposal-throw-expressions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-throw-expressions/-/plugin-proposal-throw-expressions-7.18.6.tgz", - "integrity": "sha512-WHOrJyhGoGrdtW480L79cF7Iq/gZDZ/z6OqK7mVyFR5I37dTpog/wNgb6hmaM3HYZtULEJl++7VaMWkNZsOcHg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-throw-expressions": "^7.18.6" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-decorators": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.19.0.tgz", - "integrity": "sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-syntax-do-expressions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-do-expressions/-/plugin-syntax-do-expressions-7.18.6.tgz", - "integrity": "sha512-kTogvOsjBTVOSZtkkziiXB5hwGXqwhq2gBXDaiWVruRLDT7C2GqfbsMnicHJ7ePq2GE8UJeWS34YbNP6yDhwUA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-default-from": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.18.6.tgz", - "integrity": "sha512-Kr//z3ujSVNx6E9z9ih5xXXMqK07VVTuqPmqGe6Mss/zW5XPeLZeSDZoP9ab/hT4wPKqAgjl2PnhPrcpk8Seew==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-function-bind": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-function-bind/-/plugin-syntax-function-bind-7.18.6.tgz", - "integrity": "sha512-wZN0Aq/AScknI9mKGcR3TpHdASMufFGaeJgc1rhPmLtZ/PniwjePSh8cfh8tXMB3U4kh/3cRKrLjDtedejg8jQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-function-sent": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-function-sent/-/plugin-syntax-function-sent-7.18.6.tgz", - "integrity": "sha512-f3OJHIlFIkg+cP1Hfo2SInLhsg0pz2Ikmgo7jMdIIKC+3jVXQlHB0bgSapOWxeWI0SU28qIWmfn5ZKu1yPJHkg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", - "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-pipeline-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-pipeline-operator/-/plugin-syntax-pipeline-operator-7.18.6.tgz", - "integrity": "sha512-pFtIdQomJtkTHWcNsGXhjJ5YUkL+AxJnP4G+Ol85UO6uT2fpHTPYLLE5bBeRA9cxf25qa/VKsJ3Fi67Gyqe3rA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-throw-expressions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-throw-expressions/-/plugin-syntax-throw-expressions-7.18.6.tgz", - "integrity": "sha512-rp1CqEZXGv1z1YZ3qYffBH3rhnOxrTwQG8fh2yqulTurwv9zu3Gthfd+niZBLSOi1rY6146TgF+JmVeDXaX4TQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", - "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", - "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.5.tgz", - "integrity": "sha512-WvpEIW9Cbj9ApF3yJCjIEEf1EiNJLtXagOrL5LNWEZOo3jv8pmPoYTSNJQvqej8OavVlgOoOPw6/htGZro6IkA==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz", - "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.19.1", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", - "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz", - "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "requires": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz", - "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==", - "requires": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", - "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", - "requires": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-simple-access": "^7.19.4" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz", - "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==", - "requires": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-validator-identifier": "^7.19.1" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", - "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.5.tgz", - "integrity": "sha512-h7plkOmcndIUWXZFLgpbrh2+fXAi47zcUX7IrOQuZdLD0I0KvjJ6cvo3BEcAOsDOcZhVKGJqv07mkSqK0y2isQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", - "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "regenerator-transform": "^0.15.1" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", - "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/preset-env": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", - "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", - "requires": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.20.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.20.2", - "@babel/plugin-transform-classes": "^7.20.2", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.20.2", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.19.6", - "@babel/plugin-transform-modules-commonjs": "^7.19.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.6", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.20.1", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.19.0", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/runtime": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.6.tgz", - "integrity": "sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA==", - "requires": { - "regenerator-runtime": "^0.13.11" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - } - } - }, - "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" - } - }, - "@babel/traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz", - "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==", - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.5", - "@babel/types": "^7.20.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz", - "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", - "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - } - }, - "@firebase/analytics": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.4.2.tgz", - "integrity": "sha512-WCoeUAO3lP6ikHJ3/XYptV90fpTidzTS9VpAfiVQK8gl9w1zvvKSavY9U3+EVG3frOPCFdE5DBO4MYrUw4gaqw==", - "requires": { - "@firebase/analytics-types": "0.3.1", - "@firebase/component": "0.1.18", - "@firebase/installations": "0.4.16", - "@firebase/logger": "0.2.6", - "@firebase/util": "0.3.1", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" - } - } - }, - "@firebase/analytics-types": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.3.1.tgz", - "integrity": "sha512-63vVJ5NIBh/JF8l9LuPrQYSzFimk7zYHySQB4Dk9rVdJ8kV/vGQoVTvRu1UW05sEc2Ug5PqtEChtTHU+9hvPcA==" - }, - "@firebase/app": { - "version": "0.6.10", - "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.6.10.tgz", - "integrity": "sha512-USg/AbgqBERhY0LayrKmmp7pka08WPa7OlFI46kaNW1pA2mUNf/ifTaxhCr2hGg/eWI0zPhpbEvtGQhSJ/QqWg==", - "requires": { - "@firebase/app-types": "0.6.1", - "@firebase/component": "0.1.18", - "@firebase/logger": "0.2.6", - "@firebase/util": "0.3.1", - "dom-storage": "2.1.0", - "tslib": "^1.11.1", - "xmlhttprequest": "1.8.0" - }, - "dependencies": { - "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" - } - } - }, - "@firebase/app-types": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.6.1.tgz", - "integrity": "sha512-L/ZnJRAq7F++utfuoTKX4CLBG5YR7tFO3PLzG1/oXXKEezJ0kRL3CMRoueBEmTCzVb/6SIs2Qlaw++uDgi5Xyg==" - }, - "@firebase/auth": { - "version": "0.14.9", - "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.14.9.tgz", - "integrity": "sha512-PxYa2r5qUEdheXTvqROFrMstK8W4uPiP7NVfp+2Bec+AjY5PxZapCx/YFDLkU0D7YBI82H74PtZrzdJZw7TJ4w==", - "requires": { - "@firebase/auth-types": "0.10.1" - } - }, - "@firebase/auth-interop-types": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.1.5.tgz", - "integrity": "sha512-88h74TMQ6wXChPA6h9Q3E1Jg6TkTHep2+k63OWg3s0ozyGVMeY+TTOti7PFPzq5RhszQPQOoCi59es4MaRvgCw==", - "requires": {} - }, - "@firebase/auth-types": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.10.1.tgz", - "integrity": "sha512-/+gBHb1O9x/YlG7inXfxff/6X3BPZt4zgBv4kql6HEmdzNQCodIRlEYnI+/da+lN+dha7PjaFH7C7ewMmfV7rw==", - "requires": {} - }, - "@firebase/component": { - "version": "0.1.18", - "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.1.18.tgz", - "integrity": "sha512-c8gd1k/e0sbBTR0xkLIYUN8nVkA0zWxcXGIvdfYtGEsNw6n7kh5HkcxKXOPB8S7bcPpqZkGgBIfvd94IyG2gaQ==", - "requires": { - "@firebase/util": "0.3.1", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" - } - } - }, - "@firebase/database": { - "version": "0.6.11", - "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.6.11.tgz", - "integrity": "sha512-QOHhB7+CdjVhEXG9CyX0roA9ARJcEuwbozz0Bix+ULuZqjQ58KUFHMH1apW6EEiUP22d/mYD7dNXsUGshjL9PA==", - "requires": { - "@firebase/auth-interop-types": "0.1.5", - "@firebase/component": "0.1.18", - "@firebase/database-types": "0.5.2", - "@firebase/logger": "0.2.6", - "@firebase/util": "0.3.1", - "faye-websocket": "0.11.3", - "tslib": "^1.11.1" - }, - "dependencies": { - "faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" - } - } - }, - "@firebase/database-types": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.5.2.tgz", - "integrity": "sha512-ap2WQOS3LKmGuVFKUghFft7RxXTyZTDr0Xd8y2aqmWsbJVjgozi0huL/EUMgTjGFrATAjcf2A7aNs8AKKZ2a8g==", - "requires": { - "@firebase/app-types": "0.6.1" - } - }, - "@firebase/firestore": { - "version": "1.16.5", - "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-1.16.5.tgz", - "integrity": "sha512-GjCL4Ngy46qSdXAg9obXBuIKG2m/7a21dQktqRPaPH9xpHnymq8LxUK7sdUfyY8FBIQp6Si6O61e9fko4FjSMw==", - "requires": { - "@firebase/component": "0.1.18", - "@firebase/firestore-types": "1.12.0", - "@firebase/logger": "0.2.6", - "@firebase/util": "0.3.1", - "@firebase/webchannel-wrapper": "0.3.0", - "@grpc/grpc-js": "^1.0.0", - "@grpc/proto-loader": "^0.5.0", - "node-fetch": "2.6.0", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" - } - } - }, - "@firebase/firestore-types": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-1.12.0.tgz", - "integrity": "sha512-OqNxVb63wPZdUc7YnpacAW1WNIMSKERSewCRi+unCQ0YI0KNfrDSypyGCyel+S3GdOtKMk9KnvDknaGbnaFX4g==", - "requires": {} - }, - "@firebase/functions": { - "version": "0.4.50", - "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.4.50.tgz", - "integrity": "sha512-eBsNrUm/Jfc/xsQXmxQRSkEg6pwHlMd2hice8N90/EeqgwqS/SCvC+O9cJITLlXroAghb9jWDWRvAkDU/TOhpw==", - "requires": { - "@firebase/component": "0.1.18", - "@firebase/functions-types": "0.3.17", - "@firebase/messaging-types": "0.5.0", - "isomorphic-fetch": "2.2.1", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" - } - } - }, - "@firebase/functions-types": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.3.17.tgz", - "integrity": "sha512-DGR4i3VI55KnYk4IxrIw7+VG7Q3gA65azHnZxo98Il8IvYLr2UTBlSh72dTLlDf25NW51HqvJgYJDKvSaAeyHQ==" - }, - "@firebase/installations": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.4.16.tgz", - "integrity": "sha512-gqv3IrBUmPWKpH8wLJ0fZcAH1NEXwQhqjqnK3cQXRcIkEARP430cmIAaj7CcPdgdemHX9HqwJG+So/yBHIYXPA==", - "requires": { - "@firebase/component": "0.1.18", - "@firebase/installations-types": "0.3.4", - "@firebase/util": "0.3.1", - "idb": "3.0.2", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" - } - } - }, - "@firebase/installations-types": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.3.4.tgz", - "integrity": "sha512-RfePJFovmdIXb6rYwtngyxuEcWnOrzdZd9m7xAW0gRxDIjBT20n3BOhjpmgRWXo/DAxRmS7bRjWAyTHY9cqN7Q==", - "requires": {} - }, - "@firebase/logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.2.6.tgz", - "integrity": "sha512-KIxcUvW/cRGWlzK9Vd2KB864HlUnCfdTH0taHE0sXW5Xl7+W68suaeau1oKNEqmc3l45azkd4NzXTCWZRZdXrw==" - }, - "@firebase/messaging": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.7.0.tgz", - "integrity": "sha512-PTD5pQw9QremOjiWWZYOkzcX6OKByMvlG+NQXdTnyL3kLbE01Bdp9iWhkH6ipNpHYMiwcK1RZD4TLkYVBviBsw==", - "requires": { - "@firebase/component": "0.1.18", - "@firebase/installations": "0.4.16", - "@firebase/messaging-types": "0.5.0", - "@firebase/util": "0.3.1", - "idb": "3.0.2", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" - } - } - }, - "@firebase/messaging-types": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@firebase/messaging-types/-/messaging-types-0.5.0.tgz", - "integrity": "sha512-QaaBswrU6umJYb/ZYvjR5JDSslCGOH6D9P136PhabFAHLTR4TWjsaACvbBXuvwrfCXu10DtcjMxqfhdNIB1Xfg==", - "requires": {} - }, - "@firebase/performance": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.4.0.tgz", - "integrity": "sha512-LZG89G2wAjTRsIcuewIx152+DyRzQf8UtPCAjifkFiMcAY4GmZZKeIbIC3b4oQDwTgH5i0IKKd4EOv7dLD97gw==", - "requires": { - "@firebase/component": "0.1.18", - "@firebase/installations": "0.4.16", - "@firebase/logger": "0.2.6", - "@firebase/performance-types": "0.0.13", - "@firebase/util": "0.3.1", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" - } - } - }, - "@firebase/performance-types": { - "version": "0.0.13", - "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.0.13.tgz", - "integrity": "sha512-6fZfIGjQpwo9S5OzMpPyqgYAUZcFzZxHFqOyNtorDIgNXq33nlldTL/vtaUZA8iT9TT5cJlCrF/jthKU7X21EA==" - }, - "@firebase/polyfill": { - "version": "0.3.36", - "resolved": "https://registry.npmjs.org/@firebase/polyfill/-/polyfill-0.3.36.tgz", - "integrity": "sha512-zMM9oSJgY6cT2jx3Ce9LYqb0eIpDE52meIzd/oe/y70F+v9u1LDqk5kUF5mf16zovGBWMNFmgzlsh6Wj0OsFtg==", - "requires": { - "core-js": "3.6.5", - "promise-polyfill": "8.1.3", - "whatwg-fetch": "2.0.4" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - }, - "whatwg-fetch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", - "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" - } - } - }, - "@firebase/remote-config": { - "version": "0.1.27", - "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.1.27.tgz", - "integrity": "sha512-BGjmQomRKNf+yGJ/3/5Kw6zNLM5jY9oTVjLmYsQXf6U+HMgz6J2H6EVGc1bZW7YSsvak8f6DomxegQtvfvwaMw==", - "requires": { - "@firebase/component": "0.1.18", - "@firebase/installations": "0.4.16", - "@firebase/logger": "0.2.6", - "@firebase/remote-config-types": "0.1.9", - "@firebase/util": "0.3.1", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" - } - } - }, - "@firebase/remote-config-types": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.1.9.tgz", - "integrity": "sha512-G96qnF3RYGbZsTRut7NBX0sxyczxt1uyCgXQuH/eAfUCngxjEGcZQnBdy6mvSdqdJh5mC31rWPO4v9/s7HwtzA==" - }, - "@firebase/storage": { - "version": "0.3.42", - "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.3.42.tgz", - "integrity": "sha512-FqHDWZPhATQeOFBQUZPsQO7xhnGBxprYVDb9eIjCnh1yRl6WAv/OQGHOF+JU5+H+YkjsKTtr/5VjyDl3Y0UHxw==", - "requires": { - "@firebase/component": "0.1.18", - "@firebase/storage-types": "0.3.13", - "@firebase/util": "0.3.1", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" - } - } - }, - "@firebase/storage-types": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.3.13.tgz", - "integrity": "sha512-pL7b8d5kMNCCL0w9hF7pr16POyKkb3imOW7w0qYrhBnbyJTdVxMWZhb0HxCFyQWC0w3EiIFFmxoz8NTFZDEFog==", - "requires": {} - }, - "@firebase/util": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@firebase/util/-/util-0.3.1.tgz", - "integrity": "sha512-zjVd9rfL08dRRdZILFn1RZTHb1euCcnD9N/9P56gdBcm2bvT5XsCC4G6t5toQBpE/H/jYe5h6MZMqfLu3EQLXw==", - "requires": { - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" - } - } - }, - "@firebase/webchannel-wrapper": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.3.0.tgz", - "integrity": "sha512-VniCGPIgSGNEgOkh5phb3iKmSGIzcwrccy3IomMFRWPCMiCk2y98UQNJEoDs1yIHtZMstVjYWKYxnunIGzC5UQ==" - }, - "@grpc/grpc-js": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.1.5.tgz", - "integrity": "sha512-2huf5z85TdZI4nLmJQ9Zdfd+6vmIyBDs7B4L71bTaHKA9pRsGKAH24XaktMk/xneKJIqAgeIZtg1cyivVZtvrg==", - "requires": { - "@grpc/proto-loader": "^0.6.0-pre14", - "@types/node": "^12.12.47", - "google-auth-library": "^6.0.0", - "semver": "^6.2.0" - }, - "dependencies": { - "@grpc/proto-loader": { - "version": "0.6.0-pre9", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.0-pre9.tgz", - "integrity": "sha512-oM+LjpEjNzW5pNJjt4/hq1HYayNeQT+eGrOPABJnYHv7TyNPDNzkQ76rDYZF86X5swJOa4EujEMzQ9iiTdPgww==", - "requires": { - "@types/long": "^4.0.1", - "lodash.camelcase": "^4.3.0", - "long": "^4.0.0", - "protobufjs": "^6.9.0", - "yargs": "^15.3.1" - } - }, - "@types/node": { - "version": "12.12.54", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.54.tgz", - "integrity": "sha512-ge4xZ3vSBornVYlDnk7yZ0gK6ChHf/CHB7Gl1I0Jhah8DDnEQqBzgohYG4FX4p81TNirSETOiSyn+y1r9/IR6w==" - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "@grpc/proto-loader": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.5.5.tgz", - "integrity": "sha512-WwN9jVNdHRQoOBo9FDH7qU+mgfjPc8GygPYms3M+y3fbQLfnCe/Kv/E01t7JRgnrsOHH8euvSbed3mIalXhwqQ==", - "requires": { - "lodash.camelcase": "^4.3.0", - "protobufjs": "^6.8.6" - } - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "@nicolo-ribaudo/chokidar-2": { - "version": "2.1.8-no-fsevents.3", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", - "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==", - "optional": true - }, - "@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" - }, - "@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" - }, - "@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", - "requires": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" - }, - "@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" - }, - "@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" - }, - "@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" - }, - "@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" - }, - "@sinonjs/commons": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", - "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", - "peer": true, - "requires": { - "type-detect": "4.0.8" - }, - "dependencies": { - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "peer": true - } - } - }, - "@sinonjs/formatio": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz", - "integrity": "sha512-ls6CAMA6/5gG+O/IdsBcblvnd8qcO/l1TYoNeAzp3wcISOxlPXQEus0mLcdwazEkWjaBdaJ3TaxmNgCLWwvWzg==", - "peer": true, - "requires": { - "samsam": "1.3.0" - } - }, - "@sinonjs/samsam": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.3.tgz", - "integrity": "sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ==", - "peer": true, - "requires": { - "@sinonjs/commons": "^1.3.0", - "array-from": "^2.1.1", - "lodash": "^4.17.15" - } - }, - "@sinonjs/text-encoding": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz", - "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", - "peer": true - }, - "@tweenjs/tween.js": { - "version": "16.11.0", - "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-16.11.0.tgz", - "integrity": "sha1-bnqKPWx4oFfs1WBQh5MEBtTgWAA=" - }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" - }, - "@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" - }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==" - }, - "@types/glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", - "requires": { - "@types/events": "*", - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/long": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", - "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" - }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" - }, - "@types/node": { - "version": "12.12.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.12.tgz", - "integrity": "sha512-MGuvYJrPU0HUwqF7LqvIj50RZUX23Z+m583KBygKYUZLlZ88n6w28XRNJRJgsHukLEnLz6w6SvxZoLgbr5wLqQ==" - }, - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==" - }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==" - }, - "@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==" - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "requires": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==" - }, - "@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "requires": { - "@webassemblyjs/ast": "1.9.0" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==" - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==" - }, - "@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "a-sync-waterfall": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", - "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==" - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "requires": { - "event-target-shim": "^5.0.0" - } - }, - "accepts": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", - "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", - "requires": { - "mime-types": "~2.1.11", - "negotiator": "0.6.1" - } - }, - "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==" - }, - "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", - "requires": { - "acorn": "^3.0.4" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=" - } - } - }, - "acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "requires": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - }, - "dependencies": { - "acorn": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", - "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==" - } - } - }, - "acorn-to-esprima": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/acorn-to-esprima/-/acorn-to-esprima-2.0.8.tgz", - "integrity": "sha1-AD8MZC65ITL0F9NwjxStqCrfLrE=" - }, - "acorn-walk": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.0.0.tgz", - "integrity": "sha512-7Bv1We7ZGuU79zZbb6rRqcpxo3OY+zrdtloZWoyD8fmGX+FeXRjE+iuGkZjSXLVovLzrsvMGMy0EkwA0E0umxg==" - }, - "aframe": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/aframe/-/aframe-0.8.2.tgz", - "integrity": "sha512-kp0c3f17moiilChTsD95q+USB7/12LuusGERSmO2X7Cgq6q6evVv9Oe7qRMZ6Baf26gS0T9Z7umc/e1alqcEVA==", - "requires": { - "@tweenjs/tween.js": "^16.8.0", - "browserify-css": "^0.8.2", - "debug": "github:ngokevin/debug#noTimestamp", - "deep-assign": "^2.0.0", - "document-register-element": "github:dmarcos/document-register-element#8ccc532b7", - "envify": "^3.4.1", - "load-bmfont": "^1.2.3", - "object-assign": "^4.0.1", - "present": "0.0.6", - "promise-polyfill": "^3.1.0", - "style-attr": "^1.0.2", - "three": "github:supermedium/three.js#r90fixMTLLoader", - "three-bmfont-text": "^2.1.0", - "webvr-polyfill": "^0.10.5" - }, - "dependencies": { - "debug": { - "version": "git+ssh://git@github.com/ngokevin/debug.git#ef5f8e66d49ce8bc64c6f282c15f8b7164409e3a", - "integrity": "sha512-rUI9wkpSlmwV2QQcE+jDnEdUPyRG+alTguuGlIJHW1PRMycHzpGy24htiAOiBdg6jYFXduQw4JuA1lvKh3DwzA==", - "from": "debug@github:ngokevin/debug#noTimestamp" - }, - "promise-polyfill": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-3.1.0.tgz", - "integrity": "sha1-YpUrAdBZsRW0MnY7fvRhuA9t9H0=" - } - } - }, - "aframe-aabb-collider-component": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/aframe-aabb-collider-component/-/aframe-aabb-collider-component-3.2.0.tgz", - "integrity": "sha512-54ZRnsyhSfXiQmvWYC3RliVOjfUP3MtL7AL1OeaMx6WSUs2yTfUErrlKEBbEy+CJSG01p0Ev03Unl7wQuchEBw==" - }, - "aframe-atlas-uvs-component": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/aframe-atlas-uvs-component/-/aframe-atlas-uvs-component-2.1.0.tgz", - "integrity": "sha512-+zUnGMcj20Lkbth1/nWJjJoKsoc3jOTj8tuD3vy5BjWDha3cpQhBslxekvFL8LcAl88yv0WwD1kfkmLKQKcdvw==" - }, - "aframe-audioanalyser-component": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/aframe-audioanalyser-component/-/aframe-audioanalyser-component-6.1.0.tgz", - "integrity": "sha512-p/iLMZcKbditZIOH9Op40yk6tr26nGkk4LSc2dimRCVPq6mxtwva2qOPsEUG8Z9QeNNsBSNL1s/v/BLpmF5FzQ==" - }, - "aframe-event-decorators": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/aframe-event-decorators/-/aframe-event-decorators-1.0.2.tgz", - "integrity": "sha512-Y2ngTXj5Zi48mvGyApPtDyXDX78TDhuKriOaMKuDOeInYbw5Z7Irzkamo/GdHKhyCRId/NcaaqgtlOBWlYK+5A==" - }, - "aframe-event-set-component": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/aframe-event-set-component/-/aframe-event-set-component-4.2.1.tgz", - "integrity": "sha512-+mDd2vgFZASqFAVv/ik2sO61rWJPG8psszuZ2Wn4W5/W/LB2W2TfLcOSGta2iJlNvcYsiOUqU/B7ZE9W06Nr1A==" - }, - "aframe-geometry-merger-component": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aframe-geometry-merger-component/-/aframe-geometry-merger-component-2.0.0.tgz", - "integrity": "sha512-+dbpPj6ON5bmChXbXPO8KzpqGURedW2FLMfbESTfKKRKUZB4i4mkS5s1xg4GsKLnJArNBZ+dikszcAZQ04xbTQ==" - }, - "aframe-haptics-component": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/aframe-haptics-component/-/aframe-haptics-component-1.6.3.tgz", - "integrity": "sha512-KQzkvwGzxFfOr0d4nSKoQ69Cdi5oJ2s9pEOzBkEYjS7TFlfZUdWzKpAmQaJumU1CmrhYF6kzXhKkKdHvTvMJQQ==" - }, - "aframe-layout-component": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aframe-layout-component/-/aframe-layout-component-5.3.0.tgz", - "integrity": "sha512-R6M23bLbHgTdYEO5nHHbHukJCq+Oqr/kNQHY3jZqyfJA/rUwvENwOlEbq2ue+/mORkCHVj8CaqkJMWU7BRr6Ow==", - "requires": { - "aframe": "^0.8.2", - "karma-chrome-launcher": "^2.2.0" - } - }, - "aframe-log-component": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/aframe-log-component/-/aframe-log-component-1.0.7.tgz", - "integrity": "sha1-G8gpn5ih4Zie5tjrKDVlC3rMqsw=" - }, - "aframe-orbit-controls": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aframe-orbit-controls/-/aframe-orbit-controls-1.2.0.tgz", - "integrity": "sha512-g3j3Z3Lpf+LxIuNUwteVcB+eJ5jXwYEEzHbbRhdCJ754a9yqlvjt4tjvBq56F5ilpsg/bNUi8cjza8FFvJfd5g==" - }, - "aframe-proxy-event-component": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/aframe-proxy-event-component/-/aframe-proxy-event-component-2.1.0.tgz", - "integrity": "sha512-FJ1+ZQLsETYoZbNwCe3l9xkakOHPYnBgDIE4YJMpWvqiFjiq0+BY6VuFWraZDdluul78b/d+UXIXmdd1JZRYqg==" - }, - "aframe-render-order-component": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/aframe-render-order-component/-/aframe-render-order-component-1.1.0.tgz", - "integrity": "sha512-EYx8kGGYXjAEM8USKZYFBpRHxwwbT0JEMzzQFELrkXuv2/ODDManYzJtHGf5dpmnt5eCR+FCN/UJOgC5Fl5dew==", - "requires": { - "@babel/cli": "^7.2.3", - "@babel/core": "^7.3.3", - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-decorators": "^7.0.0", - "@babel/plugin-proposal-do-expressions": "^7.0.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-export-namespace-from": "^7.0.0", - "@babel/plugin-proposal-function-bind": "^7.0.0", - "@babel/plugin-proposal-function-sent": "^7.0.0", - "@babel/plugin-proposal-json-strings": "^7.0.0", - "@babel/plugin-proposal-logical-assignment-operators": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-proposal-numeric-separator": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.0.0", - "@babel/plugin-proposal-pipeline-operator": "^7.0.0", - "@babel/plugin-proposal-throw-expressions": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.0.0", - "@babel/plugin-syntax-import-meta": "^7.0.0", - "@babel/preset-env": "^7.3.1", - "aframe": "*", - "babel-loader": "^8.0.5", - "babel-preset-minify": "^0.5.0", - "chai": "^3.4.1", - "chai-shallow-deep-equal": "^1.3.0", - "cross-env": "4.0.0", - "ghpages": "^0.0.8", - "karma": "^0.13.15", - "karma-browserify": "^4.4.2", - "karma-chai-shallow-deep-equal": "0.0.4", - "karma-chrome-launcher": "2.0.0", - "karma-env-preprocessor": "^0.1.1", - "karma-firefox-launcher": "^0.1.7", - "karma-mocha": "^0.2.1", - "karma-mocha-reporter": "^1.1.3", - "karma-sinon-chai": "^1.1.0", - "mocha": "^2.3.4", - "randomcolor": "^0.4.4", - "semistandard": "^8.0.0", - "shelljs": "^0.7.0", - "shx": "^0.2.2", - "sinon": "^1.17.5", - "sinon-chai": "^2.8.0", - "snazzy": "^4.0.0", - "superagent": "^3.8.2", - "webpack": "~4.46.0", - "webpack-cli": "*", - "webpack-dev-server": "^3.2.0", - "webpack-sources": "1.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "ghpages": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ghpages/-/ghpages-0.0.8.tgz", - "integrity": "sha1-vmfaREODPJHyUDE5IPsMzNp32x8=", - "requires": { - "gh-pages": "^0.11.0", - "gitconfiglocal": "^1.0.0", - "meow": "^3.6.0", - "object-assign": "^4.0.1", - "opn": "^3.0.3", - "parse-github-url": "^0.2.1" - } - }, - "karma-chrome-launcher": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.0.0.tgz", - "integrity": "sha1-wnkMWjKxVXfQ//Wk1aJwOztDnCU=", - "requires": { - "fs-access": "^1.0.0", - "which": "^1.2.1" - } - }, - "lolex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.3.2.tgz", - "integrity": "sha512-YYp8cqz7/8eruZ15L1mzcPkvLYxipfdsWIDESvNdNmQP9o7TsDitRhNuV2xb7aFu2ofZngao1jiVrVZ842x4BQ==" - }, - "samsam": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.1.2.tgz", - "integrity": "sha512-iVL7LibpM3tl4rQPweOXXrmjGegxx27flTOjQEZD3PXe4oZNFzuz6Si4mgleK/JWU/hyCvtV01RUovjvBEpDmw==" - }, - "semistandard": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/semistandard/-/semistandard-8.0.0.tgz", - "integrity": "sha1-/YaeLk19Lr/GWwRmJcGJt4tn3R4=", - "requires": { - "eslint": "^2.10.1", - "eslint-config-semistandard": "^6.0.2", - "eslint-config-standard": "5.3.1", - "eslint-config-standard-jsx": "1.2.0", - "eslint-plugin-promise": "^1.0.8", - "eslint-plugin-react": "^5.0.1", - "eslint-plugin-standard": "^1.3.1", - "semistandard-format": "^3.0.0", - "standard-engine": "^4.0.0" - } - }, - "sinon": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-1.17.7.tgz", - "integrity": "sha512-M9rtyQxKfcTTdB64rpPSRaTzOvunb+HHPv/3PxvNPrEDnFSny95Pi6/3VoD471ody0ay0IHyzT3BErfcLXj6NA==", - "requires": { - "formatio": "1.1.1", - "lolex": "1.3.2", - "samsam": "1.1.2", - "util": ">=0.10.3 <1" - } - }, - "snazzy": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/snazzy/-/snazzy-4.0.1.tgz", - "integrity": "sha1-noGXTO/1JlDHb9G+nZdkr7icxGY=", - "requires": { - "chalk": "^1.1.0", - "inherits": "^2.0.1", - "minimist": "^1.1.1", - "readable-stream": "^2.0.6", - "standard": "^7.0.0", - "standard-json": "^1.0.0", - "text-table": "^0.2.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "aframe-slice9-component": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/aframe-slice9-component/-/aframe-slice9-component-1.0.0.tgz", - "integrity": "sha1-+w+EQdrdHosRzCRRK6eqaS1iK+E=" - }, - "aframe-state-component": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/aframe-state-component/-/aframe-state-component-6.7.0.tgz", - "integrity": "sha512-lYjW40u+ZhVin91a69JzVqvLS5JMWCEbVFHmmd59GGXLHx8POc1F36CYMh34yofNig//5J+GBX5a/xKs3FiKZw==", - "requires": { - "debug": "^2.6.9" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "aframe-super-hot-html-loader": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aframe-super-hot-html-loader/-/aframe-super-hot-html-loader-1.2.0.tgz", - "integrity": "sha512-oRuGT7b4LZGWq21/8WGKDX2An/vj8Hsb2zPXBAGVgRPWFhUpGMJZ1+RCxQntMXYNPzt3T87CtCIzCUXMBqOXmA==", - "requires": { - "diff-dom": "^3.1.0", - "loader-utils": "^1.2.3", - "nunjucks": "^3.1.7" - } - }, - "aframe-super-hot-loader": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/aframe-super-hot-loader/-/aframe-super-hot-loader-1.7.0.tgz", - "integrity": "sha512-L7FTrBIRu/EBvfrBDPN7+PjBmzpaUMhcRXydC9qlZNTGe+75K/wrLAa6jKa/JhnYP+Apt/LAdTy0rYGptJHd0A==", - "requires": { - "loader-utils": "^1.2.3", - "nunjucks": "^3.1.7" - } - }, - "aframe-thumb-controls-component": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/aframe-thumb-controls-component/-/aframe-thumb-controls-component-2.0.2.tgz", - "integrity": "sha512-tGpYoced5Igdl1NVzfdTNpon8uaDOnYb/Gepb/Gc/+iBkEjsRWQE6Wkh86DVkyMpBdnCCHK52y2VtyLUkxwZiQ==", - "requires": { - "rollup": "^0.59.1" - }, - "dependencies": { - "rollup": { - "version": "0.59.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.59.4.tgz", - "integrity": "sha512-ISiMqq/aJa+57QxX2MRcvLESHdJ7wSavmr6U1euMr+6UgFe6KM+3QANrYy8LQofwhTC1I7BcAdlLnDiaODs1BA==", - "requires": { - "@types/estree": "0.0.39", - "@types/node": "*" - } - } - } - }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" - }, - "agent-base": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.1.tgz", - "integrity": "sha512-01q25QQDwLSsyfhrKbn8yuur+JNw0H+0Y4JiGIKd3z9aYk/w/2kxD/Upc+t2ZBBSUNff50VjPsSW2YxM8QYKVg==", - "requires": { - "debug": "4" - } - }, - "agentkeepalive": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-2.2.0.tgz", - "integrity": "sha1-xdG9SxKQCPEWPyNvhuX66iAm4u8=" - }, - "ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", - "peer": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "dependencies": { - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "peer": true - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "peer": true - } - } - }, - "ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "requires": {} - }, - "ajv-keywords": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", - "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", - "requires": {} - }, - "algoliasearch": { - "version": "3.35.1", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-3.35.1.tgz", - "integrity": "sha512-K4yKVhaHkXfJ/xcUnil04xiSrB8B8yHZoFEhWNpXg23eiCnqvTZw1tn/SqvdsANlYHLJlKl0qi3I/Q2Sqo7LwQ==", - "requires": { - "agentkeepalive": "^2.2.0", - "debug": "^2.6.9", - "envify": "^4.0.0", - "es6-promise": "^4.1.0", - "events": "^1.1.0", - "foreach": "^2.0.5", - "global": "^4.3.2", - "inherits": "^2.0.1", - "isarray": "^2.0.1", - "load-script": "^1.0.0", - "object-keys": "^1.0.11", - "querystring-es3": "^0.2.1", - "reduce": "^1.0.1", - "semver": "^5.1.0", - "tunnel-agent": "^0.6.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "envify": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/envify/-/envify-4.1.0.tgz", - "integrity": "sha512-IKRVVoAYr4pIx4yIWNsz9mOsboxlNXiu7TNBnem/K/uTHdkyzXWDzHCK7UTolqBbgaBz0tQHsD3YNls0uIIjiw==", - "requires": { - "esprima": "^4.0.0", - "through": "~2.3.4" - } - }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" - }, - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - } - } - }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" - }, - "an-array": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/an-array/-/an-array-1.0.0.tgz", - "integrity": "sha1-wSWlu4JXd4419LT2qpx9D6nkJmU=" - }, - "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==" - }, - "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=" - }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=" - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" - }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" - }, - "array-from": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", - "integrity": "sha512-GQTc6Uupx1FCavi5mPzBvVT7nEOeWMmUA9P95wpfpW1XwMSKs+KaymD5C2Up7KAUKg/mYwbsUYzdZWcoajlNZg==", - "peer": true - }, - "array-shuffle": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-shuffle/-/array-shuffle-1.0.1.tgz", - "integrity": "sha1-fqSIKjVrS8pfVF4LblLq9tlxVXo=" - }, - "array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=" - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "array.prototype.find": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.0.tgz", - "integrity": "sha512-Wn41+K1yuO5p7wRZDl7890c3xvv5UBrfVXTVIe28rSQb6LS0fZMDrQB6PAcxQFRFy6vJTLDc3A2+3CjQdzVKRg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.13.0" - } - }, - "arraybuffer.slice": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", - "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=" - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" - }, - "as-number": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/as-number/-/as-number-1.0.0.tgz", - "integrity": "sha1-rLJ+NPj52KsNqeN287iVmGD4CmY=" - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" - }, - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "assert": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.3.0.tgz", - "integrity": "sha1-A5OaYiWCqBLMICMgoLmlbJuBWEk=", - "requires": { - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "requires": { - "inherits": "2.0.1" - } - } - } - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" - }, - "ast-types": { - "version": "0.9.6", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", - "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=" - }, - "astw": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/astw/-/astw-2.2.0.tgz", - "integrity": "sha1-e9QXhNMkk5h66yOba04cV6hzuRc=", - "requires": { - "acorn": "^4.0.3" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" - } - } - }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" - }, - "autoprefixer": { - "version": "7.2.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.6.tgz", - "integrity": "sha512-Iq8TRIB+/9eQ8rbGhcP7ct5cYb/3qjNYAR2SnzLCEcwF6rvVOax8+9+fccgXk4bEhQGjOZd5TLhsksmAdsbGqQ==", - "requires": { - "browserslist": "^2.11.3", - "caniuse-lite": "^1.0.30000805", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^6.0.17", - "postcss-value-parser": "^3.2.3" - }, - "dependencies": { - "browserslist": { - "version": "2.11.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz", - "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==", - "requires": { - "caniuse-lite": "^1.0.30000792", - "electron-to-chromium": "^1.3.30" - } - } - } - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "babel-helper-evaluate-path": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.5.0.tgz", - "integrity": "sha512-mUh0UhS607bGh5wUMAQfOpt2JX2ThXMtppHRdRU1kL7ZLRWIXxoV2UIV1r2cAeeNeU1M5SB5/RSUgUxrK8yOkA==" - }, - "babel-helper-flip-expressions": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.4.3.tgz", - "integrity": "sha1-NpZzahKKwYvCUlS19AoizrPB0/0=" - }, - "babel-helper-is-nodes-equiv": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz", - "integrity": "sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ=" - }, - "babel-helper-is-void-0": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-helper-is-void-0/-/babel-helper-is-void-0-0.4.3.tgz", - "integrity": "sha1-fZwBtFYee5Xb2g9u7kj1tg5nMT4=" - }, - "babel-helper-mark-eval-scopes": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.4.3.tgz", - "integrity": "sha1-0kSjvvmESHJgP/tG4izorN9VFWI=" - }, - "babel-helper-remove-or-void": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.4.3.tgz", - "integrity": "sha1-pPA7QAd6D/6I5F0HAQ3uJB/1rmA=" - }, - "babel-helper-to-multiple-sequence-expressions": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.5.0.tgz", - "integrity": "sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA==" - }, - "babel-loader": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", - "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", - "requires": { - "find-cache-dir": "^2.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1", - "pify": "^4.0.1" - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-minify-builtins": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.5.0.tgz", - "integrity": "sha512-wpqbN7Ov5hsNwGdzuzvFcjgRlzbIeVv1gMIlICbPj0xkexnfoIDe7q+AZHMkQmAE/F9R5jkrB6TLfTegImlXag==" - }, - "babel-plugin-minify-constant-folding": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.5.0.tgz", - "integrity": "sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ==", - "requires": { - "babel-helper-evaluate-path": "^0.5.0" - } - }, - "babel-plugin-minify-dead-code-elimination": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.1.tgz", - "integrity": "sha512-x8OJOZIrRmQBcSqxBcLbMIK8uPmTvNWPXH2bh5MDCW1latEqYiRMuUkPImKcfpo59pTUB2FT7HfcgtG8ZlR5Qg==", - "requires": { - "babel-helper-evaluate-path": "^0.5.0", - "babel-helper-mark-eval-scopes": "^0.4.3", - "babel-helper-remove-or-void": "^0.4.3", - "lodash": "^4.17.11" - } - }, - "babel-plugin-minify-flip-comparisons": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.4.3.tgz", - "integrity": "sha1-AMqHDLjxO0XAOLPB68DyJyk8llo=", - "requires": { - "babel-helper-is-void-0": "^0.4.3" - } - }, - "babel-plugin-minify-guarded-expressions": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.4.4.tgz", - "integrity": "sha512-RMv0tM72YuPPfLT9QLr3ix9nwUIq+sHT6z8Iu3sLbqldzC1Dls8DPCywzUIzkTx9Zh1hWX4q/m9BPoPed9GOfA==", - "requires": { - "babel-helper-evaluate-path": "^0.5.0", - "babel-helper-flip-expressions": "^0.4.3" - } - }, - "babel-plugin-minify-infinity": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.4.3.tgz", - "integrity": "sha1-37h2obCKBldjhO8/kuZTumB7Oco=" - }, - "babel-plugin-minify-mangle-names": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.0.tgz", - "integrity": "sha512-3jdNv6hCAw6fsX1p2wBGPfWuK69sfOjfd3zjUXkbq8McbohWy23tpXfy5RnToYWggvqzuMOwlId1PhyHOfgnGw==", - "requires": { - "babel-helper-mark-eval-scopes": "^0.4.3" - } - }, - "babel-plugin-minify-numeric-literals": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.4.3.tgz", - "integrity": "sha1-jk/VYcefeAEob/YOjF/Z3u6TwLw=" - }, - "babel-plugin-minify-replace": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.5.0.tgz", - "integrity": "sha512-aXZiaqWDNUbyNNNpWs/8NyST+oU7QTpK7J9zFEFSA0eOmtUNMU3fczlTTTlnCxHmq/jYNFEmkkSG3DDBtW3Y4Q==" - }, - "babel-plugin-minify-simplify": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.5.1.tgz", - "integrity": "sha512-OSYDSnoCxP2cYDMk9gxNAed6uJDiDz65zgL6h8d3tm8qXIagWGMLWhqysT6DY3Vs7Fgq7YUDcjOomhVUb+xX6A==", - "requires": { - "babel-helper-evaluate-path": "^0.5.0", - "babel-helper-flip-expressions": "^0.4.3", - "babel-helper-is-nodes-equiv": "^0.0.1", - "babel-helper-to-multiple-sequence-expressions": "^0.5.0" - } - }, - "babel-plugin-minify-type-constructors": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.4.3.tgz", - "integrity": "sha1-G8bxW4f3qxCF1CszC3F2V6IVZQA=", - "requires": { - "babel-helper-is-void-0": "^0.4.3" - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "requires": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - } - }, - "babel-plugin-transform-inline-consecutive-adds": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.4.3.tgz", - "integrity": "sha1-Mj1Ho+pjqDp6w8gRro5pQfrysNE=" - }, - "babel-plugin-transform-member-expression-literals": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.4.tgz", - "integrity": "sha1-NwOcmgwzE6OUlfqsL/OmtbnQOL8=" - }, - "babel-plugin-transform-merge-sibling-variables": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.4.tgz", - "integrity": "sha1-hbQi/DN3tEnJ0c3kQIcgNTJAHa4=" - }, - "babel-plugin-transform-minify-booleans": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.4.tgz", - "integrity": "sha1-rLs+VqNVXdI5KOS1gtKFFi3SsZg=" - }, - "babel-plugin-transform-property-literals": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.4.tgz", - "integrity": "sha1-mMHSHiVXNlc/k+zlRFn2ziSYXTk=", - "requires": { - "esutils": "^2.0.2" - } - }, - "babel-plugin-transform-regexp-constructors": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.4.3.tgz", - "integrity": "sha1-WLd3W2OvzzMyj66aX4j71PsLSWU=" - }, - "babel-plugin-transform-remove-console": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz", - "integrity": "sha1-uYA2DAZzhOJLNXpYjYB9PINSd4A=" - }, - "babel-plugin-transform-remove-debugger": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.4.tgz", - "integrity": "sha1-QrcnYxyXl44estGZp67IShgznvI=" - }, - "babel-plugin-transform-remove-undefined": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.5.0.tgz", - "integrity": "sha512-+M7fJYFaEE/M9CXa0/IRkDbiV3wRELzA1kKQFCJ4ifhrzLKn/9VCCgj9OFmYWwBd8IB48YdgPkHYtbYq+4vtHQ==", - "requires": { - "babel-helper-evaluate-path": "^0.5.0" - } - }, - "babel-plugin-transform-simplify-comparison-operators": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.4.tgz", - "integrity": "sha1-9ir+CWyrDh9ootdT/fKDiIRxzrk=" - }, - "babel-plugin-transform-undefined-to-void": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.4.tgz", - "integrity": "sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA=" - }, - "babel-preset-minify": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.5.1.tgz", - "integrity": "sha512-1IajDumYOAPYImkHbrKeiN5AKKP9iOmRoO2IPbIuVp0j2iuCcj0n7P260z38siKMZZ+85d3mJZdtW8IgOv+Tzg==", - "requires": { - "babel-plugin-minify-builtins": "^0.5.0", - "babel-plugin-minify-constant-folding": "^0.5.0", - "babel-plugin-minify-dead-code-elimination": "^0.5.1", - "babel-plugin-minify-flip-comparisons": "^0.4.3", - "babel-plugin-minify-guarded-expressions": "^0.4.4", - "babel-plugin-minify-infinity": "^0.4.3", - "babel-plugin-minify-mangle-names": "^0.5.0", - "babel-plugin-minify-numeric-literals": "^0.4.3", - "babel-plugin-minify-replace": "^0.5.0", - "babel-plugin-minify-simplify": "^0.5.1", - "babel-plugin-minify-type-constructors": "^0.4.3", - "babel-plugin-transform-inline-consecutive-adds": "^0.4.3", - "babel-plugin-transform-member-expression-literals": "^6.9.4", - "babel-plugin-transform-merge-sibling-variables": "^6.9.4", - "babel-plugin-transform-minify-booleans": "^6.9.4", - "babel-plugin-transform-property-literals": "^6.9.4", - "babel-plugin-transform-regexp-constructors": "^0.4.3", - "babel-plugin-transform-remove-console": "^6.9.4", - "babel-plugin-transform-remove-debugger": "^6.9.4", - "babel-plugin-transform-remove-undefined": "^0.5.0", - "babel-plugin-transform-simplify-comparison-operators": "^6.9.4", - "babel-plugin-transform-undefined-to-void": "^6.9.4", - "lodash": "^4.17.11" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" - } - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - }, - "dependencies": { - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" - } - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" - }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "base62": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/base62/-/base62-1.2.8.tgz", - "integrity": "sha512-V6YHUbjLxN1ymqNLb1DPHoU1CpfdL7d2YTIp5W3U4hhoG4hhxNmsFDs66M9EXxBiSEke5Bt5dwdfMwwZF70iLA==" - }, - "Base64": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/Base64/-/Base64-0.2.1.tgz", - "integrity": "sha1-ujpCMHCOGGcFBl5mur3Uw1z2ACg=" - }, - "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" - }, - "base64-js": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", - "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=" - }, - "base64id": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", - "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=" - }, - "batch": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.5.3.tgz", - "integrity": "sha1-PzQU84AyF0O/wQQvmoP/HVgk1GQ=" - }, - "better-assert": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", - "requires": { - "callsite": "1.0.0" - } - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" - }, - "bignumber.js": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", - "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==" - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" - }, - "blob": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", - "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=" - }, - "blob-slicer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/blob-slicer/-/blob-slicer-1.0.0.tgz", - "integrity": "sha512-1Re6x6auSR0At8qIsPceM3MuZQ8iDsL6UBl1V63EZfkoeLF2tr/GkbG15WW7fXhIcWObFH0v0q7D5WeCGUUBMA==", - "requires": { - "buffer": "^4.9.1" - }, - "dependencies": { - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - } - } - }, - "bluebird": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", - "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=" - }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" - } - } - }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", - "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "browser-pack": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-5.0.1.tgz", - "integrity": "sha1-QZdxmyDG4KqglFHFER5T77b7wY0=", - "requires": { - "combine-source-map": "~0.6.1", - "defined": "^1.0.0", - "JSONStream": "^1.0.3", - "through2": "^1.0.0", - "umd": "^3.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "through2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-1.1.1.tgz", - "integrity": "sha1-CEfLxESfNAVXTb3M2buEG4OsNUU=", - "requires": { - "readable-stream": ">=1.1.13-1 <1.2.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - } - } - }, - "browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "requires": { - "resolve": "1.1.7" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=" - } - } - }, - "browserify": { - "version": "10.2.3", - "resolved": "https://registry.npmjs.org/browserify/-/browserify-10.2.3.tgz", - "integrity": "sha1-9qGNTWqzERP5/fg/ED+gFyioIGo=", - "requires": { - "assert": "~1.3.0", - "browser-pack": "^5.0.0", - "browser-resolve": "^1.7.1", - "browserify-zlib": "~0.1.2", - "buffer": "^3.0.0", - "builtins": "~0.0.3", - "commondir": "0.0.1", - "concat-stream": "~1.4.1", - "console-browserify": "^1.1.0", - "constants-browserify": "~0.0.1", - "crypto-browserify": "^3.0.0", - "deep-equal": "^1.0.0", - "defined": "^1.0.0", - "deps-sort": "^1.3.7", - "domain-browser": "~1.1.0", - "duplexer2": "~0.0.2", - "events": "~1.0.0", - "glob": "^4.0.5", - "has": "^1.0.0", - "htmlescape": "^1.1.0", - "http-browserify": "^1.4.0", - "https-browserify": "~0.0.0", - "inherits": "~2.0.1", - "insert-module-globals": "^6.4.1", - "isarray": "0.0.1", - "JSONStream": "^1.0.3", - "labeled-stream-splicer": "^1.0.0", - "module-deps": "^3.7.11", - "os-browserify": "~0.1.1", - "parents": "^1.0.1", - "path-browserify": "~0.0.0", - "process": "~0.11.0", - "punycode": "^1.3.2", - "querystring-es3": "~0.2.0", - "read-only-stream": "^1.1.1", - "readable-stream": "^1.1.13", - "resolve": "^1.1.4", - "shasum": "^1.0.0", - "shell-quote": "~0.0.1", - "stream-browserify": "^1.0.0", - "string_decoder": "~0.10.0", - "subarg": "^1.0.0", - "syntax-error": "^1.1.1", - "through2": "^1.0.0", - "timers-browserify": "^1.0.1", - "tty-browserify": "~0.0.0", - "url": "~0.10.1", - "util": "~0.10.1", - "vm-browserify": "~0.0.1", - "xtend": "^4.0.0" - }, - "dependencies": { - "commondir": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-0.0.1.tgz", - "integrity": "sha1-ifAP3NUbUZxXhzP+xWPmptp/W+I=" - }, - "glob": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", - "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^2.0.1", - "once": "^1.3.0" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "minimatch": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", - "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", - "requires": { - "brace-expansion": "^1.0.0" - } - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "through2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-1.1.1.tgz", - "integrity": "sha1-CEfLxESfNAVXTb3M2buEG4OsNUU=", - "requires": { - "readable-stream": ">=1.1.13-1 <1.2.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - } - } - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-css": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/browserify-css/-/browserify-css-0.8.4.tgz", - "integrity": "sha1-Hk4nedy7By0Jvq605vaVAdVE1/M=", - "requires": { - "clean-css": "2.2.x", - "concat-stream": "1.4.x", - "css": "1.6.x", - "find-node-modules": "^1.0.1", - "lodash": "3.6.x", - "through2": "0.6.x" - }, - "dependencies": { - "lodash": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.6.0.tgz", - "integrity": "sha1-Umao9J3Zib5Pn2gbbyoMVShdDZo=" - } - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" - } - }, - "browserify-zlib": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", - "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", - "requires": { - "pako": "~0.2.0" - } - }, - "browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", - "requires": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" - } - }, - "buffer": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-3.6.2.tgz", - "integrity": "sha512-c3M77NkHJxS0zx/ErxXhDLr1v3y2MDXPeTJPvLNOaIYJ4ymHBUFQ9EXzt9HYuqAJllMoNb/EZ8hIiulnQFAUuQ==", - "requires": { - "base64-js": "0.0.8", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" - }, - "buffer-equal": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", - "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=" - }, - "buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" - }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" - }, - "buffer-to-arraybuffer": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", - "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=" - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" - }, - "builtins": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-0.0.7.tgz", - "integrity": "sha1-NVIZzWzxjb58Acx/0tznZc/cVJo=" - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - }, - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - }, - "dependencies": { - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - } - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "requires": { - "callsites": "^0.2.0" - } - }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" - }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=" - }, - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" - } - }, - "caniuse-api": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", - "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", - "requires": { - "browserslist": "^1.3.6", - "caniuse-db": "^1.0.30000529", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - }, - "dependencies": { - "browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "requires": { - "caniuse-db": "^1.0.30000639", - "electron-to-chromium": "^1.2.7" - } - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" - } - } - }, - "caniuse-db": { - "version": "1.0.30001048", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30001048.tgz", - "integrity": "sha512-HqYsBIZlVARU5GDXPziXSFwFVpGx9KqCznr62iaey7bT2sqpx7/jI4B3PvbKguKi8kGeEannJ7WEPB5H71rjFQ==" - }, - "caniuse-lite": { - "version": "1.0.30001439", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001439.tgz", - "integrity": "sha512-1MgUzEkoMO6gKfXflStpYgZDlFM7M/ck/bgfVCACO5vnAf0fXoNVHdWtqGU+MYca+4bL9Z5bpOVmR33cWW9G2A==" - }, - "cardboard-vr-display": { - "version": "1.0.18", - "resolved": "https://registry.npmjs.org/cardboard-vr-display/-/cardboard-vr-display-1.0.18.tgz", - "integrity": "sha512-G1UEitQBT3pODLnMx37xv9JyZktCBTkwjxS4Vz9KmYL0Ln+Crm/CI7o4WEqAyS6xZjxR3cAvcClou1edX/JUbA==", - "requires": { - "gl-preserve-state": "^1.0.0", - "nosleep.js": "^0.7.0", - "webvr-polyfill-dpdb": "^1.0.17" - } - }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" - } - }, - "chai": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz", - "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=", - "requires": { - "assertion-error": "^1.0.1", - "deep-eql": "^0.1.3", - "type-detect": "^1.0.0" - } - }, - "chai-shallow-deep-equal": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/chai-shallow-deep-equal/-/chai-shallow-deep-equal-1.4.6.tgz", - "integrity": "sha1-QYS1oTOTra40ts7wxptazILE2DQ=", - "requires": {} - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "requires": { - "tslib": "^1.9.0" - } - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==" - }, - "clap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", - "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", - "requires": { - "chalk": "^1.1.3" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "clean-css": { - "version": "2.2.23", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-2.2.23.tgz", - "integrity": "sha1-BZC1R4tRbEkD7cLYm9P9vdKGMow=", - "requires": { - "commander": "2.2.x" - }, - "dependencies": { - "commander": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.2.0.tgz", - "integrity": "sha1-F1rUuTF/P/YV8gHB5XIk9Vo+kd8=" - } - } - }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "requires": { - "restore-cursor": "^1.0.1" - } - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==" - }, - "coa": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", - "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", - "requires": { - "q": "^1.1.2" - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "collections": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/collections/-/collections-0.2.2.tgz", - "integrity": "sha1-HyMCay7zb5J+7MkB6ZxfDUj6M04=", - "requires": { - "weak-map": "1.0.0" - } - }, - "color": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", - "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", - "requires": { - "clone": "^1.0.2", - "color-convert": "^1.3.0", - "color-string": "^0.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "color-string": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", - "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", - "requires": { - "color-name": "^1.0.0" - } - }, - "colormin": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", - "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", - "requires": { - "color": "^0.11.0", - "css-color-names": "0.0.4", - "has": "^1.0.1" - } - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" - }, - "combine-source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.6.1.tgz", - "integrity": "sha1-m0oJwxYDPXaODxHgKfonMOB5rZY=", - "requires": { - "convert-source-map": "~1.1.0", - "inline-source-map": "~0.5.0", - "lodash.memoize": "~3.0.3", - "source-map": "~0.4.2" - }, - "dependencies": { - "convert-source-map": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", - "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=" - }, - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.0.1.tgz", - "integrity": "sha512-IPF4ouhCP+qdlcmCedhxX4xiGBPyigb8v5NeUp+0LyhwLgxMqyp3S0vl7TAPfS/hiP7FC3caI/PB9lTmP8r1NA==" - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" - }, - "commoner": { - "version": "0.10.8", - "resolved": "https://registry.npmjs.org/commoner/-/commoner-0.10.8.tgz", - "integrity": "sha1-NPw2cs0kOT6LtH5wyqApOBH08sU=", - "requires": { - "commander": "^2.5.0", - "detective": "^4.3.1", - "glob": "^5.0.15", - "graceful-fs": "^4.1.2", - "iconv-lite": "^0.4.5", - "mkdirp": "^0.5.0", - "private": "^0.1.6", - "q": "^1.1.2", - "recast": "^0.11.17" - }, - "dependencies": { - "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==" - }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" - }, - "compressible": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", - "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", - "requires": { - "mime-db": ">= 1.40.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.4.11.tgz", - "integrity": "sha512-X3JMh8+4je3U1cQpG87+f9lXHDrqcb2MVLg9L7o8b1UZ0DzhRrUpdn65ttzu10PpJPPI3MQNkis+oha6TSA9Mw==", - "requires": { - "inherits": "~2.0.1", - "readable-stream": "~1.1.9", - "typedarray": "~0.0.5" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, - "config-chain": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", - "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==" - }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" - }, - "constants-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-0.0.1.tgz", - "integrity": "sha1-kld9tSe6bEzwpFaNhLwDH0QeIfI=" - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "cookiejar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", - "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" - }, - "core-js": { - "version": "2.6.10", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.10.tgz", - "integrity": "sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA==" - }, - "core-js-compat": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz", - "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==", - "requires": { - "browserslist": "^4.21.4" - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-env": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-4.0.0.tgz", - "integrity": "sha1-Fgg4YtCCdaRiiwskOxIb7apV3YA=", - "requires": { - "cross-spawn": "^5.1.0", - "is-windows": "^1.0.0" - } - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "css": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/css/-/css-1.6.0.tgz", - "integrity": "sha1-wG//CvuzE/zlvOBw12UxpsjTAKo=", - "requires": { - "css-parse": "1.7.0", - "css-stringify": "1.4.1" - } - }, - "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=" - }, - "css-loader": { - "version": "0.28.11", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.11.tgz", - "integrity": "sha512-wovHgjAx8ZIMGSL8pTys7edA1ClmzxHeY6n/d97gg5odgsxEgKjULPR0viqyC+FWMCL9sfqoC/QCUBo62tLvPg==", - "requires": { - "babel-code-frame": "^6.26.0", - "css-selector-tokenizer": "^0.7.0", - "cssnano": "^3.10.0", - "icss-utils": "^2.1.0", - "loader-utils": "^1.0.2", - "lodash.camelcase": "^4.3.0", - "object-assign": "^4.1.1", - "postcss": "^5.0.6", - "postcss-modules-extract-imports": "^1.2.0", - "postcss-modules-local-by-default": "^1.2.0", - "postcss-modules-scope": "^1.1.0", - "postcss-modules-values": "^1.3.0", - "postcss-value-parser": "^3.3.0", - "source-list-map": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "css-parse": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz", - "integrity": "sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs=" - }, - "css-selector-tokenizer": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.2.tgz", - "integrity": "sha512-yj856NGuAymN6r8bn8/Jl46pR+OC3eEvAhfGYDUe7YPtTPAYrSSw4oAniZ9Y8T5B92hjhwTBLUen0/vKPxf6pw==", - "requires": { - "cssesc": "^3.0.0", - "fastparse": "^1.1.2", - "regexpu-core": "^4.6.0" - } - }, - "css-stringify": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/css-stringify/-/css-stringify-1.4.1.tgz", - "integrity": "sha1-JSzL8D9yOgCb3Ydw/n6ydBca/fo=", - "requires": { - "source-map": "~0.1.31" - }, - "dependencies": { - "source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" - }, - "cssnano": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", - "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", - "requires": { - "autoprefixer": "^6.3.1", - "decamelize": "^1.1.2", - "defined": "^1.0.0", - "has": "^1.0.1", - "object-assign": "^4.0.1", - "postcss": "^5.0.14", - "postcss-calc": "^5.2.0", - "postcss-colormin": "^2.1.8", - "postcss-convert-values": "^2.3.4", - "postcss-discard-comments": "^2.0.4", - "postcss-discard-duplicates": "^2.0.1", - "postcss-discard-empty": "^2.0.1", - "postcss-discard-overridden": "^0.1.1", - "postcss-discard-unused": "^2.2.1", - "postcss-filter-plugins": "^2.0.0", - "postcss-merge-idents": "^2.1.5", - "postcss-merge-longhand": "^2.0.1", - "postcss-merge-rules": "^2.0.3", - "postcss-minify-font-values": "^1.0.2", - "postcss-minify-gradients": "^1.0.1", - "postcss-minify-params": "^1.0.4", - "postcss-minify-selectors": "^2.0.4", - "postcss-normalize-charset": "^1.1.0", - "postcss-normalize-url": "^3.0.7", - "postcss-ordered-values": "^2.1.0", - "postcss-reduce-idents": "^2.2.2", - "postcss-reduce-initial": "^1.0.0", - "postcss-reduce-transforms": "^1.0.3", - "postcss-svgo": "^2.1.1", - "postcss-unique-selectors": "^2.0.2", - "postcss-value-parser": "^3.2.3", - "postcss-zindex": "^2.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "autoprefixer": { - "version": "6.7.7", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", - "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", - "requires": { - "browserslist": "^1.7.6", - "caniuse-db": "^1.0.30000634", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^5.2.16", - "postcss-value-parser": "^3.2.3" - } - }, - "browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "requires": { - "caniuse-db": "^1.0.30000639", - "electron-to-chromium": "^1.2.7" - } - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "csso": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", - "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", - "requires": { - "clap": "^1.0.9", - "source-map": "^0.5.3" - } - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "requires": { - "array-find-index": "^1.0.1" - } - }, - "custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=" - }, - "cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==" - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "debug-log": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", - "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=" - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "requires": { - "mimic-response": "^1.0.0" - } - }, - "deep-assign": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-2.0.0.tgz", - "integrity": "sha1-6+BrHwfwja5ZdiDj3RYi83GhxXI=", - "requires": { - "is-obj": "^1.0.0" - } - }, - "deep-eql": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", - "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", - "requires": { - "type-detect": "0.1.1" - }, - "dependencies": { - "type-detect": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", - "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=" - } - } - }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" - }, - "default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", - "requires": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" - } - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "requires": { - "clone": "^1.0.2" - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" - }, - "deglob": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/deglob/-/deglob-1.1.2.tgz", - "integrity": "sha1-dtV3wl/j9zKUEqK1nq3qV6xQDj8=", - "requires": { - "find-root": "^1.0.0", - "glob": "^7.0.5", - "ignore": "^3.0.9", - "pkg-config": "^1.1.0", - "run-parallel": "^1.1.2", - "uniq": "^1.0.1", - "xtend": "^4.0.0" - } - }, - "del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "requires": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, - "dependencies": { - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - } - } - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "deps-sort": { - "version": "1.3.9", - "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-1.3.9.tgz", - "integrity": "sha1-Kd//U+F7Nq7K51MK27v2IsLtGnE=", - "requires": { - "JSONStream": "^1.0.3", - "shasum": "^1.0.0", - "subarg": "^1.0.0", - "through2": "^1.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "through2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-1.1.1.tgz", - "integrity": "sha1-CEfLxESfNAVXTb3M2buEG4OsNUU=", - "requires": { - "readable-stream": ">=1.1.13-1 <1.2.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - } - } - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "detect-file": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-0.1.0.tgz", - "integrity": "sha1-STXe39lIhkjgBrASlWbpOGcR6mM=", - "requires": { - "fs-exists-sync": "^0.1.0" - } - }, - "detect-node": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", - "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==" - }, - "detective": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz", - "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==", - "requires": { - "acorn": "^5.2.1", - "defined": "^1.0.0" - } - }, - "di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=" - }, - "diff": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", - "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=" - }, - "diff-dom": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/diff-dom/-/diff-dom-3.1.0.tgz", - "integrity": "sha512-rb/ZbWpK4V0EsSCz8MegVtuzBNLqErwvzx0uUgmodM+KJYYk8B9sloV2fRga960oz/mRWG3fSdtE5lyCfzB7/Q==", - "requires": { - "rollup-plugin-terser": "^4.0.3" - } - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "disparity": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/disparity/-/disparity-2.0.0.tgz", - "integrity": "sha1-V92stHMkrl9Y0swNqIbbTOnutxg=", - "requires": { - "ansi-styles": "^2.0.1", - "diff": "^1.3.2" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - } - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" - }, - "dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", - "requires": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "requires": { - "buffer-indexof": "^1.0.0" - } - }, - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - } - }, - "document-register-element": { - "version": "git+ssh://git@github.com/dmarcos/document-register-element.git#8ccc532b7f3744be954574caf3072a5fd260ca90", - "integrity": "sha512-dwvGei9I/m1pYQ/9aNODyVmvSWBtlncfIROn5Sbi4MVnIcZKre5QaWx+AGLI/j6VH9sp8jwLyeuWP1micANT0g==", - "from": "document-register-element@github:dmarcos/document-register-element#8ccc532b7" - }, - "dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", - "requires": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "dom-storage": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/dom-storage/-/dom-storage-2.1.0.tgz", - "integrity": "sha512-g6RpyWXzl0RR6OTElHKBl7nwnK87GUyZMYC7JWsB/IA73vpqK2K6LT39x4VepLxlSsWBFrPVLnsSR5Jyty0+2Q==" - }, - "dom-walk": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", - "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" - }, - "domain-browser": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", - "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=" - }, - "dtype": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dtype/-/dtype-2.0.0.tgz", - "integrity": "sha1-zQUjI84GFETs0uj1dI9popvihDQ=" - }, - "duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", - "requires": { - "readable-stream": "~1.1.9" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "editorconfig": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.13.3.tgz", - "integrity": "sha512-WkjsUNVCu+ITKDj73QDvi0trvpdDWdkDyHybDGSXPfekLCqwmpD7CP7iPbvBgosNuLcI96XTDwNa75JyFl7tEQ==", - "requires": { - "bluebird": "^3.0.5", - "commander": "^2.9.0", - "lru-cache": "^3.2.0", - "semver": "^5.1.0", - "sigmund": "^1.0.1" - }, - "dependencies": { - "bluebird": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz", - "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==" - }, - "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==" - }, - "lru-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-3.2.0.tgz", - "integrity": "sha1-cXibO39Tmb7IVl3aOKow0qCX7+4=", - "requires": { - "pseudomap": "^1.0.1" - } - } - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" - }, - "elliptic": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", - "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "requires": { - "iconv-lite": "^0.6.2" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", - "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, - "engine.io": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.5.tgz", - "integrity": "sha512-j1DWIcktw4hRwrv6nWx++5nFH2X64x16MAG2P0Lmi5Dvdfi3I+Jhc7JKJIdAmDJa+5aZ/imHV7dWRPy2Cqjh3A==", - "requires": { - "accepts": "1.3.3", - "base64id": "1.0.0", - "cookie": "0.3.1", - "debug": "2.3.3", - "engine.io-parser": "1.3.2", - "ws": "~1.1.5" - }, - "dependencies": { - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" - } - } - }, - "engine.io-client": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.5.tgz", - "integrity": "sha512-AYTgHyeVUPitsseqjoedjhYJapNVoSPShbZ+tEUX9/73jgZ/Z3sUlJf9oYgdEBBdVhupUpUqSxH0kBCXlQnmZg==", - "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "2.3.3", - "engine.io-parser": "1.3.2", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parsejson": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "~1.1.5", - "xmlhttprequest-ssl": "1.5.3", - "yeast": "0.1.2" - }, - "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" - }, - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" - } - } - }, - "engine.io-parser": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", - "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "0.0.6", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.4", - "has-binary": "0.1.7", - "wtf-8": "1.0.0" - } - }, - "enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "dependencies": { - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - } - } - }, - "ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=" - }, - "envify": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/envify/-/envify-3.4.1.tgz", - "integrity": "sha1-1xIjKejfFoi6dxsSUBkXyc5cvOg=", - "requires": { - "jstransform": "^11.0.3", - "through": "~2.3.4" - } - }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.0.tgz", - "integrity": "sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg==", - "requires": { - "es-to-primitive": "^1.2.0", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.0", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-inspect": "^1.6.0", - "object-keys": "^1.1.1", - "string.prototype.trimleft": "^2.1.0", - "string.prototype.trimright": "^2.1.0" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", - "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-set": "~0.1.5", - "es6-symbol": "~3.1.1", - "event-emitter": "~0.3.5" - } - }, - "es6-object-assign": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", - "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=" - }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - }, - "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-symbol": "3.1.1", - "event-emitter": "~0.3.5" - }, - "dependencies": { - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - } - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "requires": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", - "requires": { - "es6-map": "^0.1.3", - "es6-weak-map": "^2.0.1", - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "esformatter": { - "version": "0.9.6", - "resolved": "https://registry.npmjs.org/esformatter/-/esformatter-0.9.6.tgz", - "integrity": "sha1-Ngiux4KN7uPNP0bhGSrrRyaKlX8=", - "requires": { - "acorn-to-esprima": "^2.0.6", - "babel-traverse": "^6.4.5", - "debug": "^0.7.4", - "disparity": "^2.0.0", - "esformatter-parser": "^1.0.0", - "glob": "^5.0.3", - "minimist": "^1.1.1", - "mout": ">=0.9 <2.0", - "npm-run": "^2.0.0", - "resolve": "^1.1.5", - "rocambole": ">=0.7 <2.0", - "rocambole-indent": "^2.0.4", - "rocambole-linebreak": "^1.0.2", - "rocambole-node": "~1.0", - "rocambole-token": "^1.1.2", - "rocambole-whitespace": "^1.0.0", - "stdin": "*", - "strip-json-comments": "~0.1.1", - "supports-color": "^1.3.1", - "user-home": "^2.0.0" - }, - "dependencies": { - "debug": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", - "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=" - }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "strip-json-comments": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-0.1.3.tgz", - "integrity": "sha1-Fkxk43Coo8wAyeAbU55WmCPw7lQ=" - }, - "supports-color": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.3.1.tgz", - "integrity": "sha1-FXWN8J2P87SswwdTn6vicJXhBC0=" - } - } - }, - "esformatter-eol-last": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/esformatter-eol-last/-/esformatter-eol-last-1.0.0.tgz", - "integrity": "sha1-RaeP9GIrHUnkT1a0mQV2amMpDAc=", - "requires": { - "string.prototype.endswith": "^0.2.0" - } - }, - "esformatter-ignore": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/esformatter-ignore/-/esformatter-ignore-0.1.3.tgz", - "integrity": "sha1-BNO4db+knd4ATMWN9va7w8BWfx4=" - }, - "esformatter-jsx": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/esformatter-jsx/-/esformatter-jsx-7.4.1.tgz", - "integrity": "sha1-siCa4JCPQTp0exIFcny/S6QklgI=", - "requires": { - "babylon": "6.14.1", - "esformatter-ignore": "^0.1.3", - "extend": "3.0.0", - "js-beautify": "1.6.4" - }, - "dependencies": { - "babylon": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.14.1.tgz", - "integrity": "sha1-lWJ1+rcnU62bNDXXr+WPi/CimBU=" - }, - "extend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", - "integrity": "sha1-WkdDU7nzNT3dgXbf03uRyDpG8dQ=" - } - } - }, - "esformatter-literal-notation": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esformatter-literal-notation/-/esformatter-literal-notation-1.0.1.tgz", - "integrity": "sha1-cQ57QgF1/j9+WvrVu60ykQOELi8=", - "requires": { - "rocambole": "^0.3.6", - "rocambole-token": "^1.2.1" - }, - "dependencies": { - "esprima": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", - "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=" - }, - "rocambole": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/rocambole/-/rocambole-0.3.6.tgz", - "integrity": "sha1-Teu/WUMUS8e2AG2Vvo+swLdDUqc=", - "requires": { - "esprima": "~1.0" - } - } - } - }, - "esformatter-parser": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/esformatter-parser/-/esformatter-parser-1.0.0.tgz", - "integrity": "sha1-CFQHLQSHU57TnK442KVDLBfsEdM=", - "requires": { - "acorn-to-esprima": "^2.0.8", - "babel-traverse": "^6.9.0", - "babylon": "^6.8.0", - "rocambole": "^0.7.0" - } - }, - "esformatter-quotes": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/esformatter-quotes/-/esformatter-quotes-1.1.0.tgz", - "integrity": "sha1-4ixsRFx/MGBB2BybnlH8psv6yoI=" - }, - "esformatter-remove-trailing-commas": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esformatter-remove-trailing-commas/-/esformatter-remove-trailing-commas-1.0.1.tgz", - "integrity": "sha1-k5diTB+qmA/E7Mfl6YE+tPK1gqc=", - "requires": { - "rocambole-token": "^1.2.1" - } - }, - "esformatter-semicolon-first": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/esformatter-semicolon-first/-/esformatter-semicolon-first-1.2.0.tgz", - "integrity": "sha1-47US0dTgcxDqvKv1cnfqfIpW4kI=", - "requires": { - "esformatter-parser": "^1.0", - "rocambole": ">=0.6.0 <2.0", - "rocambole-linebreak": "^1.0.2", - "rocambole-token": "^1.2.1" - } - }, - "esformatter-spaced-lined-comment": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/esformatter-spaced-lined-comment/-/esformatter-spaced-lined-comment-2.0.1.tgz", - "integrity": "sha1-3F80B/k8KV4eVkRr00RWDaXm3Kw=" - }, - "eslint": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-2.13.1.tgz", - "integrity": "sha1-5MyPoPAJ+4KaquI4VaKTYL4fbBE=", - "requires": { - "chalk": "^1.1.3", - "concat-stream": "^1.4.6", - "debug": "^2.1.1", - "doctrine": "^1.2.2", - "es6-map": "^0.1.3", - "escope": "^3.6.0", - "espree": "^3.1.6", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "file-entry-cache": "^1.1.1", - "glob": "^7.0.3", - "globals": "^9.2.0", - "ignore": "^3.1.2", - "imurmurhash": "^0.1.4", - "inquirer": "^0.12.0", - "is-my-json-valid": "^2.10.0", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.5.1", - "json-stable-stringify": "^1.0.0", - "levn": "^0.3.0", - "lodash": "^4.0.0", - "mkdirp": "^0.5.0", - "optionator": "^0.8.1", - "path-is-absolute": "^1.0.0", - "path-is-inside": "^1.0.1", - "pluralize": "^1.2.1", - "progress": "^1.1.8", - "require-uncached": "^1.0.2", - "shelljs": "^0.6.0", - "strip-json-comments": "~1.0.1", - "table": "^3.7.8", - "text-table": "~0.2.0", - "user-home": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "requires": { - "jsonify": "~0.0.0" - } - }, - "shelljs": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.6.1.tgz", - "integrity": "sha1-7GIRvtGSBEIIj+D3Cyg3Iy7SyKg=" - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "eslint-config-semistandard": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/eslint-config-semistandard/-/eslint-config-semistandard-6.0.2.tgz", - "integrity": "sha1-JXuWM30qjy6yDiDl8OgjUBShkNQ=", - "requires": {} - }, - "eslint-config-standard": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-5.3.1.tgz", - "integrity": "sha1-WRyWkVF0QTL1YdO5FagS6kE/5JA=", - "requires": {} - }, - "eslint-config-standard-jsx": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-1.2.0.tgz", - "integrity": "sha1-yp/Vk2EOavVaKtP0MACS0ejA3vU=", - "requires": {} - }, - "eslint-plugin-promise": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-1.3.2.tgz", - "integrity": "sha1-/OMy1vX/UjIApTdwSGPsPCQiunw=" - }, - "eslint-plugin-react": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-5.2.2.tgz", - "integrity": "sha1-fbBo4fVIf2hx5N7vNqOBwwPqwWE=", - "requires": { - "doctrine": "^1.2.2", - "jsx-ast-utils": "^1.2.1" - } - }, - "eslint-plugin-standard": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-1.3.3.tgz", - "integrity": "sha1-owhUUVI0MedvQJxwy4+U4yvw7H8=" - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "espree": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", - "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", - "requires": { - "acorn": "^5.5.0", - "acorn-jsx": "^3.0.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "esprima-fb": { - "version": "15001.1.0-dev-harmony-fb", - "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1.0-dev-harmony-fb.tgz", - "integrity": "sha1-MKlHMDxrjV6VW+4rmbHSMyBqaQE=" - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "requires": { - "estraverse": "^4.1.0" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - }, - "estraverse-fb": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/estraverse-fb/-/estraverse-fb-1.3.2.tgz", - "integrity": "sha1-0yOky15awzHOoDNBOpJT4WQ+B8Q=", - "requires": {} - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" - }, - "eventemitter3": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz", - "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==" - }, - "events": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/events/-/events-1.0.2.tgz", - "integrity": "sha1-dYSdz+k9EPsFfDAFWv29UdBqjiQ=" - }, - "eventsource": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", - "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", - "requires": { - "original": "^1.0.0" - } - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - } - } - }, - "exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=" - }, - "expand-braces": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", - "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", - "requires": { - "array-slice": "^0.2.3", - "array-unique": "^0.2.1", - "braces": "^0.1.2" - }, - "dependencies": { - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" - }, - "braces": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", - "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", - "requires": { - "expand-range": "^0.1.0" - } - }, - "expand-range": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", - "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", - "requires": { - "is-number": "^0.1.1", - "repeat-string": "^0.2.2" - } - }, - "is-number": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", - "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=" - }, - "repeat-string": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", - "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=" - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "requires": { - "fill-range": "^2.1.0" - }, - "dependencies": { - "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - } - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "requires": { - "kind-of": "^3.0.2" - } - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "expand-tilde": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", - "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=", - "requires": { - "os-homedir": "^1.0.1" - } - }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" - } - } - }, - "ext": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.2.0.tgz", - "integrity": "sha512-0ccUQK/9e3NreLFg6K6np8aPyRgwycx+oFGtfx1dSp7Wj00Ozw9r05FgBRlzjf2XBM7LAzwgLyDscRrtSU91hA==", - "requires": { - "type": "^2.0.0" - }, - "dependencies": { - "type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz", - "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==" - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - }, - "fast-text-encoding": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz", - "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==" - }, - "fastparse": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", - "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==" - }, - "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - } - }, - "file-entry-cache": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-1.3.1.tgz", - "integrity": "sha1-RMYepgeuS+nBQC9B9EJwy/4zT/g=", - "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" - } - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-node-modules": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/find-node-modules/-/find-node-modules-1.0.4.tgz", - "integrity": "sha1-tt6zzMtpnIcDdne87eLF9YYrJVA=", - "requires": { - "findup-sync": "0.4.2", - "merge": "^1.2.0" - } - }, - "find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "findit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findit/-/findit-2.0.0.tgz", - "integrity": "sha1-ZQnwEmr0wXhVHPqZOU4DLhOk1W4=" - }, - "findup-sync": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.4.2.tgz", - "integrity": "sha1-qBF9D3MST1pFRoOVef5S1xKfteU=", - "requires": { - "detect-file": "^0.1.0", - "is-glob": "^2.0.1", - "micromatch": "^2.3.7", - "resolve-dir": "^0.1.0" - }, - "dependencies": { - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "requires": { - "arr-flatten": "^1.0.1" - } - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "requires": { - "is-extglob": "^1.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "^1.0.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "firebase": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/firebase/-/firebase-7.19.0.tgz", - "integrity": "sha512-gS0nFagMfDLEucgcMD/tCfpLH+crnTurpyMsh6JEvith7GA8cRA4S3T3300xPL6dSZliI7EiGsCNBXBil6sAUw==", - "requires": { - "@firebase/analytics": "0.4.2", - "@firebase/app": "0.6.10", - "@firebase/app-types": "0.6.1", - "@firebase/auth": "0.14.9", - "@firebase/database": "0.6.11", - "@firebase/firestore": "1.16.5", - "@firebase/functions": "0.4.50", - "@firebase/installations": "0.4.16", - "@firebase/messaging": "0.7.0", - "@firebase/performance": "0.4.0", - "@firebase/polyfill": "0.3.36", - "@firebase/remote-config": "0.1.27", - "@firebase/storage": "0.3.42", - "@firebase/util": "0.3.1" - } - }, - "flat-cache": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", - "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", - "requires": { - "circular-json": "^0.3.1", - "graceful-fs": "^4.1.2", - "rimraf": "~2.6.2", - "write": "^0.2.1" - }, - "dependencies": { - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "flatten": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", - "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==" - }, - "flatten-vertex-data": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/flatten-vertex-data/-/flatten-vertex-data-1.0.2.tgz", - "integrity": "sha512-BvCBFK2NZqerFTdMDgqfHBwxYWnxeCkwONsw6PvBMcUXqo8U/KDWwmXhqx1x2kLIg7DqIsJfOaJFOmlua3Lxuw==", - "requires": { - "dtype": "^2.0.0" - } - }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "follow-redirects": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.9.0.tgz", - "integrity": "sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A==", - "requires": { - "debug": "^3.0.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "requires": { - "for-in": "^1.0.1" - } - }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" - }, - "form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "formatio": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.1.1.tgz", - "integrity": "sha512-cPh7is6k3d8tIUh+pnXXuAbD/uhSXGgqLPw0UrYpv5lfdJ+MMMSjx40JNpqP7Top9Nt25YomWEiRmkHbOvkCaA==", - "requires": { - "samsam": "~1.1" - }, - "dependencies": { - "samsam": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.1.3.tgz", - "integrity": "sha512-t9rCPskf50hZ53eH8Z+cSWD4LfJBac+8vSSuzi1Y2HzygyXxtAl0BaR3hr6iI6A+nFQbkmJNC/brQLNEeVnrmg==" - } - } - }, - "formidable": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz", - "integrity": "sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg==" - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "fs": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.2.tgz", - "integrity": "sha1-4fJE7zkzwbKmS9R5kTYGDQ9ZFPg=" - }, - "fs-access": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", - "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", - "requires": { - "null-check": "^1.0.0" - } - }, - "fs-exists-sync": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", - "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=" - }, - "fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==" - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", - "optional": true, - "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "bundled": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "bundled": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "bundled": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "bundled": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "integrity": "sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==", - "bundled": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "bundled": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", - "bundled": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", - "bundled": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "bundled": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "bundled": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "bundled": true, - "optional": true - }, - "debug": { - "version": "4.1.1", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "bundled": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "bundled": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "bundled": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "bundled": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "bundled": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", - "bundled": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "bundled": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "bundled": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "bundled": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", - "bundled": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "bundled": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "bundled": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "bundled": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "bundled": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "bundled": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "bundled": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==", - "bundled": true, - "optional": true - }, - "minipass": { - "version": "2.3.5", - "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "integrity": "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==", - "bundled": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.1.1", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "bundled": true, - "optional": true - }, - "needle": { - "version": "2.3.0", - "integrity": "sha512-QBZu7aAFR0522EyaXZM0FZ9GLpq6lvQ3uq8gteiDUp7wKdy0lSd2hPlgFwVuW1CBkfEs9PfDQsQzZghLs/psdg==", - "bundled": true, - "optional": true, - "requires": { - "debug": "^4.1.0", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.12.0", - "integrity": "sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==", - "bundled": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "integrity": "sha512-+5XZFpQZEY0cg5JaxLwGxDlKNKYxuXwGt8/Oi3UXm5/4ymrJve9d2CURituxv3rSrVCGZj4m1U1JlHTdcKt2Ng==", - "bundled": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.6", - "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==", - "bundled": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.1", - "integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==", - "bundled": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "bundled": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", - "bundled": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "bundled": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "bundled": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", - "bundled": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "bundled": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "bundled": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "bundled": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "bundled": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "bundled": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "integrity": "sha512-7Wl+Jz+IGWuSdgsQEJ4JunV0si/iMhg42MnQQG6h1R6TNeVenp4U9x5CC5v/gYqz/fENLQITAWXidNtVL0NNbw==", - "bundled": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "bundled": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "bundled": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "bundled": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "bundled": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "bundled": true, - "optional": true - }, - "semver": { - "version": "5.7.0", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "bundled": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "bundled": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "integrity": "sha512-meQNNykwecVxdu1RlYMKpQx4+wefIYpmxi6gexo/KAbwquJrBUrBmKYJrE8KFkVQAAVWEnwNdu21PgrD77J3xA==", - "bundled": true, - "optional": true - }, - "string_decoder": { - "version": "1.1.1", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "string-width": { - "version": "1.0.2", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "bundled": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "bundled": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "bundled": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", - "bundled": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "bundled": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "bundled": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "bundled": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", - "bundled": true, - "optional": true - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "gaxios": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-3.1.0.tgz", - "integrity": "sha512-DDTn3KXVJJigtz+g0J3vhcfbDbKtAroSTxauWsdnP57sM5KZ3d2c/3D9RKFJ86s43hfw6WULg6TXYw/AYiBlpA==", - "requires": { - "abort-controller": "^3.0.0", - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.3.0" - }, - "dependencies": { - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" - } - } - }, - "gcp-metadata": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.1.4.tgz", - "integrity": "sha512-5J/GIH0yWt/56R3dNaNWPGQ/zXsZOddYECfJaqxFWgrZ9HC2Kvc5vl9upOgUUHKzURjAVf2N+f6tEJiojqXUuA==", - "requires": { - "gaxios": "^3.0.0", - "json-bigint": "^1.0.0" - } - }, - "generate-function": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", - "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", - "requires": { - "is-property": "^1.0.2" - } - }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "requires": { - "is-property": "^1.0.0" - } - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" - }, - "gh-pages": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-0.11.0.tgz", - "integrity": "sha1-kzE8bcv8dNQmvIminr/2QgrMPBs=", - "requires": { - "async": "1.5.2", - "commander": "2.9.0", - "globby": "^4.0.0", - "graceful-fs": "4.1.2", - "q": "1.4.1", - "q-io": "1.13.2", - "wrench": "1.5.8" - }, - "dependencies": { - "commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "requires": { - "graceful-readlink": ">= 1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.2.tgz", - "integrity": "sha1-/iI5t1dJcuZ+QfgIgj+b+kqZHjc=" - }, - "q": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", - "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=" - } - } - }, - "ghpages": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/ghpages/-/ghpages-0.0.10.tgz", - "integrity": "sha1-zpZbwLGyfPI+atM7kuwaL42S4LQ=", - "dev": true, - "requires": { - "gh-pages": "^0.11.0", - "gitconfiglocal": "^1.0.0", - "meow": "^3.6.0", - "object-assign": "^4.0.1", - "opn": "^3.0.3", - "parse-github-url": "^0.2.1" - } - }, - "gitconfiglocal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", - "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=", - "requires": { - "ini": "^1.3.2" - } - }, - "gl-preserve-state": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gl-preserve-state/-/gl-preserve-state-1.0.0.tgz", - "integrity": "sha512-zQZ25l3haD4hvgJZ6C9+s0ebdkW9y+7U2qxvGu1uWOJh8a4RU+jURIKEQhf8elIlFpMH6CrAY2tH0mYrRjet3Q==" - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - }, - "dependencies": { - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "requires": { - "is-glob": "^2.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "^1.0.0" - } - } - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "global": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", - "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", - "requires": { - "min-document": "^2.19.0", - "process": "~0.5.1" - } - }, - "global-modules": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", - "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=", - "requires": { - "global-prefix": "^0.1.4", - "is-windows": "^0.2.0" - }, - "dependencies": { - "is-windows": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", - "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=" - } - } - }, - "global-prefix": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", - "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=", - "requires": { - "homedir-polyfill": "^1.0.0", - "ini": "^1.3.4", - "is-windows": "^0.2.0", - "which": "^1.2.12" - }, - "dependencies": { - "is-windows": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", - "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=" - } - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - }, - "globby": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-4.1.0.tgz", - "integrity": "sha1-CA9UVJ7BuCpsYOYx/ILhIR2+lfg=", - "requires": { - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "glob": "^6.0.1", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - } - } - }, - "google-auth-library": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-6.0.6.tgz", - "integrity": "sha512-fWYdRdg55HSJoRq9k568jJA1lrhg9i2xgfhVIMJbskUmbDpJGHsbv9l41DGhCDXM21F9Kn4kUwdysgxSYBYJUw==", - "requires": { - "arrify": "^2.0.0", - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "fast-text-encoding": "^1.0.0", - "gaxios": "^3.0.0", - "gcp-metadata": "^4.1.0", - "gtoken": "^5.0.0", - "jws": "^4.0.0", - "lru-cache": "^6.0.0" - }, - "dependencies": { - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" - }, - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, - "google-p12-pem": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.0.2.tgz", - "integrity": "sha512-tbjzndQvSIHGBLzHnhDs3cL4RBjLbLXc2pYvGH+imGVu5b4RMAttUTdnmW2UH0t11QeBTXZ7wlXPS7hrypO/tg==", - "requires": { - "node-forge": "^0.9.0" - } - }, - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" - }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" - }, - "growl": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", - "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=" - }, - "gtoken": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.0.3.tgz", - "integrity": "sha512-Nyd1wZCMRc2dj/mAD0LlfQLcAO06uKdpKJXvK85SGrF5+5+Bpfil9u/2aw35ltvEHjvl0h5FMKN5knEU+9JrOg==", - "requires": { - "gaxios": "^3.0.0", - "google-p12-pem": "^3.0.0", - "jws": "^4.0.0", - "mime": "^2.2.0" - }, - "dependencies": { - "mime": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", - "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==" - } - } - }, - "handle-thing": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", - "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==" - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-binary": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", - "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", - "requires": { - "isarray": "0.0.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - } - } - }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hat": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/hat/-/hat-0.0.3.tgz", - "integrity": "sha1-uwFKnmSzeIrtgAWRdBPU/z1QLYo=" - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.1" - } - }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "hosted-git-info": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", - "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==" - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "html-comment-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==" - }, - "html-entities": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", - "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=" - }, - "html-require-loader": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/html-require-loader/-/html-require-loader-1.0.1.tgz", - "integrity": "sha512-shPrGPYlRuIKFU7XQu6CXy/MKCAIfzHLKhBSSRMkeu7Y3iFWH5qlkzcIC30ADw+g18kGFk6uI4OtU7n/x2BvcQ==", - "requires": { - "loader-utils": "^1.2.3" - } - }, - "htmlescape": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", - "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=" - }, - "http-browserify": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/http-browserify/-/http-browserify-1.7.0.tgz", - "integrity": "sha1-M3la3nLfiKz7/TZ3PO/tp2RzWyA=", - "requires": { - "Base64": "~0.2.0", - "inherits": "~2.0.1" - } - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } - } - }, - "http-parser-js": { - "version": "0.4.10", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", - "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=" - }, - "http-proxy": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz", - "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==", - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", - "requires": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - } - }, - "https-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", - "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=" - }, - "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-replace-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=" - }, - "icss-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", - "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", - "requires": { - "postcss": "^6.0.1" - } - }, - "idb": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/idb/-/idb-3.0.2.tgz", - "integrity": "sha512-+FLa/0sTXqyux0o6C+i2lOR0VoS60LU/jzUo5xjfY6+7sEEgy4Gz1O7yFBXvjd7N0NyIGWIRg8DcQSLEG+VSPw==" - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==" - }, - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "requires": { - "repeating": "^2.0.0" - } - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" - }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" - }, - "inline-source-map": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.5.0.tgz", - "integrity": "sha1-Skxd2OT7Xps82mDIIt+tyu5m4K8=", - "requires": { - "source-map": "~0.4.0" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, - "inquirer": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", - "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", - "requires": { - "ansi-escapes": "^1.1.0", - "ansi-regex": "^2.0.0", - "chalk": "^1.0.0", - "cli-cursor": "^1.0.1", - "cli-width": "^2.0.0", - "figures": "^1.3.5", - "lodash": "^4.3.0", - "readline2": "^1.0.1", - "run-async": "^0.1.0", - "rx-lite": "^3.1.2", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "insert-module-globals": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-6.6.3.tgz", - "integrity": "sha1-IGOOKaMPntHKLjqCX7wsulJG3fw=", - "requires": { - "combine-source-map": "~0.6.1", - "concat-stream": "~1.4.1", - "is-buffer": "^1.1.0", - "JSONStream": "^1.0.3", - "lexical-scope": "^1.2.0", - "process": "~0.11.0", - "through2": "^1.0.0", - "xtend": "^4.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "through2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-1.1.1.tgz", - "integrity": "sha1-CEfLxESfNAVXTb3M2buEG4OsNUU=", - "requires": { - "readable-stream": ">=1.1.13-1 <1.2.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - } - } - }, - "internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "requires": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - } - }, - "interpret": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==" - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" - }, - "ipaddr.js": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", - "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==" - }, - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==" - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==" - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" - }, - "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "requires": { - "has": "^1.0.3" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "requires": { - "is-primitive": "^2.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-function": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", - "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=" - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-my-ip-valid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", - "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==" - }, - "is-my-json-valid": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.0.tgz", - "integrity": "sha512-XTHBZSIIxNsIsZXg7XB5l8z/OBFosl1Wao4tXLpeC7eKU4Vm/kdop2azkPqULwnfGQjmeDIyey9g7afMMtdWAA==", - "requires": { - "generate-function": "^2.0.0", - "generate-object-property": "^1.1.0", - "is-my-ip-valid": "^1.0.0", - "jsonpointer": "^4.0.0", - "xtend": "^4.0.0" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" - }, - "is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", - "requires": { - "is-path-inside": "^2.1.0" - } - }, - "is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", - "requires": { - "path-is-inside": "^1.0.2" - } - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=" - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" - }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "requires": { - "has": "^1.0.1" - } - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-svg": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", - "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", - "requires": { - "html-comment-regex": "^1.1.0" - } - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isbinaryfile": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", - "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", - "requires": { - "buffer-alloc": "^1.2.0" - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - }, - "dependencies": { - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - } - } - }, - "jade": { - "version": "0.26.3", - "resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz", - "integrity": "sha1-jxDXl32NefL2/4YqgbBRPMslaGw=", - "requires": { - "commander": "0.6.1", - "mkdirp": "0.3.0" - }, - "dependencies": { - "commander": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz", - "integrity": "sha1-+mihT2qUXVTbvlDYzbMyDp47GgY=" - }, - "mkdirp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", - "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=" - } - } - }, - "jest-worker": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", - "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", - "requires": { - "merge-stream": "^2.0.0", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "js-base64": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.2.tgz", - "integrity": "sha512-Vg8czh0Q7sFBSUMWWArX/miJeBWYBPpdU/3M/DKSaekLMqrqVPaedp+5mZhie/r0lgrcaYBfwXatEew6gwgiQQ==" - }, - "js-beautify": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.6.4.tgz", - "integrity": "sha1-qa95aZdCrJobb93B/bx4vE1RX8M=", - "requires": { - "config-chain": "~1.1.5", - "editorconfig": "^0.13.2", - "mkdirp": "~0.5.0", - "nopt": "~3.0.1" - } - }, - "js-string-escape": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", - "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "dependencies": { - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - } - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - }, - "json-bigint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "requires": { - "bignumber.js": "^9.0.0" - } - }, - "json-loader": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", - "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==" - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stable-stringify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", - "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", - "requires": { - "jsonify": "~0.0.0" - } - }, - "json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=" - }, - "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" - }, - "jsonify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", - "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==" - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" - }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=" - }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, - "jstransform": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/jstransform/-/jstransform-11.0.3.tgz", - "integrity": "sha1-CaeJk+CuTU70SH9hVakfYZDLQiM=", - "requires": { - "base62": "^1.1.0", - "commoner": "^0.10.1", - "esprima-fb": "^15001.1.0-dev-harmony-fb", - "object-assign": "^2.0.0", - "source-map": "^0.4.2" - }, - "dependencies": { - "object-assign": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", - "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=" - }, - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, - "jsx-ast-utils": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz", - "integrity": "sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE=" - }, - "just-extend": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", - "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", - "peer": true - }, - "jwa": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", - "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", - "requires": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", - "requires": { - "jwa": "^2.0.0", - "safe-buffer": "^5.0.1" - } - }, - "karma": { - "version": "0.13.22", - "resolved": "https://registry.npmjs.org/karma/-/karma-0.13.22.tgz", - "integrity": "sha1-B3ULG9Bj1+fnuRvNLmNU2PKqh0Q=", - "requires": { - "batch": "^0.5.3", - "bluebird": "^2.9.27", - "body-parser": "^1.12.4", - "chokidar": "^1.4.1", - "colors": "^1.1.0", - "connect": "^3.3.5", - "core-js": "^2.1.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.0", - "expand-braces": "^0.1.1", - "glob": "^7.0.0", - "graceful-fs": "^4.1.2", - "http-proxy": "^1.13.0", - "isbinaryfile": "^3.0.0", - "lodash": "^3.8.0", - "log4js": "^0.6.31", - "mime": "^1.3.4", - "minimatch": "^3.0.0", - "optimist": "^0.6.1", - "rimraf": "^2.3.3", - "socket.io": "^1.4.5", - "source-map": "^0.5.3", - "useragent": "^2.1.6" - }, - "dependencies": { - "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "requires": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" - } - }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "requires": { - "arr-flatten": "^1.0.1" - } - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, - "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "requires": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "fsevents": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "requires": { - "is-extglob": "^1.0.0" - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "requires": { - "is-glob": "^2.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "^1.0.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - }, - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "karma-browserify": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/karma-browserify/-/karma-browserify-4.4.2.tgz", - "integrity": "sha1-QS7h/GMy7SSJ2Ax5l8qjzms61GE=", - "requires": { - "browserify": "10.2.3", - "convert-source-map": "~0.3.3", - "hat": "0.0.3", - "js-string-escape": "^1.0.0", - "lodash": "^3.10.1", - "minimatch": "^1.0.0", - "os-shim": "~0.1.2", - "watchify": "3.2.1" - }, - "dependencies": { - "convert-source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", - "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=" - }, - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" - }, - "lru-cache": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=" - }, - "minimatch": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-1.0.0.tgz", - "integrity": "sha1-4N0hILSeG3JM6NcUxSCCKpQ4V20=", - "requires": { - "lru-cache": "2", - "sigmund": "~1.0.0" - } - } - } - }, - "karma-chai-shallow-deep-equal": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/karma-chai-shallow-deep-equal/-/karma-chai-shallow-deep-equal-0.0.4.tgz", - "integrity": "sha1-GmdPbPaOBZ+592OmUMK9Q4LaqJg=", - "requires": {} - }, - "karma-chrome-launcher": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", - "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", - "requires": { - "fs-access": "^1.0.0", - "which": "^1.2.1" - } - }, - "karma-env-preprocessor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/karma-env-preprocessor/-/karma-env-preprocessor-0.1.1.tgz", - "integrity": "sha1-u+jIfVnADtt2BwvTwxtLOdXcfhU=" - }, - "karma-firefox-launcher": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-0.1.7.tgz", - "integrity": "sha1-wF3YZTNpHmLzGVJZUJjovTV9OfM=" - }, - "karma-mocha": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-0.2.2.tgz", - "integrity": "sha1-OI7ZF9oV3LGW0bkVwZNO+AMZP44=", - "requires": {} - }, - "karma-mocha-reporter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/karma-mocha-reporter/-/karma-mocha-reporter-1.3.0.tgz", - "integrity": "sha1-r2pGwIqcVcf9OUw6WqJhetoVhKU=", - "requires": { - "chalk": "1.1.1", - "karma": ">=0.13" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.1.tgz", - "integrity": "sha1-UJr7ZwZudJn36zU1x3RFdyri0Bk=", - "requires": { - "ansi-styles": "^2.1.0", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "karma-sinon-chai": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/karma-sinon-chai/-/karma-sinon-chai-1.3.4.tgz", - "integrity": "sha512-Oatu8tdkfWaSveM809euI6KGcNJRdoXFilz9ozSf+vPwrM73kncu54nsfkLcMqR/iht3PXASAGK9La5oU2xDKQ==", - "requires": { - "lolex": "^1.6.0" - } - }, - "killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - }, - "labeled-stream-splicer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-1.0.2.tgz", - "integrity": "sha1-RhUzFTd4SYHo/SZOHzpDTE4N3WU=", - "requires": { - "inherits": "^2.0.1", - "isarray": "~0.0.1", - "stream-splicer": "^1.1.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - } - } - }, - "layout-bmfont-text": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/layout-bmfont-text/-/layout-bmfont-text-1.3.4.tgz", - "integrity": "sha1-8g8sVGR3T0jabOipl/vObUaUW4E=", - "requires": { - "as-number": "^1.0.0", - "word-wrapper": "^1.0.7", - "xtend": "^4.0.0" - } - }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "requires": { - "invert-kv": "^2.0.0" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lexical-scope": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz", - "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=", - "requires": { - "astw": "^2.0.0" - } - }, - "load-bmfont": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.0.tgz", - "integrity": "sha512-kT63aTAlNhZARowaNYcY29Fn/QYkc52M3l6V1ifRcPewg2lvUZDAj7R6dXjOL9D0sict76op3T5+odumDSF81g==", - "requires": { - "buffer-equal": "0.0.1", - "mime": "^1.3.4", - "parse-bmfont-ascii": "^1.0.3", - "parse-bmfont-binary": "^1.0.5", - "parse-bmfont-xml": "^1.1.4", - "phin": "^2.9.1", - "xhr": "^2.0.1", - "xtend": "^4.0.0" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - } - } - }, - "load-script": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/load-script/-/load-script-1.0.0.tgz", - "integrity": "sha1-BJGTngvuVkPuSUp+PaPSuscMbKQ=" - }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==" - }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - } - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" - }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" - }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", - "peer": true - }, - "lodash.memoize": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", - "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=" - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" - }, - "log4js": { - "version": "0.6.38", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", - "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", - "requires": { - "readable-stream": "~1.0.2", - "semver": "~4.3.3" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=" - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, - "loglevel": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.6.tgz", - "integrity": "sha512-Sgr5lbboAUBo3eXCSPL4/KoVz3ROKquOjcctxmHIt+vol2DrqTQe3SwkKKuYhEiWB5kYa13YyopJ69deJ1irzQ==" - }, - "lolex": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.6.0.tgz", - "integrity": "sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY=" - }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" - } - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "requires": { - "p-defer": "^1.0.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" - }, - "map-limit": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/map-limit/-/map-limit-0.0.1.tgz", - "integrity": "sha1-63lhAxwPDo0AG/LVb6toXViCLzg=", - "requires": { - "once": "~1.3.0" - }, - "dependencies": { - "once": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", - "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", - "requires": { - "wrappy": "1" - } - } - } - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "requires": { - "object-visit": "^1.0.0" - } - }, - "math-expression-evaluator": { - "version": "1.2.22", - "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.22.tgz", - "integrity": "sha512-L0j0tFVZBQQLeEjmWOvDLoRciIY8gQGWahvkztXUal8jH8R5Rlqo9GCvgqvXcy9LQhEWdQCVvzqAbxgYNt4blQ==" - }, - "math-random": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", - "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==" - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - } - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - } - }, - "merge": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", - "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==" - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.42.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", - "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==" - }, - "mime-types": { - "version": "2.1.25", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", - "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", - "requires": { - "mime-db": "1.42.0" - } - }, - "mimeparse": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/mimeparse/-/mimeparse-0.1.4.tgz", - "integrity": "sha1-2vsCdSNw/SJgk64xUsJxrwGsJUo=" - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "requires": { - "dom-walk": "^0.1.0" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" - }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - }, - "dependencies": { - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } - } - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - } - } - }, - "mocha": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-2.5.3.tgz", - "integrity": "sha1-FhvlvetJZ3HrmzV0UFC2IrWu/Fg=", - "requires": { - "commander": "2.3.0", - "debug": "2.2.0", - "diff": "1.4.0", - "escape-string-regexp": "1.0.2", - "glob": "3.2.11", - "growl": "1.9.2", - "jade": "0.26.3", - "mkdirp": "0.5.1", - "supports-color": "1.2.0", - "to-iso-string": "0.0.2" - }, - "dependencies": { - "commander": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.3.0.tgz", - "integrity": "sha1-/UMOiJgy7DU7ms0d4hfBHLPu+HM=" - }, - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "requires": { - "ms": "0.7.1" - } - }, - "escape-string-regexp": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz", - "integrity": "sha1-Tbwv5nTnGUnK8/smlc5/LcHZqNE=" - }, - "glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", - "requires": { - "inherits": "2", - "minimatch": "0.3" - } - }, - "lru-cache": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=" - }, - "minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", - "requires": { - "lru-cache": "2", - "sigmund": "~1.0.0" - } - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" - }, - "supports-color": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.2.0.tgz", - "integrity": "sha1-/x7R5hFp0Gs88tWI4YixjYhH4X4=" - } - } - }, - "module-deps": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-3.9.1.tgz", - "integrity": "sha1-6nXK+RmQkNJbDVUStaysuW5/h/M=", - "requires": { - "browser-resolve": "^1.7.0", - "concat-stream": "~1.4.5", - "defined": "^1.0.0", - "detective": "^4.0.0", - "duplexer2": "0.0.2", - "inherits": "^2.0.1", - "JSONStream": "^1.0.3", - "parents": "^1.0.0", - "readable-stream": "^1.1.13", - "resolve": "^1.1.3", - "stream-combiner2": "~1.0.0", - "subarg": "^1.0.0", - "through2": "^1.0.0", - "xtend": "^4.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "through2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-1.1.1.tgz", - "integrity": "sha1-CEfLxESfNAVXTb3M2buEG4OsNUU=", - "requires": { - "readable-stream": ">=1.1.13-1 <1.2.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - } - } - }, - "mout": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/mout/-/mout-1.2.2.tgz", - "integrity": "sha512-w0OUxFEla6z3d7sVpMZGBCpQvYh8PHS1wZ6Wu9GNKHMpAHWJ0if0LsQZh3DlOqw55HlhJEOMLpFnwtxp99Y5GA==" - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", - "requires": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - } - }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" - }, - "multiline": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/multiline/-/multiline-1.0.2.tgz", - "integrity": "sha1-abHyX/B00oKJBPJE3dBrfZbvbJM=", - "requires": { - "strip-indent": "^1.0.0" - } - }, - "mute-stream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", - "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=" - }, - "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "new-array": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/new-array/-/new-array-1.0.0.tgz", - "integrity": "sha1-XbxjnZYerH8an7wacUbsEvKST78=" - }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" - }, - "nice-color-palettes": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/nice-color-palettes/-/nice-color-palettes-1.0.1.tgz", - "integrity": "sha1-h16gHchu+uf1leBmqLJmDnIGBT4=", - "requires": { - "map-limit": "0.0.1", - "minimist": "^1.2.0", - "new-array": "^1.0.0", - "xhr-request": "^1.0.1" - } - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, - "nise": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.5.3.tgz", - "integrity": "sha512-Ymbac/94xeIrMf59REBPOv0thr+CJVFMhrlAkW/gjCIE58BGQdCj0x7KRCb3yz+Ga2Rz3E9XXSvUyyxqqhjQAQ==", - "peer": true, - "requires": { - "@sinonjs/formatio": "^3.2.1", - "@sinonjs/text-encoding": "^0.7.1", - "just-extend": "^4.0.2", - "lolex": "^5.0.1", - "path-to-regexp": "^1.7.0" - }, - "dependencies": { - "@sinonjs/formatio": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.2.tgz", - "integrity": "sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ==", - "peer": true, - "requires": { - "@sinonjs/commons": "^1", - "@sinonjs/samsam": "^3.1.0" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "peer": true - }, - "lolex": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz", - "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==", - "peer": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "peer": true, - "requires": { - "isarray": "0.0.1" - } - } - } - }, - "node-fetch": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", - "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" - }, - "node-forge": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", - "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==" - }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - }, - "dependencies": { - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "requires": { - "pako": "~1.0.5" - } - }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" - }, - "events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", - "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==" - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" - }, - "pako": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", - "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==" - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" - }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "timers-browserify": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", - "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", - "requires": { - "setimmediate": "^1.0.4" - } - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - } - } - }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } - } - }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" - } - } - }, - "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "requires": { - "abbrev": "1" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" - }, - "normalize-url": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", - "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", - "requires": { - "object-assign": "^4.0.1", - "prepend-http": "^1.0.0", - "query-string": "^4.1.0", - "sort-keys": "^1.0.0" - }, - "dependencies": { - "query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", - "requires": { - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - } - } - }, - "nosleep.js": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/nosleep.js/-/nosleep.js-0.7.0.tgz", - "integrity": "sha1-z9kZwlUjyg0PSmn7MwXAg62u4ok=" - }, - "npm-path": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-1.1.0.tgz", - "integrity": "sha1-BHSuAEGcMn1UcBt88s0F3Ii+EUA=", - "requires": { - "which": "^1.2.4" - } - }, - "npm-run": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-run/-/npm-run-2.0.0.tgz", - "integrity": "sha1-KN/ArV4uRv4ISOK9WN3wAue3PBU=", - "requires": { - "minimist": "^1.1.1", - "npm-path": "^1.0.1", - "npm-which": "^2.0.0", - "serializerr": "^1.0.1", - "spawn-sync": "^1.0.5", - "sync-exec": "^0.5.0" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "requires": { - "path-key": "^2.0.0" - } - }, - "npm-which": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-2.0.0.tgz", - "integrity": "sha1-DEaYIWC3gwk2YdHQG9RJbS/qu6w=", - "requires": { - "commander": "^2.2.0", - "npm-path": "^1.0.0", - "which": "^1.0.5" - }, - "dependencies": { - "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==" - } - } - }, - "null-check": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", - "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=" - }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "nunjucks": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.0.tgz", - "integrity": "sha512-YS/qEQ6N7qCnUdm6EoYRBfJUdWNT0PpKbbRnogV2XyXbBm2STIP1O6yrdZHgwMVK7fIYUx7i8+yatEixnXSB1w==", - "requires": { - "a-sync-waterfall": "^1.0.0", - "asap": "^2.0.3", - "chokidar": "^2.0.0", - "yargs": "^3.32.0" - }, - "dependencies": { - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "requires": { - "invert-kv": "^1.0.0" - } - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "requires": { - "lcid": "^1.0.0" - } - }, - "window-size": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", - "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=" - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - } - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" - }, - "yargs": { - "version": "3.32.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", - "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", - "requires": { - "camelcase": "^2.0.1", - "cliui": "^3.0.3", - "decamelize": "^1.1.1", - "os-locale": "^1.4.0", - "string-width": "^1.0.1", - "window-size": "^0.1.4", - "y18n": "^3.2.0" - } - } - } - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-component": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" - }, - "object-is": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz", - "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=" - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "requires": { - "isobject": "^3.0.0" - } - }, - "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" - } - }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "requires": { - "isobject": "^3.0.1" - } - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=" - }, - "opn": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/opn/-/opn-3.0.3.tgz", - "integrity": "sha1-ttmec5n3jWXDuq/+8fsojpuFJDo=", - "requires": { - "object-assign": "^4.0.1" - } - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - }, - "dependencies": { - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" - } - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "options": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", - "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=" - }, - "original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", - "requires": { - "url-parse": "^1.4.3" - } - }, - "os-browserify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.1.2.tgz", - "integrity": "sha1-ScoCk+CxlZCl9d4Qx/JlphfY/lQ=" - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "os-shim": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz", - "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=" - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "outpipe": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/outpipe/-/outpipe-1.1.1.tgz", - "integrity": "sha1-UM+GFjZeh+Ax4ppeyTOaPaRyX6I=", - "requires": { - "shell-quote": "^1.4.2" - }, - "dependencies": { - "shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" - } - } - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" - }, - "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" - }, - "p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", - "requires": { - "retry": "^0.12.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=" - }, - "parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "requires": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "parents": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", - "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", - "requires": { - "path-platform": "~0.11.15" - } - }, - "parse-asn1": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", - "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", - "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "parse-bmfont-ascii": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", - "integrity": "sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=" - }, - "parse-bmfont-binary": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", - "integrity": "sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=" - }, - "parse-bmfont-xml": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", - "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", - "requires": { - "xml-parse-from-string": "^1.0.0", - "xml2js": "^0.4.5" - } - }, - "parse-github-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-0.2.1.tgz", - "integrity": "sha1-4XM1Al4CyCehQZi2FOc6tbmQS+g=" - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "^1.0.0" - } - } - } - }, - "parse-headers": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz", - "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==" - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "requires": { - "error-ex": "^1.2.0" - } - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" - }, - "parsejson": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", - "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", - "requires": { - "better-assert": "~1.0.0" - } - }, - "parseqs": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", - "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", - "requires": { - "better-assert": "~1.0.0" - } - }, - "parseuri": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", - "requires": { - "better-assert": "~1.0.0" - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" - }, - "path": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/path/-/path-0.11.14.tgz", - "integrity": "sha1-y8dWk1XLPIOv60rOQ+z/lSMeWn0=" - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "path-platform": { - "version": "0.11.15", - "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", - "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - } - } - }, - "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "phin": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", - "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==" - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "optional": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { - "pinkie": "^2.0.0" - } - }, - "pkg-conf": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", - "integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "load-json-file": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, - "pkg-config": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pkg-config/-/pkg-config-1.1.1.tgz", - "integrity": "sha1-VX7yLXPaPIg3EHdmxS6tq94pj+Q=", - "requires": { - "debug-log": "^1.0.0", - "find-root": "^1.0.0", - "xtend": "^4.0.1" - } - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "requires": { - "find-up": "^3.0.0" - } - }, - "pluralize": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", - "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=" - }, - "portfinder": { - "version": "1.0.25", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.25.tgz", - "integrity": "sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg==", - "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.1" - }, - "dependencies": { - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "requires": { - "lodash": "^4.17.14" - } - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "postcss-calc": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", - "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", - "requires": { - "postcss": "^5.0.2", - "postcss-message-helpers": "^2.0.0", - "reduce-css-calc": "^1.2.6" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "postcss-colormin": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", - "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", - "requires": { - "colormin": "^1.0.5", - "postcss": "^5.0.13", - "postcss-value-parser": "^3.2.3" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "postcss-convert-values": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", - "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", - "requires": { - "postcss": "^5.0.11", - "postcss-value-parser": "^3.1.2" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "postcss-discard-comments": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", - "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", - "requires": { - "postcss": "^5.0.14" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "postcss-discard-duplicates": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", - "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", - "requires": { - "postcss": "^5.0.4" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "postcss-discard-empty": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", - "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", - "requires": { - "postcss": "^5.0.14" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "postcss-discard-overridden": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", - "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", - "requires": { - "postcss": "^5.0.16" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "postcss-discard-unused": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", - "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", - "requires": { - "postcss": "^5.0.14", - "uniqs": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "postcss-filter-plugins": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz", - "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==", - "requires": { - "postcss": "^5.0.4" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "postcss-merge-idents": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", - "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", - "requires": { - "has": "^1.0.1", - "postcss": "^5.0.10", - "postcss-value-parser": "^3.1.1" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "postcss-merge-longhand": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", - "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", - "requires": { - "postcss": "^5.0.4" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "postcss-merge-rules": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", - "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", - "requires": { - "browserslist": "^1.5.2", - "caniuse-api": "^1.5.2", - "postcss": "^5.0.4", - "postcss-selector-parser": "^2.2.2", - "vendors": "^1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "requires": { - "caniuse-db": "^1.0.30000639", - "electron-to-chromium": "^1.2.7" - } - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "postcss-message-helpers": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz", - "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=" - }, - "postcss-minify-font-values": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", - "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", - "requires": { - "object-assign": "^4.0.1", - "postcss": "^5.0.4", - "postcss-value-parser": "^3.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "postcss-minify-gradients": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", - "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", - "requires": { - "postcss": "^5.0.12", - "postcss-value-parser": "^3.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "postcss-minify-params": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", - "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", - "requires": { - "alphanum-sort": "^1.0.1", - "postcss": "^5.0.2", - "postcss-value-parser": "^3.0.2", - "uniqs": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "postcss-minify-selectors": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", - "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", - "requires": { - "alphanum-sort": "^1.0.2", - "has": "^1.0.1", - "postcss": "^5.0.14", - "postcss-selector-parser": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "postcss-modules-extract-imports": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz", - "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==", - "requires": { - "postcss": "^6.0.1" - } - }, - "postcss-modules-local-by-default": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", - "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", - "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" - } - }, - "postcss-modules-scope": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", - "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", - "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" - } - }, - "postcss-modules-values": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", - "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", - "requires": { - "icss-replace-symbols": "^1.1.0", - "postcss": "^6.0.1" - } - }, - "postcss-normalize-charset": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", - "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", - "requires": { - "postcss": "^5.0.5" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "postcss-normalize-url": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", - "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", - "requires": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^1.4.0", - "postcss": "^5.0.14", - "postcss-value-parser": "^3.2.3" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "postcss-ordered-values": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", - "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", - "requires": { - "postcss": "^5.0.4", - "postcss-value-parser": "^3.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "postcss-reduce-idents": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", - "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", - "requires": { - "postcss": "^5.0.4", - "postcss-value-parser": "^3.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "postcss-reduce-initial": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", - "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", - "requires": { - "postcss": "^5.0.4" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "postcss-reduce-transforms": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", - "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", - "requires": { - "has": "^1.0.1", - "postcss": "^5.0.8", - "postcss-value-parser": "^3.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "postcss-selector-parser": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", - "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", - "requires": { - "flatten": "^1.0.2", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "postcss-svgo": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", - "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", - "requires": { - "is-svg": "^2.0.0", - "postcss": "^5.0.14", - "postcss-value-parser": "^3.2.3", - "svgo": "^0.7.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "postcss-unique-selectors": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", - "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", - "requires": { - "alphanum-sort": "^1.0.1", - "postcss": "^5.0.4", - "uniqs": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "postcss-zindex": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", - "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", - "requires": { - "has": "^1.0.1", - "postcss": "^5.0.4", - "uniqs": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" - }, - "present": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/present/-/present-0.0.6.tgz", - "integrity": "sha1-nu/3ANqp6ZhhM1Lkf3rCMk1PrwI=" - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" - }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" - }, - "process": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "profane-words": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/profane-words/-/profane-words-1.3.1.tgz", - "integrity": "sha512-F9ejqCswcSF+1ZRLN+exMF78gtCHdI4t9MsWVAUtedyo22lprZKhY6vJY3rCUXJZ8nryCzFjkdLQNWkLpA2UFQ==" - }, - "progress": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", - "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=" - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" - }, - "promise-polyfill": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.1.3.tgz", - "integrity": "sha512-MG5r82wBzh7pSKDRa9y+vllNHz3e3d4CNj1PQE4BQYxLme0gKYYBm9YENq+UkEikyZ0XbiGWxYlVw3Rl9O/U8g==" - }, - "proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" - }, - "protobufjs": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.10.1.tgz", - "integrity": "sha512-pb8kTchL+1Ceg4lFd5XUpK8PdWacbvV5SK2ULH2ebrYtl4GjJmS24m6CKME67jzV53tbJxHlnNOSqQHbTsR9JQ==", - "requires": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.1", - "@types/node": "^13.7.0", - "long": "^4.0.0" - }, - "dependencies": { - "@types/node": { - "version": "13.13.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.15.tgz", - "integrity": "sha512-kwbcs0jySLxzLsa2nWUAGOd/s21WU1jebrEdtzhsj1D4Yps1EOuyI1Qcu+FD56dL7NRNIJtDDjcqIG22NwkgLw==" - } - } - }, - "protochain": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/protochain/-/protochain-1.0.5.tgz", - "integrity": "sha1-mRxAfpneJkqt+PgVBLXn+ve/omA=" - }, - "proxy-addr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", - "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.0" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" - }, - "q-io": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/q-io/-/q-io-1.13.2.tgz", - "integrity": "sha1-7qEw1IHdteGqG8WmaFX3OR0G8AM=", - "requires": { - "collections": "^0.2.0", - "mime": "^1.2.11", - "mimeparse": "^0.1.4", - "q": "^1.0.1", - "qs": "^1.2.1", - "url2": "^0.0.0" - } - }, - "qs": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-1.2.2.tgz", - "integrity": "sha1-GbV/8k3CqZzh+L32r82ln472H4g=" - }, - "quad-indices": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/quad-indices/-/quad-indices-2.0.1.tgz", - "integrity": "sha1-ppQdiaE9Y+7WwdSlpiGgRjYXqBQ=", - "requires": { - "an-array": "^1.0.0", - "dtype": "^2.0.0", - "is-buffer": "^1.0.2" - } - }, - "query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" - }, - "querystringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", - "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==" - }, - "randomatic": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", - "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", - "requires": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" - } - } - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomcolor": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/randomcolor/-/randomcolor-0.4.4.tgz", - "integrity": "sha1-X/VoYul7oDvrBBn/BTbsev9Z7us=" - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "read-only-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-1.1.1.tgz", - "integrity": "sha1-Xad8eZ7ROI0++IoYRxu1kk+KC6E=", - "requires": { - "readable-stream": "^1.0.31", - "readable-wrap": "^1.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "requires": { - "pinkie-promise": "^2.0.0" - } - } - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readable-wrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/readable-wrap/-/readable-wrap-1.0.0.tgz", - "integrity": "sha1-O1ohHGMeEjA6VJkcgGwX564ga/8=", - "requires": { - "readable-stream": "^1.1.13-1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "readline2": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", - "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "mute-stream": "0.0.5" - } - }, - "recast": { - "version": "0.11.23", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", - "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=", - "requires": { - "ast-types": "0.9.6", - "esprima": "~3.1.0", - "private": "~0.1.5", - "source-map": "~0.5.0" - }, - "dependencies": { - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" - } - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "requires": { - "resolve": "^1.1.6" - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" - } - }, - "reduce": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/reduce/-/reduce-1.0.2.tgz", - "integrity": "sha512-xX7Fxke/oHO5IfZSk77lvPa/7bjMh9BuCk4OOoX5XTXrM7s0Z+MkPfSDfz0q7r91BhhGSs8gii/VEN/7zhCPpQ==", - "requires": { - "object-keys": "^1.1.0" - } - }, - "reduce-css-calc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", - "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", - "requires": { - "balanced-match": "^0.4.2", - "math-expression-evaluator": "^1.2.14", - "reduce-function-call": "^1.0.1" - }, - "dependencies": { - "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=" - } - } - }, - "reduce-function-call": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.3.tgz", - "integrity": "sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ==", - "requires": { - "balanced-match": "^1.0.0" - } - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "regenerate-unicode-properties": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", - "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", - "requires": { - "regenerate": "^1.4.0" - } - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - }, - "regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "requires": { - "is-equal-shallow": "^0.1.3" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexp.prototype.flags": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz", - "integrity": "sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA==", - "requires": { - "define-properties": "^1.1.2" - } - }, - "regexpu-core": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz", - "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==", - "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.1.0", - "regjsgen": "^0.5.0", - "regjsparser": "^0.6.0", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.1.0" - } - }, - "regjsgen": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz", - "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==" - }, - "regjsparser": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", - "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" - } - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "requires": { - "is-finite": "^1.0.0" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "peer": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" - } - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "requires": { - "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" - } - } - }, - "resolve-dir": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz", - "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=", - "requires": { - "expand-tilde": "^1.2.2", - "global-modules": "^0.2.3" - } - }, - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=" - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "requires": { - "exit-hook": "^1.0.0", - "onetime": "^1.0.0" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" - }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "requires": { - "align-text": "^0.1.1" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rocambole": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/rocambole/-/rocambole-0.7.0.tgz", - "integrity": "sha1-9seVBVF9xCtvuECEK4uVOw+WhYU=", - "requires": { - "esprima": "^2.1" - }, - "dependencies": { - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=" - } - } - }, - "rocambole-indent": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/rocambole-indent/-/rocambole-indent-2.0.4.tgz", - "integrity": "sha1-oYokl3ygQAuGHapGMehh3LUtCFw=", - "requires": { - "debug": "^2.1.3", - "mout": "^0.11.0", - "rocambole-token": "^1.2.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "mout": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/mout/-/mout-0.11.1.tgz", - "integrity": "sha1-ujYR318OWx/7/QEWa48C0fX6K5k=" - } - } - }, - "rocambole-linebreak": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/rocambole-linebreak/-/rocambole-linebreak-1.0.2.tgz", - "integrity": "sha1-A2IVFbQ7RyHJflocG8paA2Y2jy8=", - "requires": { - "debug": "^2.1.3", - "rocambole-token": "^1.2.1", - "semver": "^4.3.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=" - } - } - }, - "rocambole-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rocambole-node/-/rocambole-node-1.0.0.tgz", - "integrity": "sha1-21tJ3nQHsAgN1RSHLyjjk9D3/z8=" - }, - "rocambole-token": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/rocambole-token/-/rocambole-token-1.2.1.tgz", - "integrity": "sha1-x4XfdCjcPLJ614lwR71SOMwHDTU=" - }, - "rocambole-whitespace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rocambole-whitespace/-/rocambole-whitespace-1.0.0.tgz", - "integrity": "sha1-YzMJSSVrKZQfWbGQRZ+ZnGsdO/k=", - "requires": { - "debug": "^2.1.3", - "repeat-string": "^1.5.0", - "rocambole-token": "^1.2.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "rollup": { - "version": "1.32.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.32.1.tgz", - "integrity": "sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A==", - "peer": true, - "requires": { - "@types/estree": "*", - "@types/node": "*", - "acorn": "^7.1.0" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "peer": true - } - } - }, - "rollup-plugin-terser": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-4.0.4.tgz", - "integrity": "sha512-wPANT5XKVJJ8RDUN0+wIr7UPd0lIXBo4UdJ59VmlPCtlFsE20AM+14pe+tk7YunCsWEiuzkDBY3QIkSCjtrPXg==", - "requires": { - "@babel/code-frame": "^7.0.0", - "jest-worker": "^24.0.0", - "serialize-javascript": "^1.6.1", - "terser": "^3.14.1" - }, - "dependencies": { - "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==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "terser": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", - "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", - "requires": { - "commander": "^2.19.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.10" - } - } - } - }, - "run-async": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", - "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", - "requires": { - "once": "^1.3.0" - } - }, - "run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==" - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", - "requires": { - "aproba": "^1.1.1" - } - }, - "rx": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/rx/-/rx-2.5.3.tgz", - "integrity": "sha1-Ia3H2A8CACr1Da6X/Z2/JIdV9WY=" - }, - "rx-lite": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", - "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "samsam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.3.0.tgz", - "integrity": "sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg==", - "peer": true - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "dependencies": { - "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", - "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", - "requires": {} - } - } - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" - }, - "selfsigned": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz", - "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==", - "requires": { - "node-forge": "0.9.0" - } - }, - "semi": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/semi/-/semi-4.0.5.tgz", - "integrity": "sha1-S5lcDBZjkjj2rimMhAWCqL8FEe4=", - "requires": { - "eslint": "^0.24.1", - "findit": "^2.0.0", - "minimist": "^1.1.0", - "mkdirp": "^0.5.0" - }, - "dependencies": { - "ansi-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-1.1.1.tgz", - "integrity": "sha1-QchHGUZGN15qGl0Qw8oFTvn8mA0=" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "cli-width": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-1.1.1.tgz", - "integrity": "sha1-pNKT72frt7iNSk1CwMzwDE0eNm0=" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-0.6.4.tgz", - "integrity": "sha1-gUKEkalC7xiwSSBW7aOADu5X1h0=", - "requires": { - "esutils": "^1.1.6", - "isarray": "0.0.1" - } - }, - "eslint": { - "version": "0.24.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-0.24.1.tgz", - "integrity": "sha1-VKUICYVbllVyHG8u5Xs1HtzigQE=", - "requires": { - "chalk": "^1.0.0", - "concat-stream": "^1.4.6", - "debug": "^2.1.1", - "doctrine": "^0.6.2", - "escape-string-regexp": "^1.0.2", - "escope": "^3.1.0", - "espree": "^2.0.1", - "estraverse": "^4.1.0", - "estraverse-fb": "^1.3.1", - "globals": "^8.0.0", - "inquirer": "^0.8.2", - "is-my-json-valid": "^2.10.0", - "js-yaml": "^3.2.5", - "minimatch": "^2.0.1", - "mkdirp": "^0.5.0", - "object-assign": "^2.0.0", - "optionator": "^0.5.0", - "path-is-absolute": "^1.0.0", - "strip-json-comments": "~1.0.1", - "text-table": "~0.2.0", - "user-home": "^1.0.0", - "xml-escape": "~1.0.0" - } - }, - "espree": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/espree/-/espree-2.2.5.tgz", - "integrity": "sha1-32kbkxCIlAKuspzAZnCMVmkLhUs=" - }, - "esutils": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.1.6.tgz", - "integrity": "sha1-wBzKqa5LiXxtDD4hCuUvPHqEQ3U=" - }, - "fast-levenshtein": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.0.7.tgz", - "integrity": "sha1-AXjc3uAjuSkFGTrwlZ6KdjnP3Lk=" - }, - "globals": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-8.18.0.tgz", - "integrity": "sha1-k9SmK9ysOM+vr8R9awNHaMsP/LQ=" - }, - "inquirer": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.8.5.tgz", - "integrity": "sha1-29dAz2yjtzEpamPOb22WGFHzNt8=", - "requires": { - "ansi-regex": "^1.1.1", - "chalk": "^1.0.0", - "cli-width": "^1.0.1", - "figures": "^1.3.5", - "lodash": "^3.3.1", - "readline2": "^0.1.1", - "rx": "^2.4.3", - "through": "^2.3.6" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "levn": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.2.5.tgz", - "integrity": "sha1-uo0znQykphDjo/FFucr0iAcVUFQ=", - "requires": { - "prelude-ls": "~1.1.0", - "type-check": "~0.3.1" - } - }, - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" - }, - "minimatch": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", - "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", - "requires": { - "brace-expansion": "^1.0.0" - } - }, - "mute-stream": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.4.tgz", - "integrity": "sha1-qSGZYKbV1dBGWXruUSUsZlX3F34=" - }, - "object-assign": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", - "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=" - }, - "optionator": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.5.0.tgz", - "integrity": "sha1-t1qJlaLUF98ltuTjhi9QqohlE2g=", - "requires": { - "deep-is": "~0.1.2", - "fast-levenshtein": "~1.0.0", - "levn": "~0.2.5", - "prelude-ls": "~1.1.1", - "type-check": "~0.3.1", - "wordwrap": "~0.0.2" - } - }, - "readline2": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/readline2/-/readline2-0.1.1.tgz", - "integrity": "sha1-mUQ7pug7gw7zBRv9fcJBqCco1Wg=", - "requires": { - "mute-stream": "0.0.4", - "strip-ansi": "^2.0.1" - }, - "dependencies": { - "strip-ansi": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-2.0.1.tgz", - "integrity": "sha1-32LBqpTtLxFOHQ8h/R1QSCt5pg4=", - "requires": { - "ansi-regex": "^1.0.0" - } - } - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - }, - "user-home": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", - "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=" - } - } - }, - "semistandard": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/semistandard/-/semistandard-10.0.0.tgz", - "integrity": "sha1-1olPdnO5tzfCYtypTK3zXoOS3ek=", - "dev": true, - "requires": { - "eslint": "~3.15.0", - "eslint-config-semistandard": "8.0.0", - "eslint-config-standard": "7.0.0", - "eslint-config-standard-jsx": "3.3.0", - "eslint-plugin-promise": "~3.4.0", - "eslint-plugin-react": "~6.9.0", - "eslint-plugin-standard": "~2.0.1", - "standard-engine": "~5.4.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "deglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.1.tgz", - "integrity": "sha512-2kjwuGGonL7gWE1XU4Fv79+vVzpoQCl0V+boMwWtOQJV2AGDabCwez++nB1Nli/8BabAfZQ/UuHPlp6AymKdWw==", - "dev": true, - "requires": { - "find-root": "^1.0.0", - "glob": "^7.0.5", - "ignore": "^3.0.9", - "pkg-config": "^1.1.0", - "run-parallel": "^1.1.2", - "uniq": "^1.0.1" - } - }, - "eslint": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.15.0.tgz", - "integrity": "sha1-vcxqbF/+CBYOe5PAZmlTYqkeMPI=", - "dev": true, - "requires": { - "babel-code-frame": "^6.16.0", - "chalk": "^1.1.3", - "concat-stream": "^1.4.6", - "debug": "^2.1.1", - "doctrine": "^1.2.2", - "escope": "^3.6.0", - "espree": "^3.4.0", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "glob": "^7.0.3", - "globals": "^9.14.0", - "ignore": "^3.2.0", - "imurmurhash": "^0.1.4", - "inquirer": "^0.12.0", - "is-my-json-valid": "^2.10.0", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.5.1", - "json-stable-stringify": "^1.0.0", - "levn": "^0.3.0", - "lodash": "^4.0.0", - "mkdirp": "^0.5.0", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.1", - "pluralize": "^1.2.1", - "progress": "^1.1.8", - "require-uncached": "^1.0.2", - "shelljs": "^0.7.5", - "strip-bom": "^3.0.0", - "strip-json-comments": "~2.0.1", - "table": "^3.7.8", - "text-table": "~0.2.0", - "user-home": "^2.0.0" - } - }, - "eslint-config-semistandard": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-semistandard/-/eslint-config-semistandard-8.0.0.tgz", - "integrity": "sha1-+4I5N5odzBFM3np9y7yAvuozNLA=", - "dev": true, - "requires": {} - }, - "eslint-config-standard": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-7.0.0.tgz", - "integrity": "sha1-TxYbxlaV5LxhMxxVue6spFjNmcY=", - "dev": true, - "requires": {} - }, - "eslint-config-standard-jsx": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-3.3.0.tgz", - "integrity": "sha1-yrCAGhWjYL9j+suXqyL73YjYpeA=", - "dev": true, - "requires": {} - }, - "eslint-plugin-promise": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.4.2.tgz", - "integrity": "sha1-G+J5Pq/i0YtbEjuBNsJp+AT+cSI=", - "dev": true - }, - "eslint-plugin-react": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-6.9.0.tgz", - "integrity": "sha1-VMLpkGt2+dEBQgML3DTp1oQKC7I=", - "dev": true, - "requires": { - "array.prototype.find": "^2.0.1", - "doctrine": "^1.2.2", - "jsx-ast-utils": "^1.3.4" - } - }, - "eslint-plugin-standard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-2.0.1.tgz", - "integrity": "sha1-NYlpn/nJF/LCX3apFmh/ZBw2n/M=", - "dev": true, - "requires": {} - }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true, - "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" - } - }, - "get-stdin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", - "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", - "dev": true - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "requires": { - "jsonify": "~0.0.0" - } - }, - "standard-engine": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-5.4.0.tgz", - "integrity": "sha1-4OhpWeoHhkJdM4PkDBv3DS+YVXk=", - "dev": true, - "requires": { - "deglob": "^2.1.0", - "get-stdin": "^5.0.1", - "home-or-tmp": "^2.0.0", - "minimist": "^1.1.0", - "pkg-conf": "^2.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "semistandard-format": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/semistandard-format/-/semistandard-format-3.0.0.tgz", - "integrity": "sha1-eF8VANyEBd1WHdC4r8GXFEj1I+s=", - "requires": { - "minimist": "^1.1.0", - "semi": "^4.0.4", - "standard-format": "^2.1.1", - "stdin": "0.0.1" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, - "serialize-javascript": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz", - "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==" - }, - "serializerr": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/serializerr/-/serializerr-1.0.3.tgz", - "integrity": "sha1-EtTFqhw/+49tHcXzlaqUVVacP5E=", - "requires": { - "protochain": "^1.0.5" - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "dependencies": { - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - } - } - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shasum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", - "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", - "requires": { - "json-stable-stringify": "~0.0.0", - "sha.js": "~2.4.4" - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, - "shell-quote": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-0.0.1.tgz", - "integrity": "sha1-GkEZbzwDM8SCMjWT1ohuzxU92YY=" - }, - "shelljs": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", - "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "shx": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/shx/-/shx-0.2.2.tgz", - "integrity": "sha1-CjBNAgsO3xMGrYFXDoDwNG31ijk=", - "requires": { - "es6-object-assign": "^1.0.3", - "minimist": "^1.2.0", - "shelljs": "^0.7.3" - } - }, - "sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=" - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, - "simple-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", - "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" - }, - "simple-get": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", - "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", - "requires": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "sinon": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-4.5.0.tgz", - "integrity": "sha512-trdx+mB0VBBgoYucy6a9L7/jfQOmvGeaKZT4OOJ+lPAtI8623xyGr8wLiE4eojzBS8G9yXbhx42GHUOVLr4X2w==", - "peer": true, - "requires": { - "@sinonjs/formatio": "^2.0.0", - "diff": "^3.1.0", - "lodash.get": "^4.4.2", - "lolex": "^2.2.0", - "nise": "^1.2.0", - "supports-color": "^5.1.0", - "type-detect": "^4.0.5" - }, - "dependencies": { - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "peer": true - }, - "lolex": { - "version": "2.7.5", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.5.tgz", - "integrity": "sha512-l9x0+1offnKKIzYVjyXU2SiwhXDLekRzKyhnbyldPHvC7BvLPVpdNUNR2KeMAiCN2D/kLNttZgQD5WjSxuBx3Q==", - "peer": true - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "peer": true - } - } - }, - "sinon-chai": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-2.14.0.tgz", - "integrity": "sha512-9stIF1utB0ywNHNT7RgiXbdmen8QDCRsrTjw+G9TgKt1Yexjiv8TOWZ6WHsTPz57Yky3DIswZvEqX8fpuHNDtQ==", - "requires": {} - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" - }, - "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=" - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "snazzy": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/snazzy/-/snazzy-7.0.0.tgz", - "integrity": "sha1-le2szEqNb4D0rFzHtSDo+PmsIyU=", - "dev": true, - "requires": { - "chalk": "^1.1.0", - "inherits": "^2.0.1", - "minimist": "^1.1.1", - "readable-stream": "^2.0.6", - "standard-json": "^1.0.0", - "text-table": "^0.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "socket.io": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.4.tgz", - "integrity": "sha1-L37O3DORvy1cc+KR/iM+bjTU3QA=", - "requires": { - "debug": "2.3.3", - "engine.io": "~1.8.4", - "has-binary": "0.1.7", - "object-assign": "4.1.0", - "socket.io-adapter": "0.5.0", - "socket.io-client": "1.7.4", - "socket.io-parser": "2.3.1" - }, - "dependencies": { - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" - }, - "object-assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", - "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=" - } - } - }, - "socket.io-adapter": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", - "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", - "requires": { - "debug": "2.3.3", - "socket.io-parser": "2.3.1" - }, - "dependencies": { - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" - } - } - }, - "socket.io-client": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.4.tgz", - "integrity": "sha1-7J+CA1btme9tNX8HVtZIcXvdQoE=", - "requires": { - "backo2": "1.0.2", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "2.3.3", - "engine.io-client": "~1.8.4", - "has-binary": "0.1.7", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseuri": "0.0.5", - "socket.io-parser": "2.3.1", - "to-array": "0.1.4" - }, - "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" - }, - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" - } - } - }, - "socket.io-parser": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", - "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", - "requires": { - "component-emitter": "1.1.2", - "debug": "2.2.0", - "isarray": "0.0.1", - "json3": "3.3.2" - }, - "dependencies": { - "component-emitter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", - "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=" - }, - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "requires": { - "ms": "0.7.1" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" - } - } - }, - "sockjs": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", - "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", - "requires": { - "faye-websocket": "^0.10.0", - "uuid": "^3.0.1" - } - }, - "sockjs-client": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", - "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", - "requires": { - "debug": "^3.2.5", - "eventsource": "^1.0.7", - "faye-websocket": "~0.11.1", - "inherits": "^2.0.3", - "json3": "^3.3.2", - "url-parse": "^1.4.3" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "requires": { - "is-plain-obj": "^1.0.0" - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", - "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "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-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" - }, - "spawn-sync": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz", - "integrity": "sha1-sAeZVX63+wyDdsKdROih6mfldHY=", - "requires": { - "concat-stream": "^1.4.7", - "os-shim": "^0.1.2" - } - }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==" - }, - "spdy": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz", - "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==", - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - } - }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - }, - "dependencies": { - "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "standard": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/standard/-/standard-7.1.2.tgz", - "integrity": "sha1-QBZu7sJAUGXRpPDj8VurxuJ0YH4=", - "requires": { - "eslint": "~2.10.2", - "eslint-config-standard": "5.3.1", - "eslint-config-standard-jsx": "1.2.1", - "eslint-plugin-promise": "^1.0.8", - "eslint-plugin-react": "^5.0.1", - "eslint-plugin-standard": "^1.3.1", - "standard-engine": "^4.0.0" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "eslint": { - "version": "2.10.2", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-2.10.2.tgz", - "integrity": "sha1-sjCUgv7wQ9MgM2WjIShebM4Bw9c=", - "requires": { - "chalk": "^1.1.3", - "concat-stream": "^1.4.6", - "debug": "^2.1.1", - "doctrine": "^1.2.1", - "es6-map": "^0.1.3", - "escope": "^3.6.0", - "espree": "3.1.4", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "file-entry-cache": "^1.1.1", - "glob": "^7.0.3", - "globals": "^9.2.0", - "ignore": "^3.1.2", - "imurmurhash": "^0.1.4", - "inquirer": "^0.12.0", - "is-my-json-valid": "^2.10.0", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.5.1", - "json-stable-stringify": "^1.0.0", - "lodash": "^4.0.0", - "mkdirp": "^0.5.0", - "optionator": "^0.8.1", - "path-is-absolute": "^1.0.0", - "path-is-inside": "^1.0.1", - "pluralize": "^1.2.1", - "progress": "^1.1.8", - "require-uncached": "^1.0.2", - "shelljs": "^0.6.0", - "strip-json-comments": "~1.0.1", - "table": "^3.7.8", - "text-table": "~0.2.0", - "user-home": "^2.0.0" - } - }, - "eslint-config-standard-jsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-1.2.1.tgz", - "integrity": "sha1-DRmxcF8K1INj7yqLv6cd8BLZibM=", - "requires": {} - }, - "espree": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.1.4.tgz", - "integrity": "sha1-BybXrIOvl6fISY2ps2OjYJ0qaKE=", - "requires": { - "acorn": "^3.1.0", - "acorn-jsx": "^3.0.0" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "requires": { - "jsonify": "~0.0.0" - } - }, - "shelljs": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.6.1.tgz", - "integrity": "sha1-7GIRvtGSBEIIj+D3Cyg3Iy7SyKg=" - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "standard-engine": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-4.1.3.tgz", - "integrity": "sha1-ejGq1U8D2fOTVfQzic4GlPQJQVU=", - "requires": { - "defaults": "^1.0.2", - "deglob": "^1.0.0", - "find-root": "^1.0.0", - "get-stdin": "^5.0.1", - "minimist": "^1.1.0", - "multiline": "^1.0.2", - "pkg-config": "^1.0.1", - "xtend": "^4.0.0" - }, - "dependencies": { - "get-stdin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", - "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=" - } - } - }, - "standard-format": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/standard-format/-/standard-format-2.2.4.tgz", - "integrity": "sha1-uQ+zmmNfdJzU/RF/5HMNMRearu8=", - "requires": { - "deglob": "^1.0.0", - "esformatter": "^0.9.0", - "esformatter-eol-last": "^1.0.0", - "esformatter-jsx": "^7.0.0", - "esformatter-literal-notation": "^1.0.0", - "esformatter-quotes": "^1.0.0", - "esformatter-remove-trailing-commas": "^1.0.1", - "esformatter-semicolon-first": "^1.1.0", - "esformatter-spaced-lined-comment": "^2.0.0", - "minimist": "^1.1.0", - "stdin": "0.0.1" - } - }, - "standard-json": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/standard-json/-/standard-json-1.1.0.tgz", - "integrity": "sha512-nkonX+n5g3pyVBvJZmvRlFtT/7JyLbNh4CtrYC3Qfxihgs8PKX52f6ONKQXORStuBWJ5PI83EUrNXme7LKfiTQ==", - "requires": { - "concat-stream": "^2.0.0" - }, - "dependencies": { - "concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - } - }, - "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "stdin": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/stdin/-/stdin-0.0.1.tgz", - "integrity": "sha1-0wQZgarsPf28d6GzjWNy449ftx4=" - }, - "stream-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-1.0.0.tgz", - "integrity": "sha1-v5tKv7QrJ011FHnkTg/yZWtvEZM=", - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^1.0.27-1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, - "stream-combiner2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.0.2.tgz", - "integrity": "sha1-unKmtQy/q/qVD8i8h2BL0B62BnE=", - "requires": { - "duplexer2": "~0.0.2", - "through2": "~0.5.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "through2": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz", - "integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=", - "requires": { - "readable-stream": "~1.0.17", - "xtend": "~3.0.0" - } - }, - "xtend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", - "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=" - } - } - }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" - }, - "stream-splicer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-1.3.2.tgz", - "integrity": "sha1-PARBvhW5v04iYnXm3IOWR0VUZmE=", - "requires": { - "indexof": "0.0.1", - "inherits": "^2.0.1", - "isarray": "~0.0.1", - "readable-stream": "^1.1.13-1", - "readable-wrap": "^1.0.0", - "through2": "^1.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "through2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-1.1.1.tgz", - "integrity": "sha1-CEfLxESfNAVXTb3M2buEG4OsNUU=", - "requires": { - "readable-stream": ">=1.1.13-1 <1.2.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - } - } - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string.prototype.endswith": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/string.prototype.endswith/-/string.prototype.endswith-0.2.0.tgz", - "integrity": "sha1-oZwg3uUamHd+mkfhDwm+OTubunU=" - }, - "string.prototype.trimleft": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", - "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", - "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" - } - }, - "string.prototype.trimright": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", - "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", - "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "requires": { - "is-utf8": "^0.2.0" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "requires": { - "get-stdin": "^4.0.1" - } - }, - "strip-json-comments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=" - }, - "style-attr": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/style-attr/-/style-attr-1.3.0.tgz", - "integrity": "sha512-srFr54gzEZoy73WgYfnbxCAtNCzF0Hn5RGzK7gi/0G6ttZd9v3WZFGY4ed5ABr43dbGjPNr4T46geUxxUP9i6w==" - }, - "style-loader": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz", - "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==", - "requires": { - "loader-utils": "^1.1.0", - "schema-utils": "^1.0.0" - } - }, - "subarg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", - "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", - "requires": { - "minimist": "^1.1.0" - } - }, - "super-nunjucks-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/super-nunjucks-loader/-/super-nunjucks-loader-2.0.0.tgz", - "integrity": "sha512-WDYt02RmS/fvEt0Cp5d7V/Gxt0KbNZMPNMW0rsdHUWAudllqLhyxCjdz/CZjESkR1jizoCnrMJ70mIC0bUmeUQ==", - "requires": { - "loader-utils": "^1.2.3", - "nunjucks": "^3.1.7" - } - }, - "superagent": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", - "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", - "requires": { - "component-emitter": "^1.2.0", - "cookiejar": "^2.1.0", - "debug": "^3.1.0", - "extend": "^3.0.0", - "form-data": "^2.3.1", - "formidable": "^1.2.0", - "methods": "^1.1.1", - "mime": "^1.4.1", - "qs": "^6.5.1", - "readable-stream": "^2.3.5" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "qs": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.1.tgz", - "integrity": "sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA==" - } - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" - }, - "svgo": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", - "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", - "requires": { - "coa": "~1.0.1", - "colors": "~1.1.2", - "csso": "~2.3.1", - "js-yaml": "~3.7.0", - "mkdirp": "~0.5.1", - "sax": "~1.2.1", - "whet.extend": "~0.9.9" - }, - "dependencies": { - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=" - }, - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=" - }, - "js-yaml": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", - "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", - "requires": { - "argparse": "^1.0.7", - "esprima": "^2.6.0" - } - } - } - }, - "sync-exec": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/sync-exec/-/sync-exec-0.5.0.tgz", - "integrity": "sha1-P3JY5KW6FyRTgZCfpqb2z1BuFmE=" - }, - "syntax-error": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", - "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", - "requires": { - "acorn-node": "^1.2.0" - } - }, - "table": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", - "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", - "requires": { - "ajv": "^4.7.0", - "ajv-keywords": "^1.0.0", - "chalk": "^1.1.1", - "lodash": "^4.0.0", - "slice-ansi": "0.0.4", - "string-width": "^2.0.0" - }, - "dependencies": { - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha512-I/bSHSNEcFFqXLf91nchoNB9D1Kie3QKcWdchYUaoIg1+1bdWDkdfdlvdIOJbi9U8xR0y+MWc5D+won9v95WlQ==", - "requires": { - "co": "^4.6.0", - "json-stable-stringify": "^1.0.1" - } - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "json-stable-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.2.tgz", - "integrity": "sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g==", - "requires": { - "jsonify": "^0.0.1" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" - }, - "terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "dependencies": { - "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==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "dependencies": { - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "requires": { - "randombytes": "^2.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - } - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" - }, - "three": { - "version": "git+ssh://git@github.com/supermedium/three.js.git#5ef2887ab3621cae54fa129a500424d6caa25b62", - "integrity": "sha512-I3qUdpDBTltVg6YXEZQeckf6GCq8u/6elelab9kfHzkloUzb9aexZyNVyselBejvSmqxq70VIJksRQgxGoeJ1Q==", - "from": "three@github:supermedium/three.js#r90fixMTLLoader" - }, - "three-bmfont-text": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/three-bmfont-text/-/three-bmfont-text-2.3.0.tgz", - "integrity": "sha512-HG6QHR129cNMGBhMgLsyKJiNW5r2XI+2P1JyjJl/9+D1e0iySzVZl3r8peTFpoJzPODl5Ckb8nu0U1zWjc6dNg==", - "requires": { - "array-shuffle": "^1.0.1", - "inherits": "^2.0.1", - "layout-bmfont-text": "^1.2.0", - "nice-color-palettes": "^1.0.1", - "object-assign": "^4.0.1", - "quad-indices": "^2.0.1", - "three-buffer-vertex-data": "^1.0.0" - } - }, - "three-buffer-vertex-data": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/three-buffer-vertex-data/-/three-buffer-vertex-data-1.1.0.tgz", - "integrity": "sha1-zyKOeEJ2ZYhLlhpMq+H4XtOfgrE=", - "requires": { - "flatten-vertex-data": "^1.0.0" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" - }, - "timers-browserify": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", - "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", - "requires": { - "process": "~0.11.0" - }, - "dependencies": { - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" - } - } - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" - }, - "to-iso-string": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/to-iso-string/-/to-iso-string-0.0.2.tgz", - "integrity": "sha1-TcGeZk38y+Jb2NtQiwDG2hWCVdE=" - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" - }, - "tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" - }, - "tty-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", - "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==" - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-detect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz", - "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=" - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, - "uglify-es": { - "version": "git+ssh://git@github.com/mishoo/UglifyJS2.git#569757d14dbbe04f66af65d7bf0600b3a75efd96", - "from": "uglify-es@git://github.com/mishoo/UglifyJS2.git#harmony", - "requires": { - "commander": "~2.14.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz", - "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "uglify-js": { - "version": "git+ssh://git@github.com/mishoo/UglifyJS2.git#569757d14dbbe04f66af65d7bf0600b3a75efd96", - "integrity": "sha512-875XHREePaji3eGpJp0mqveaZq03AoswEHsFZj/oIUYd7RRODt6rkTePxR6QA2/Il1nzKtTq5dmxmu6bAnxsFg==", - "from": "uglify-js@git://github.com/mishoo/UglifyJS2#harmony", - "requires": { - "commander": "~2.14.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz", - "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "optional": true - }, - "uglifyjs-webpack-plugin": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", - "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", - "requires": { - "source-map": "^0.5.6", - "uglify-js": "^2.8.29", - "webpack-sources": "^1.0.1" - }, - "dependencies": { - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" - }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" - } - }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" - } - }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" - }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" - } - } - } - }, - "ultron": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", - "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=" - }, - "umd": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", - "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==" - }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" - }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", - "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==" - }, - "unicode-property-aliases-ecmascript": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", - "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==" - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" - }, - "uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" - } - } - }, - "unzip-js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unzip-js/-/unzip-js-1.0.0.tgz", - "integrity": "sha512-tpEM1avg2vW8EDvt1JlOY5vk8Di6p01AWgn4Qcf/Qb2z/5dz0SqX61iq8rfmDk5V3uZve45Wm0jiX9i28+pRvg==", - "requires": { - "blob-slicer": "^1.0.0", - "buffer-crc32": "^0.2.13" - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" - }, - "update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "requires": { - "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - } - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" - }, - "url": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", - "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - } - } - }, - "url-loader": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-1.1.2.tgz", - "integrity": "sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==", - "requires": { - "loader-utils": "^1.1.0", - "mime": "^2.0.3", - "schema-utils": "^1.0.0" - }, - "dependencies": { - "mime": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", - "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==" - } - } - }, - "url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "url-set-query": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", - "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=" - }, - "url2": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/url2/-/url2-0.0.0.tgz", - "integrity": "sha1-Tqq9HVw6yQ1iq0SFyZhCKGWgSxo=" - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" - }, - "user-home": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", - "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", - "requires": { - "os-homedir": "^1.0.0" - } - }, - "useragent": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", - "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", - "requires": { - "lru-cache": "4.1.x", - "tmp": "0.0.x" - } - }, - "util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "uuid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", - "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==" - }, - "v8-compile-cache": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz", - "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==" - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "vendors": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==" - }, - "vm-browserify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "requires": { - "indexof": "0.0.1" - } - }, - "void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" - }, - "watchify": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/watchify/-/watchify-3.2.1.tgz", - "integrity": "sha1-Gbz9e/y/Qdf0/jwpdAvORfdk4gM=", - "requires": { - "browserify": "^10.0.0", - "chokidar": "^1.0.0", - "defined": "^1.0.0", - "outpipe": "^1.1.0", - "through2": "~0.6.3", - "xtend": "^4.0.0" - }, - "dependencies": { - "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "requires": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" - } - }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "requires": { - "arr-flatten": "^1.0.1" - } - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, - "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "requires": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "fsevents": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "requires": { - "is-extglob": "^1.0.0" - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "requires": { - "is-glob": "^2.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "^1.0.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", - "requires": { - "chokidar": "^3.4.1", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.1" - }, - "dependencies": { - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "optional": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "optional": true - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "optional": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "optional": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "optional": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "optional": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "optional": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "optional": true - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "optional": true, - "requires": { - "picomatch": "^2.2.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==", - "optional": true, - "requires": { - "is-number": "^7.0.0" - } - } - } - }, - "watchpack-chokidar2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", - "optional": true, - "requires": { - "chokidar": "^2.1.8" - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, - "weak-map": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/weak-map/-/weak-map-1.0.0.tgz", - "integrity": "sha1-tm5Wqd8L0lp2u/G1FNsSkIBhSjc=" - }, - "webpack": { - "version": "4.46.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", - "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.5.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" - }, - "dependencies": { - "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==" - }, - "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", - "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", - "requires": {} - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "requires": { - "minimist": "^1.2.6" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - } - } - }, - "webpack-cli": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.10.tgz", - "integrity": "sha512-u1dgND9+MXaEt74sJR4PR7qkPxXUSQ0RXYq8x1L6Jg1MYVEmGPrH6Ah6C4arD4r0J1P5HKjRqpab36k0eIzPqg==", - "requires": { - "chalk": "2.4.2", - "cross-spawn": "6.0.5", - "enhanced-resolve": "4.1.0", - "findup-sync": "3.0.0", - "global-modules": "2.0.0", - "import-local": "2.0.0", - "interpret": "1.2.0", - "loader-utils": "1.2.3", - "supports-color": "6.1.0", - "v8-compile-cache": "2.0.3", - "yargs": "13.2.4" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=" - }, - "enhanced-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", - "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", - "tapable": "^1.0.0" - } - }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - } - }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "requires": { - "global-prefix": "^3.0.0" - }, - "dependencies": { - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - } - } - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - } - }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - }, - "dependencies": { - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - } - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "webpack-dev-middleware": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", - "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", - "requires": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - }, - "dependencies": { - "mime": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", - "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==" - } - } - }, - "webpack-dev-server": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.9.0.tgz", - "integrity": "sha512-E6uQ4kRrTX9URN9s/lIbqTAztwEPdvzVrcmHE8EQ9YnuT9J8Es5Wrd8n9BKg1a0oZ5EgEke/EQFgUsp18dSTBw==", - "requires": { - "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.1.8", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "debug": "^4.1.1", - "del": "^4.1.1", - "express": "^4.17.1", - "html-entities": "^1.2.1", - "http-proxy-middleware": "0.19.1", - "import-local": "^2.0.0", - "internal-ip": "^4.3.0", - "ip": "^1.1.5", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "loglevel": "^1.6.4", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.25", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.7", - "semver": "^6.3.0", - "serve-index": "^1.9.1", - "sockjs": "0.3.19", - "sockjs-client": "1.4.0", - "spdy": "^4.0.1", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "12.0.5" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "requires": { - "is-wsl": "^1.1.0" - } - }, - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "requires": { - "async-limiter": "~1.0.0" - } - }, - "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" - } - }, - "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "webpack-glsl-loader": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/webpack-glsl-loader/-/webpack-glsl-loader-1.0.1.tgz", - "integrity": "sha1-cqDjAZK9V5R9YNbVBckVvmgNCsw=", - "requires": { - "fs": "0.0.2", - "path": "^0.11.14" - } - }, - "webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - } - }, - "webpack-sources": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.0.1.tgz", - "integrity": "sha512-05tMxipUCwHqYaVS8xc7sYPTly8PzXayRCB4dTxLhWTqlKUiwH6ezmEe0OSreL1c30LAuA3Zqmc+uEBUGFJDjw==", - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.5.3" - } - }, - "websocket-driver": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", - "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", - "requires": { - "http-parser-js": ">=0.4.0 <0.4.11", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", - "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==" - }, - "webvr-polyfill": { - "version": "0.10.11", - "resolved": "https://registry.npmjs.org/webvr-polyfill/-/webvr-polyfill-0.10.11.tgz", - "integrity": "sha512-mzTuMpC3W/aKmm5QxYtTzXAxhVo3tR4c0D5Kihk8Q38GVxiCOvS4Ga4LBN8CsFVpXu1WkGeuf/hMzF75iWYiyA==", - "requires": { - "cardboard-vr-display": "^1.0.18" - } - }, - "webvr-polyfill-dpdb": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/webvr-polyfill-dpdb/-/webvr-polyfill-dpdb-1.0.17.tgz", - "integrity": "sha512-WOd4s0gSrb0fOlOtIpqFbwLBATax/ka7DFAB/u+C9KJBBJk1/x/FZlFynOqsNrUxMJniOdO7ViFJwVdMScMQzA==" - }, - "whatwg-fetch": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.4.0.tgz", - "integrity": "sha512-rsum2ulz2iuZH08mJkT0Yi6JnKhwdw4oeyMjokgxd+mmqYSd9cPpOQf01TIWgjxG/U4+QR+AwKq6lSbXVxkyoQ==" - }, - "whet.extend": { - "version": "0.9.9", - "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", - "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=" - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" - }, - "word-wrapper": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/word-wrapper/-/word-wrapper-1.0.7.tgz", - "integrity": "sha1-HxSv6/Zt/fD+9V79NxhO+9CMKLY=" - }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" - }, - "worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "requires": { - "errno": "~0.1.7" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "wrench": { - "version": "1.5.8", - "resolved": "https://registry.npmjs.org/wrench/-/wrench-1.5.8.tgz", - "integrity": "sha1-ejHJf3hpJG12xc8vXJd6HEyOWrU=" - }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "requires": { - "mkdirp": "^0.5.1" - } - }, - "ws": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", - "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", - "requires": { - "options": ">=0.0.5", - "ultron": "1.0.x" - } - }, - "wtf-8": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", - "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=" - }, - "xhr": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz", - "integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==", - "requires": { - "global": "~4.3.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "xhr-request": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", - "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", - "requires": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" - } - }, - "xml-escape": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/xml-escape/-/xml-escape-1.0.0.tgz", - "integrity": "sha1-AJY9aXsq3wwYXE4E5zF0upsojrI=" - }, - "xml-parse-from-string": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", - "integrity": "sha1-qQKekp09vN7RafPG4oI42VpdWig=" - }, - "xml2js": { - "version": "0.4.22", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.22.tgz", - "integrity": "sha512-MWTbxAQqclRSTnehWWe5nMKzI3VmJ8ltiJEco8akcC6j3miOhjjfzKum5sId+CWhfxdOs/1xauYr8/ZDBtQiRw==", - "requires": { - "sax": ">=0.6.0", - "util.promisify": "~1.0.0", - "xmlbuilder": "~11.0.0" - } - }, - "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" - }, - "xmlhttprequest": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", - "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" - }, - "xmlhttprequest-ssl": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", - "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=" - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - }, - "yargs": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", - "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "os-locale": "^3.1.0", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "yargs-parser": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", - "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - } - } - }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" - }, - "zip-loader": { - "version": "git+ssh://git@github.com/ngokevin/ziploader.git#b50d8d21725ad0597e01f7e901bf0e92c73b26ae", - "integrity": "sha512-Xwdw2kBKxoQF9yCCB3ll0kuhWpzySaiVh2NSocDbY+aTnsJENKcDP4C6QR36q2O7o3V5QjRtpMtetFzSanwCCA==", - "from": "zip-loader@github:ngokevin/ziploader#xhrdist", - "requires": { - "pako": "^1.0.6" - }, - "dependencies": { - "pako": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", - "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==" - } - } - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index 6a89e5c8f..000000000 --- a/package.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "private": true, - "version": "1.0.0", - "scripts": { - "build": "cross-env NODE_ENV=production webpack", - "deploy": "npm run predeploy && ghpages git@github.com:supermedium/moonrider.git -p .ghpages && rm -rf .ghpages", - "lint": "semistandard -v | snazzy", - "lint:fix": "semistandard --fix", - "predeploy": "cross-env NODE_ENV=production npm run build && shx mkdir -p .ghpages && cp -r index.html assets build vendor CNAME .ghpages", - "start": "webpack-dev-server --host 0.0.0.0 --progress --colors --hot-only --inline --port 3000" - }, - "dependencies": { - "@babel/cli": "^7.17.0", - "@babel/core": "^7.17.2", - "@babel/plugin-proposal-class-properties": "^7.16.7", - "@babel/plugin-proposal-decorators": "^7.17.2", - "@babel/plugin-proposal-do-expressions": "^7.16.7", - "@babel/plugin-proposal-export-default-from": "^7.16.7", - "@babel/plugin-proposal-export-namespace-from": "^7.16.7", - "@babel/plugin-proposal-function-bind": "^7.16.7", - "@babel/plugin-proposal-function-sent": "^7.16.7", - "@babel/plugin-proposal-json-strings": "^7.16.7", - "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", - "@babel/plugin-proposal-numeric-separator": "^7.16.7", - "@babel/plugin-proposal-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-pipeline-operator": "^7.16.7", - "@babel/plugin-proposal-throw-expressions": "^7.16.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/preset-env": "^7.16.11", - "aframe-aabb-collider-component": "^3.1.0", - "aframe-atlas-uvs-component": "^2.1.0", - "aframe-audioanalyser-component": "^6.0.0", - "aframe-event-decorators": "^1.0.2", - "aframe-event-set-component": "^4.2.1", - "aframe-geometry-merger-component": "^2.0.0-beta1", - "aframe-haptics-component": "^1.6.3", - "aframe-layout-component": "^5.3.0", - "aframe-log-component": "^1.0.7", - "aframe-orbit-controls": "^1.2.0", - "aframe-proxy-event-component": "^2.1.0", - "aframe-render-order-component": "^1.1.0", - "aframe-slice9-component": "^1.0.0", - "aframe-state-component": "6.7.0", - "aframe-super-hot-html-loader": "^1.2.0", - "aframe-super-hot-loader": "^1.5.0", - "aframe-thumb-controls-component": "^2.0.2", - "ansi-html": "0.0.7", - "autoprefixer": "^7.2.3", - "babel-loader": "^8.0.5", - "babel-preset-minify": "^0.5.0", - "css-loader": "^0.28.7", - "debug": "^4.1.0", - "firebase": "^7.19.0", - "html-require-loader": "^1.0.1", - "ip": "1.1.5", - "json-loader": "^0.5.7", - "lodash.debounce": "^4.0.8", - "profane-words": "^1.3.1", - "promise-polyfill": "^8.1.0", - "style-loader": "^0.23.1", - "super-nunjucks-loader": "^2.0.0", - "uglify-es": "git://github.com/mishoo/UglifyJS2.git#harmony", - "uglify-js": "git://github.com/mishoo/UglifyJS2#harmony", - "uglifyjs-webpack-plugin": "0.4.6", - "url-loader": "^1.1.2", - "webpack": "^4.46.0", - "webpack-glsl-loader": "^1.0.1", - "webpack-sources": "1.0.1", - "zip-loader": "github:ngokevin/ziploader#xhrdist", - "unzip-js": "^1.0.0" - }, - "overrides": { - "aframe-render-order-component": { - "webpack": "~4.46.0" - }, - "uglifyjs-webpack-plugin": { - "webpack": "~4.46.0" - } - }, - "devDependencies": { - "cross-env": "4.0.0", - "ghpages": "0.0.10", - "semistandard": "10.0.0", - "shx": "^0.2.2", - "snazzy": "7.0.0", - "superagent": "^3.8.2", - "webpack-dev-server": "^3.2.0" - }, - "semistandard": { - "globals": [ - "AFRAME", - "THREE" - ], - "ignore": [ - "build/**" - ] - }, - "engines": { - "node": "<=12.18.3", - "npm": "<=6.14.6" - } -} diff --git a/src/assets.html b/src/assets.html deleted file mode 100644 index 0ef23879c..000000000 --- a/src/assets.html +++ /dev/null @@ -1,229 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -{% for i in range(1, 11) %} - - - -{% endfor %} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/components/active-item.js b/src/components/active-item.js deleted file mode 100644 index a54ef46a2..000000000 --- a/src/components/active-item.js +++ /dev/null @@ -1,53 +0,0 @@ -/** - * Active item. - */ -AFRAME.registerComponent('active-item', { - dependencies: ['material'], - - schema: { - active: {default: false}, - opacity: {default: 1.0} - }, - - init: function () { - this.defaultOpacity = this.el.getAttribute('material').opacity; - this.materialObj = {opacity: this.data.opacity}; - }, - - update: function () { - var el = this.el; - - if (this.data.active) { - el.setAttribute('material', this.materialObj); - el.object3D.visible = true; - } else { - el.setAttribute('material', 'opacity', this.defaultOpacity); - if (el.components.animation__mouseleave) { - setTimeout(() => { - el.emit('mouseleave', null, false);}); - } - } - } -}); - -AFRAME.registerComponent('active-text-color', { - dependencies: ['text'], - - schema: { - active: {default: false}, - color: {default: '#333'} - }, - - init: function () { - this.defaultColor = this.el.getAttribute('text').color; - }, - - update: function () { - var el = this.el; - if (this.data.active) { - el.setAttribute('text', 'color', this.data.color); - } else { - el.setAttribute('text', 'color', this.defaultColor); - } - } -}); diff --git a/src/components/beat-cut-fx.js b/src/components/beat-cut-fx.js deleted file mode 100644 index 2d15c2f53..000000000 --- a/src/components/beat-cut-fx.js +++ /dev/null @@ -1,218 +0,0 @@ -const AUX_VECTOR = new THREE.Vector3(); -const DESTROY_TIME = 500; -const MAX_VELOCITY = 0.01; - -const ROTATIONS = { - right: 0, - upright: 45, - up: 90, - upleft: 135, - left: 180, - downleft: 225, - down: 270, - downright: 315 -}; - -const SEPARATIONS = { - right: new THREE.Vector2(0, 1), - upright: new THREE.Vector2(-0.5, 0.5), - up: new THREE.Vector2(-1, 0), - upleft: new THREE.Vector2(-0.5, -0.5), - left: new THREE.Vector2(0, -1), - downleft: new THREE.Vector2(0.5, -0.5), - down: new THREE.Vector2(1, 0), - downright: new THREE.Vector2(0.5, 0.5) -}; - -/** - * Handles beat cut effects: fragments of beat and fx sprites. - */ -AFRAME.registerComponent('beat-cut-fx', { - schema: { - color: {type: 'string'}, - type: {oneOf: ['beat', 'dot', 'mine'], default: 'beat'} - }, - - init: function () { - this.breaking = false; - this.fx = null; - this.fxpool = null; - this.pieces = []; - this.pool = null; - this.returnToPoolTimer = DESTROY_TIME; - - this.el.addEventListener('model-loaded', this.setupModel.bind(this)); - this.el.addEventListener('explode', this.explode.bind(this), false); - }, - - update: function () { - const sceneEl = this.el.sceneEl; - const color = this.data.color; - - if (this.data.type === 'beat') { - this.material = sceneEl.systems.materials[color + 'BeatPieces']; - this.poolBeat = sceneEl.components[`pool__beat-broken-${color}`]; - this.poolBeatFx = sceneEl.components[`pool__beat-fx-${color}`]; - this.poolPunchFx = sceneEl.components[`pool__punch-fx-${color}`]; - } else if (this.data.type === 'dot') { - this.material = sceneEl.systems.materials[color + 'BeatPieces']; - this.poolBeat = sceneEl.components[`pool__beat-broken-${color}-dot`]; - this.poolPunch = sceneEl.components[`pool__punch-broken-${color}-dot`]; - this.poolBeatFx = sceneEl.components[`pool__beat-fx-${color}`]; - this.poolPunchFx = sceneEl.components[`pool__punch-fx-${color}`]; - } else { - this.material = sceneEl.systems.materials['minePieces']; - this.poolBeat = sceneEl.components['pool__beat-broken-mine']; - this.poolBeatFx = sceneEl.components['pool__beat-fx-mine']; - this.poolPunchFx = sceneEl.components['pool__punch-fx-mine']; - } - }, - - setupModel: function (evt) { - const model = evt.detail.model; - this.pieces = model.children; - for (let i = 0; i < this.pieces.length; i++) { - let piece = this.pieces[i]; - piece.restPosition = piece.position.clone(); - piece.restRotation = piece.rotation.clone(); - piece.posVelocity = new THREE.Vector3(); - piece.rotVelocity = new THREE.Vector3(); - piece.material = this.material; - } - }, - - explode: function (evt) { - const direction = evt.detail.direction; - const gameMode = evt.detail.gameMode; - const correctHit = evt.detail.correctHit; - const position = evt.detail.position; - const rotation = evt.detail.rotation; - - let beatDirection = evt.detail.beatDirection; - - if (!position || !rotation || !direction || this.data.color !== evt.detail.color) { - return; - } - - this.el.object3D.position.copy(position); - - if (gameMode === 'classic' && this.data.type !== 'mine') { - const isDot = this.data.type === 'dot'; - if (isDot) { - beatDirection = Math.abs(direction.x) > Math.abs(direction.y) ? 'right' : 'down'; - } - // Minimize direction.z. - direction.z *= 0.01; - AUX_VECTOR.copy(direction).multiplyScalar(-0.0025).clampLength(0, MAX_VELOCITY); - for (let i = 0; i < this.pieces.length; i++) { - let piece = this.pieces[i]; - piece.posVelocity.copy(AUX_VECTOR); - piece.rotation.z = THREE.Math.degToRad(ROTATIONS[beatDirection]); - if (correctHit) { - // Dir is a hardcoded value, based on the position of meshes in .OBJ files. - let dir = i % 2 == 0 ? -0.001 : 0.001; - piece.posVelocity.x += SEPARATIONS[beatDirection].x * dir; - piece.posVelocity.y += SEPARATIONS[beatDirection].y * dir; - if (!isDot || i < 2) { - randomizeVector(piece.posVelocity, 0.002); - randomizeVector(piece.rotVelocity, 0.004); - } else { - // In dot, copy velocity and rotation from the "glued" chunk. - piece.posVelocity.copy(this.pieces[i - 2].posVelocity); - piece.rotVelocity.copy(this.pieces[i - 2].rotVelocity); - } - } else { - piece.posVelocity.y += 0.001; - piece.rotVelocity.z += 0.01; - } - } - } else { - for (let i = 0; i < this.pieces.length; i++) { - let piece = this.pieces[i]; - if (correctHit) { - piece.posVelocity.copy(piece.position).normalize().multiplyScalar(0.002); - piece.posVelocity.z = -0.004; - randomizeVector(piece.posVelocity, 0.001); - randomizeVector(piece.rotVelocity, 0.01); - } else { - piece.posVelocity.y += 0.001; - piece.posVelocity.z -= 0.001; - } - } - } - - this.pool = this[gameMode === 'classic' ? 'poolBeat' : 'poolPunch']; - - if (this.fx === null) { - this.fxpool = this[gameMode === 'classic' ? 'poolBeatFx' : 'poolPunchFx']; - this.fx = this.fxpool.requestEntity(); - } - if (this.fx) { - this.fx.play(); - this.fx.object3D.position.copy(position); - this.fx.object3D.rotation.copy(rotation); - this.fx.emit('explode'); - } - - this.returnToPoolTimer = DESTROY_TIME; - this.breaking = true; - this.el.play(); - }, - - returnToPool: function () { - for (let i = 0; i < this.pieces.length; i++) { - let piece = this.pieces[i]; - piece.position.copy(piece.restPosition); - piece.rotation.copy(piece.restRotation); - piece.posVelocity.set(0.0, 0.0, 0.0); - piece.rotVelocity.set(0.0, 0.0, 0.0); - piece.scale.set(1.0, 1.0, 1.0); - } - - if (this.fx) { - this.fxpool.returnEntity(this.fx); - this.fx = null; - } - - this.pool.returnEntity(this.el); - this.breaking = false; - }, - - tick: function (time, delta) { - if (!this.breaking) { return; } - - this.returnToPoolTimer -= delta; - if (this.returnToPoolTimer <= 0) { - this.returnToPool(); - return; - } - - for (let i = 0; i < this.pieces.length; i++) { - const piece = this.pieces[i]; - piece.position.addScaledVector(piece.posVelocity, delta); - piece.rotation.set( - piece.rotation.x + piece.rotVelocity.x * delta, - piece.rotation.y + piece.rotVelocity.y * delta, - piece.rotation.z + piece.rotVelocity.z * delta); - - if (this.data.type !== 'mine') { - if (this.returnToPoolTimer < DESTROY_TIME / 2) { - piece.scale.multiplyScalar(0.94); - } - piece.posVelocity.multiplyScalar(0.97); - // Gravity. - piece.posVelocity.y -= 0.000003 * delta; - } else { - // Mines. - piece.scale.multiplyScalar(0.94); - piece.posVelocity.multiplyScalar(0.97); - } - } - } -}); - -function randomizeVector (v, a) { - v.x += (Math.random() - 0.5) * a; - v.y += (Math.random() - 0.5) * a; - v.z += (Math.random() - 0.5) * a; -} diff --git a/src/components/beat-generator.js b/src/components/beat-generator.js deleted file mode 100644 index dc15f72ea..000000000 --- a/src/components/beat-generator.js +++ /dev/null @@ -1,442 +0,0 @@ -import utils from '../utils'; - -let skipDebug = AFRAME.utils.getUrlParameter('skip') || 0; -skipDebug = parseInt(skipDebug, 10); - -const DEBUG_MINES = AFRAME.utils.getUrlParameter('debugmines'); - -// Beats arrive at sword stroke distance synced with the music. -export const BEAT_ANTICIPATION_TIME = 1.1; -export const BEAT_PRELOAD_TIME = 1.1; -export const PUNCH_OFFSET = 0.5; -export const SWORD_OFFSET = 1.5; - -// How far out to load beats (ms). -const isMobile = AFRAME.utils.device.isMobile(); -const BEAT_FORWARD_TIME = isMobile ? 2000 : 3500; -const WALL_FORWARD_TIME = isMobile ? 7500 : 10000; - -/** - * Load beat data (all the beats and such). - */ -AFRAME.registerComponent('beat-generator', { - dependencies: ['stage-colors'], - - schema: { - challengeId: { type: 'string' }, // If clicked play. - gameMode: { type: 'string' }, // classic, punch, ride. - difficulty: { type: 'string' }, - beatmapCharacteristic: { type: 'string' }, - has3DOFVR: { default: false }, - hasSongLoadError: { default: false }, - isPlaying: { default: false }, - isZipFetching: { default: false }, - menuSelectedChallengeId: { type: 'string' }, - songDuration: { type: 'number' }, // Seconds. - speed: { type: 'number' } - }, - - orientationsHumanized: [ - 'up', - 'down', - 'left', - 'right', - 'upleft', - 'upright', - 'downleft', - 'downright' - ], - - horizontalPositions: [-0.75, -0.25, 0.25, 0.75], - - horizontalPositionsHumanized: { - 0: 'left', - 1: 'middleleft', - 2: 'middleright', - 3: 'right' - }, - - positionHumanized: { - topLeft: { layer: 2, index: 0 }, - topCenterLeft: { layer: 2, index: 1 }, - topCenterRight: { layer: 2, index: 2 }, - topRight: { layer: 2, index: 3 }, - - middleLeft: { layer: 1, index: 0 }, - middleCenterLeft: { layer: 1, index: 1 }, - middleCenterRight: { layer: 1, index: 2 }, - middleRight: { layer: 1, index: 3 }, - - bottomLeft: { layer: 0, index: 0 }, - bottomCenterLeft: { layer: 0, index: 1 }, - bottomCenterRight: { layer: 0, index: 2 }, - bottomRight: { layer: 0, index: 3 } - }, - - verticalPositionsHumanized: { - 0: 'bottom', - 1: 'middle', - 2: 'top' - }, - - init: function () { - this.audioAnalyserEl = document.getElementById('audioanalyser'); - this.beatContainer = document.getElementById('beatContainer'); - this.beats = null; - this.beatData = null; - this.beatDataProcessed = false; - this.preloadTime = 0; - this.songTime = undefined; - this.bpm = undefined; - this.curve = null; - this.curveEl = document.getElementById('curve'); - this.curveFollowRigEl = document.getElementById('curveFollowRig'); - this.tube = document.getElementById('tube'); - this.index = { events: 0, notes: 0, obstacles: 0 }; - this.wallContainer = document.getElementById('wallContainer'); - - this.leftStageLasers = document.getElementById('leftStageLasers'); - this.rightStageLasers = document.getElementById('rightStageLasers'); - this.stageColors = this.el.components['stage-colors']; - - this.el.addEventListener('cleargame', this.onClearGame.bind(this)); - this.el.addEventListener('gamemenurestart', this.onRestart.bind(this)); - - this.el.addEventListener('ziploaderend', evt => { - this.beats = evt.detail.beats; - if (!this.data.challengeId || this.data.hasSongLoadError) { return; } - this.beatData = this.beats[this.data.beatmapCharacteristic + '-' + this.data.difficulty]; - this.processBeats(); - }); - - /* - // For debugging: generate beats on key space press. - document.addEventListener('keydown', ev => { - if (ev.keyCode === 32) { - this.generateBeat({ - _cutDirection: 1, - _lineIndex: (Math.random()*3)|0, - _lineLayer: 1, - _time: Math.floor(this.el.components.song.getCurrentTime() * 1.4 + 3), - _type: (Math.random() * 2) | 0 - }) - } - }) - */ - }, - - play: function () { - this.playerHeight = document.querySelector('[player-height]').components['player-height']; - }, - - update: function (oldData) { - const data = this.data; - - // Song selected and clicked play. - if (oldData.challengeId !== data.challengeId && data.challengeId) { - this.index.events = 0; - this.index.notes = 0; - this.index.obstacles = 0; - - // Process. - if (!this.data.isZipFetching && this.beats && !this.data.hasSongLoadError) { - this.beatData = this.beats[this.data.beatmapCharacteristic + '-' + this.data.difficulty]; - this.processBeats(); - } - - // Generate curve based on song duration. - this.curveEl.components.supercurve.generateCurve(data.speed * data.songDuration); - this.curve = this.curveEl.components.supercurve.curve; - } - }, - - /** - * Load the beat data into the game. - */ - processBeats: function () { - if (this.data.hasSongLoadError) { return; } - - // Reset variables used during playback. - // Beats spawn ahead of the song and get to the user in sync with the music. - this.songTime = 0; - this.preloadTime = 0; - this.beatData._events.sort(lessThan); - this.beatData._obstacles.sort(lessThan); - this.beatData._notes.sort(lessThan); - this.bpm = this.beatData._beatsPerMinute; - - // Performance: Remove all obstacles if there are more than 256 (often used with Noodle Extensions) - if (this.beatData._obstacles.length > 256) { - this.beatData._obstacles = []; - } - - // Some events have negative time stamp to initialize the stage. - const events = this.beatData._events; - if (events.length && events[0]._time < 0) { - for (let i = 0; events[i]._time < 0; i++) { - this.generateEvent(events[i]); - } - } - - this.beatDataProcessed = true; - console.log('[beat-generator] Finished processing beat data.'); - }, - - /** - * Generate beats and stuff according to timestamp. - */ - tick: function (time, delta) { - if (!this.data.isPlaying || !this.data.challengeId || !this.beatData) { return; } - - let songTime; - const song = this.el.components.song; - if (this.preloadTime === undefined) { - if (!song.isAudioPlaying) { return; } - // Get current song time. - songTime = song.getCurrentTime() * 1000 + skipDebug; - } else { - // Song is not playing and is preloading beats, use maintained beat time. - songTime = this.preloadTime; - } - - const bpm = this.beatData._beatsPerMinute; - const msPerBeat = 1000 * 60 / this.beatData._beatsPerMinute; - - // Load in stuff scheduled between the last timestamp and current timestamp. - // Beats. - const notes = this.beatData._notes; - for (let i = this.index.notes; i < notes.length; ++i) { - if (songTime + BEAT_FORWARD_TIME > notes[i]._time * msPerBeat) { - this.generateBeat(notes[i]); - this.index.notes++; - } - } - - if (this.data.gameMode !== 'ride') { - // Walls. - const obstacles = this.beatData._obstacles; - for (let i = this.index.obstacles; i < obstacles.length; ++i) { - if (songTime + WALL_FORWARD_TIME >= obstacles[i]._time * msPerBeat) { - this.generateWall(obstacles[i]); - this.index.obstacles++; - } - } - } - - // Stage events. - const events = this.beatData._events; - for (let i = this.index.events; i < events.length; ++i) { - if (songTime >= events[i]._time * msPerBeat) { - this.generateEvent(events[i]); - this.index.events++; - } - } - - if (this.preloadTime === undefined) { return; } - - if (this.preloadTime >= BEAT_PRELOAD_TIME * 1000) { - // Finished preload. - this.el.sceneEl.emit('beatloaderpreloadfinish', null, false); - this.preloadTime = undefined; - } else { - // Continue preload. - this.preloadTime += delta; - } - }, - - generateBeat: function (noteInfo, index) { - const data = this.data; - - if (DEBUG_MINES) { noteInfo._type = 3; } - - let color; - let type = noteInfo._cutDirection === 8 ? 'dot' : 'arrow'; - if (noteInfo._type === 0) { - color = 'red'; - } else if (noteInfo._type === 1) { - color = 'blue'; - } else { - type = 'mine'; - color = undefined; - } - - if (data.has3DOFVR && - data.gameMode !== 'viewer' && - data.gameMode !== 'ride' && - color === 'red') { - return; - } - - if (AFRAME.utils.getUrlParameter('dot') || data.gameMode === 'punch') { type = 'dot'; } - - const beatEl = this.requestBeat(type, color); - if (!beatEl) { return; } - - // Entity was just created. - if (!beatEl.components.beat && !beatEl.components.plume) { - setTimeout(() => { - this.setupBeat(beatEl, noteInfo);}); - } else { - this.setupBeat(beatEl, noteInfo); - } - }, - - setupBeat: function (beatEl, noteInfo) { - const data = this.data; - - // Apply sword offset. Blocks arrive on beat in front of the user. - const cutDirection = this.orientationsHumanized[noteInfo._cutDirection]; - const horizontalPosition = this.horizontalPositionsHumanized[noteInfo._lineIndex] || 'left'; - const verticalPosition = this.verticalPositionsHumanized[noteInfo._lineLayer] || 'middle'; - - // Factor in sword offset and beat anticipation time (percentage). - const weaponOffset = this.data.gameMode === 'classic' ? SWORD_OFFSET : PUNCH_OFFSET; - const positionOffset = - ((weaponOffset / data.speed) + BEAT_ANTICIPATION_TIME) / - data.songDuration; - - // Song position is from 0 to 1 along the curve (percentage). - const durationMs = data.songDuration * 1000; - const msPerBeat = 1000 * 60 / this.beatData._beatsPerMinute; - const songPosition = ((noteInfo._time * msPerBeat) / durationMs) + positionOffset; - - // Set render order (back to front so decreasing render order as index increases). - const renderOrder = this.el.systems['render-order'].order.beats + 1 - songPosition; - - if (data.gameMode === 'ride') { - beatEl.components.plume.onGenerate(songPosition, horizontalPosition, verticalPosition, - this.playerHeight.beatOffset); - beatEl.setAttribute('render-order', renderOrder); - } else { - beatEl.components.beat.onGenerate(songPosition, horizontalPosition, verticalPosition, - cutDirection, this.playerHeight.beatOffset); - beatEl.components.beat.blockEl.object3D.renderOrder = renderOrder; - } - beatEl.play(); - }, - - generateWall: function (wallInfo) { - const data = this.data; - const wallEl = this.el.sceneEl.components.pool__wall.requestEntity(); - - if (!wallEl) { return; } - - // Entity was just created. - if (!wallEl.components.wall) { - setTimeout(() => { - this.setupWall(wallEl, wallInfo);}); - } else { - this.setupWall(wallEl, wallInfo); - } - }, - - setupWall: function (wallEl, wallInfo) { - const data = this.data; - - if (data.has3DOFVR && data.gameMode !== 'viewer') { return; } - - const durationSeconds = 60 * (wallInfo._duration / this.bpm); - const horizontalPosition = this.horizontalPositionsHumanized[wallInfo._lineIndex] || 'none'; - const isCeiling = wallInfo._type === 1; - const length = durationSeconds * data.speed; - const width = wallInfo._width / 2; // We want half the reported width. - - // Factor in beat anticipation time (percentage). - const positionOffset = (BEAT_ANTICIPATION_TIME) / data.songDuration; - - // Song position is from 0 to 1 along the curve (percentage). - const durationMs = data.songDuration * 1000; - const msPerBeat = 1000 * 60 / this.beatData._beatsPerMinute; - const songPosition = (wallInfo._time * msPerBeat) / durationMs + positionOffset; - - const lengthPercent = length / this.curveEl.components.supercurve.length; - wallEl.components.wall.onGenerate(songPosition, horizontalPosition, width, length, - isCeiling, songPosition + lengthPercent); - wallEl.play(); - - // Set render order (back to front so decreasing render order as index increases). - // For walls, set as the back end of the wall. - wallEl.object3D.renderOrder = this.el.systems['render-order'].order.beats + 1 - - (songPosition + lengthPercent); - }, - - generateEvent: function (event) { - switch (event._type) { - case 0: - this.stageColors.setColor('bg', event._value); - this.stageColors.setColorInstant('moon', event._value); - break; - case 1: - this.stageColors.setColorInstant('stars', event._value); - break; - case 2: - this.stageColors.setColor('curveeven', event._value); - break; - case 3: - this.stageColors.setColor('curveodd', event._value); - break; - case 4: - this.stageColors.setColor('floor', event._value); - break; - case 8: - this.tube.emit('pulse', null, false); - break; - case 9: - this.tube.emit('pulse', null, false); - break; - case 12: - this.stageColors.setColor('leftglow', event._value); - break; - case 13: - this.stageColors.setColor('rightglow', event._value); - break; - } - }, - - requestBeat: function (type, color) { - let beatPoolName = 'pool__beat-' + type; - if (this.data.gameMode === 'ride') { - beatPoolName = 'pool__plume-' + type; - } - if (type !== 'mine' && color) { beatPoolName += '-' + color; } - const pool = this.el.sceneEl.components[beatPoolName]; - if (!pool) { - console.warn('Pool ' + beatPoolName + ' unavailable'); - return; - } - return pool.requestEntity(); - }, - - /** - * Restart by returning all beats to pool. - */ - onClearGame: function () { - this.preloadTime = 0; - this.index.events = 0; - this.index.notes = 0; - this.index.obstacles = 0; - - for (let i = 0; i < this.beatContainer.children.length; i++) { - const child = this.beatContainer.children[i]; - child.object3D.position.set(0, 0, -9999); - if (child.components.beat) { child.components.beat.returnToPool(); } - } - - for (let i = 0; i < this.wallContainer.children.length; i++) { - const child = this.wallContainer.children[i]; - child.object3D.position.set(0, -9999, 0); - if (child.components.wall) { child.components.wall.returnToPool(); } - } - }, - - /** - * Regenerate. - */ - onRestart: function () { - const data = this.data; - this.curveEl.components.supercurve.generateCurve(data.speed * data.songDuration); - this.curve = this.curveEl.components.supercurve.curve; - } -}); - -function lessThan (a, b) { return a._time - b._time; } diff --git a/src/components/beat-hit-sound.js b/src/components/beat-hit-sound.js deleted file mode 100644 index 98411451c..000000000 --- a/src/components/beat-hit-sound.js +++ /dev/null @@ -1,114 +0,0 @@ -var sourceCreatedCallback; - -const LAYER_BOTTOM = 'bottom'; -const LAYER_MIDDLE = 'middle'; -const LAYER_TOP = 'top'; -const VOLUME = 0.185; - -/** - * Beat hit sound using positional audio and audio buffer source. - */ -AFRAME.registerComponent('beat-hit-sound', { - directionsToSounds: { - up: '', - down: '', - upleft: 'left', - upright: 'right', - downleft: 'left', - downright: 'right', - left: 'left', - right: 'right' - }, - - init: function () { - this.currentBeatEl = null; - this.currentCutDirection = ''; - this.processSound = this.processSound.bind(this); - sourceCreatedCallback = this.sourceCreatedCallback.bind(this); - - // Sound pools. - for (let i = 1; i <= 10; i++) { - this.el.setAttribute(`sound__beathit${i}`, { - poolSize: 8, - positional: false, - src: `#hitSound${i}`, - volume: VOLUME - }); - this.el.setAttribute(`sound__beathit${i}left`, { - poolSize: 8, - positional: false, - src: `#hitSound${i}left`, - volume: VOLUME - }); - this.el.setAttribute(`sound__beathit${i}right`, { - poolSize: 8, - positional: false, - src: `#hitSound${i}right`, - volume: VOLUME - }); - } - }, - - play: function () { - // Kick three.js loader...Don't know why sometimes doesn't load. - for (let i = 1; i <= 10; i++) { - if (!this.el.components[`sound__beathit${i}`].loaded) { - this.el.setAttribute(`sound__beathit${i}`, 'src', ''); - this.el.setAttribute(`sound__beathit${i}`, 'src', `#hitSound${i}`); - } - if (!this.el.components[`sound__beathit${i}left`].loaded) { - this.el.setAttribute(`sound__beathit${i}left`, 'src', ''); - this.el.setAttribute(`sound__beathit${i}left`, 'src', `#hitSound${i}left`); - } - if (!this.el.components[`sound__beathit${i}right`].loaded) { - this.el.setAttribute(`sound__beathit${i}right`, 'src', ''); - this.el.setAttribute(`sound__beathit${i}right`, 'src', `#hitSound${i}right`); - } - } - }, - - playSound: function (beatEl, position, cutDirection) { - const rand = 1 + Math.floor(Math.random() * 10); - const dir = this.directionsToSounds[cutDirection || 'up']; - const soundPool = this.el.components[`sound__beathit${rand}${dir}`]; - soundPool.playSound(this.processSound); - }, - - /** - * Set audio stuff before playing. - */ - processSound: function (audio) { - audio.detune = 0; - }, - - /** - * Function callback to process source buffer once created. - * Set detune for pitch and inflections. - */ - sourceCreatedCallback: function (source) { - // Pitch based on layer. - const layer = this.getLayer(this.currentBeatEl.object3D.position.y); - if (layer === LAYER_BOTTOM) { - source.detune.setValueAtTime(-400, 0); - } else if (layer === LAYER_TOP) { - source.detune.setValueAtTime(200, 0); - } - - // Inflection on strike down or up. - if (this.currentCutDirection === 'down') { - source.detune.linearRampToValueAtTime(-400, 1); - } - if (this.currentCutDirection === 'up') { - source.detune.linearRampToValueAtTime(400, 1); - } - }, - - /** - * Get whether beat is on bottom, middle, or top layer. - */ - getLayer: function (y) { - if (y === 1) { return LAYER_BOTTOM; } - if (y === 1.70) { return LAYER_TOP; } - return LAYER_MIDDLE; - } -}); diff --git a/src/components/beat.js b/src/components/beat.js deleted file mode 100644 index 557b3cdb7..000000000 --- a/src/components/beat.js +++ /dev/null @@ -1,688 +0,0 @@ -import { PUNCH_OFFSET, SWORD_OFFSET } from './beat-generator'; -const COLORS = require('../constants/colors.js'); - -const auxObj3D = new THREE.Object3D(); -const bbox = new THREE.Box3(); -const otherBbox = new THREE.Box3(); -const collisionZThreshold = -1.65; - -const ANGLE_DOT_SUPER = 0.97; // ~15-degrees. -const ANGLE_DOT_MIN = 0.625; // ~50-degrees. -const WARMUP_TIME = 2000; -const WARMUP_ROTATION_CHANGE = 2 * Math.PI; - -const elasticEasing = getElasticEasing(1.33, 0.5); - -const DESTROYED_SPEED = 1.0; -const ONCE = { once: true }; -const DESTROY_TIME = 1000; - -// Play sound and explode at reach to test sync. -const SYNC_TEST = !!AFRAME.utils.getUrlParameter('synctest'); -const syncTestObject3D = new THREE.Object3D(); -const syncTestVector3 = new THREE.Vector3(); - -const MINE = 'mine'; -const CLASSIC = 'classic'; -const DOT = 'dot'; -const PUNCH = 'punch'; -const RIDE = 'ride'; - -const CUT_DIRECTION_VECTORS = { - up: new THREE.Vector3(0, 1, 0), - down: new THREE.Vector3(0, -1, 0), - left: new THREE.Vector3(-1, 0, 0), - right: new THREE.Vector3(1, 0, 0), - upleft: new THREE.Vector3(-1, 1, 0).normalize(), - upright: new THREE.Vector3(1, 1, 0).normalize(), - downleft: new THREE.Vector3(-1, -1, 0).normalize(), - downright: new THREE.Vector3(1, -1, 0).normalize() -}; - -const MODELS = { - arrowblue: 'blueBeatObjTemplate', - arrowred: 'redBeatObjTemplate', - dotblue: 'dotBlueObjTemplate', - dotred: 'dotRedObjTemplate', - mine: 'mineObjTemplate' -}; - -const WEAPON_COLORS = { right: 'blue', left: 'red' }; - -const ROTATIONS = { - right: 0, - upright: 45, - up: 90, - upleft: 135, - left: 180, - downleft: 225, - down: 270, - downright: 315 -}; - -const SIZES = { - [CLASSIC]: 0.48, - [PUNCH]: 0.35, - [RIDE]: 0.4 -}; - -AFRAME.registerComponent('beat-system', { - schema: { - gameMode: { default: 'classic', oneOf: ['classic', 'punch', 'ride'] }, - hasVR: { default: false }, - inVR: { default: false }, - isLoading: { default: false }, - isPlaying: { default: false } - }, - - init: function () { - this.beats = []; - this.beatsToCheck = []; - this.blades = []; - this.fists = []; - this.weapons = null; - - this.bladeEls = this.el.sceneEl.querySelectorAll('a-entity[blade]'); - this.curveFollowRig = document.getElementById('curveFollowRig'); - this.punchEls = this.el.sceneEl.querySelectorAll('a-entity[punch]'); - this.curveEl = document.getElementById('curve'); - this.size = SIZES[this.data.gameMode]; - this.supercurveFollow = null; - }, - - play: function () { - for (let i = 0; i < 2; i++) { - this.blades.push(this.bladeEls[i].components.blade); - this.fists.push(this.punchEls[i].components.punch); - } - - this.supercurve = this.curveEl.components.supercurve; - this.supercurveFollow = this.curveFollowRig.components['supercurve-follow']; - }, - - update: function (oldData) { - this.size = SIZES[this.data.gameMode]; - - if (oldData.isLoading && !this.data.isLoading) { - this.updateBeatPositioning(); - this.weaponOffset = this.data.gameMode === CLASSIC ? SWORD_OFFSET * 1.15 : PUNCH_OFFSET; - this.weaponOffset = this.weaponOffset / this.supercurve.curve.getLength(); - } - - if (oldData.gameMode !== this.data.gameMode) { - this.weapons = this.data.gameMode === CLASSIC ? this.blades : this.fists; - } - }, - - tick: function (t, dt) { - if (!this.data.isPlaying || this.data.gameMode === RIDE) { return; } - - const beatsToCheck = this.beatsToCheck; - const curve = this.supercurve.curve; - const progress = this.supercurveFollow.songProgress; - - // Filter for beats that should be checked for collisions. - beatsToCheck.length = 0; - for (let i = 0; i < this.beats.length; i++) { - const beat = this.beats[i]; - - // Check beat is not already destroyed. - if (beat.destroyed) { continue; } - - // Check if beat is close enough to be hit. - const beatProgress = beat.songPosition - this.weaponOffset; - if (progress < beatProgress) { continue; } - - // Check if beat should be filtered out due to not being in front. - let inFront = true; - for (let i = 0; i < beatsToCheck.length; i++) { - if (beat.horizontalPosition === beatsToCheck[i].horizontalPosition && - beat.verticalPosition === beatsToCheck[i].verticalPosition && - beat.songPosition > beatsToCheck[i].songPosition) { - inFront = false; - } - if (!inFront) { break; } - } - if (inFront) { beatsToCheck.push(beat); } - } - - // Update bounding boxes and velocities. - this.weapons[0].tickBeatSystem(t, dt); - this.weapons[1].tickBeatSystem(t, dt); - - // No beats to check means to collision to check. - if (!beatsToCheck.length) { return; } - - // Check hits. - for (let i = 0; i < beatsToCheck.length; i++) { - // If ?synctest=true, auto-explode beat and play sound to easily test sync. - if ((SYNC_TEST || !this.data.hasVR) && beatsToCheck[i].data.type !== MINE) { - beatsToCheck[i].autoHit(this.weapons[0].el); - continue; - } - this.checkCollision(beatsToCheck[i], this.weapons[0], this.weapons[1]); - } - }, - - checkCollision: function (beat, weapon1, weapon2) { - // Mine. - if (beat.data.type === MINE) { - if (weapon1.checkCollision(beat)) { - beat.onHit(weapon1.el); - return; - } - if (weapon2.checkCollision(beat)) { - beat.onHit(weapon2.el); - } - return; - } - - // Successful hit, let the beat handle further processing. - const correctWeapon = WEAPON_COLORS[weapon1.el.dataset.hand] === beat.data.color - ? weapon1 - : weapon2; - if (correctWeapon.checkCollision(beat)) { - beat.onHit(correctWeapon.el); - return; - } - - // If not successful hit, check if mismatched hit. - const wrongWeapon = correctWeapon === weapon1 ? weapon2 : weapon1; - if (wrongWeapon.checkCollision(beat)) { - // Minimum speed for wrong beat. - if (this.data.gameMode === 'classic' && wrongWeapon.strokeSpeed < 15) { - return; - } - - if (this.data.gameMode === 'punch' && wrongWeapon.speed < 2) { - return; - } - - beat.onHit(wrongWeapon.el, true); - beat.destroyBeat(wrongWeapon.el, false); - } - }, - - horizontalPositions: {}, - - verticalPositions: {}, - - /** - * Update positioning between blocks, vertically and horizontally depending on - * game mode, and the height of the user. - * - * Adjustment revolves primary around SIZES, and the hMargin multiply factor. - */ - updateBeatPositioning: (function () { - // Have punches be higher. - const BOTTOM_HEIGHTS = { - [CLASSIC]: 0.95, - [RIDE]: 0.95, - [PUNCH]: 1.20 - }; - - const BOTTOM_HEIGHT_MIN = 0.4; - const REFERENCE_HEIGHT = 1.6; - - return function () { - const gameMode = this.data.gameMode; - const horizontalPositions = this.horizontalPositions; - const verticalPositions = this.verticalPositions; - - const heightOffset = this.el.sceneEl.camera.el.object3D.position.y - REFERENCE_HEIGHT; - const size = SIZES[gameMode]; - - // Horizontal margin based on size of blocks so they don't overlap, which a smidge - // of extra margin. - // For punch mode, we want a wider horizontal spread in punch range, but not vertical. - const hMargin = gameMode === CLASSIC ? size : size * 1.2; - horizontalPositions.left = -1.5 * hMargin; - horizontalPositions.middleleft = -0.5 * hMargin; - horizontalPositions.middle = hMargin; - horizontalPositions.middleright = 0.5 * hMargin; - horizontalPositions.right = 1.5 * hMargin; - - // Vertical margin based on size of blocks so they don't overlap. - // And then overall shifted up and down based on user height (camera Y). - // But not too low to go underneath the ground. - const bottomHeight = BOTTOM_HEIGHTS[gameMode]; - const vMargin = size; - verticalPositions.bottom = Math.max( - BOTTOM_HEIGHT_MIN, - bottomHeight + heightOffset); - verticalPositions.middle = Math.max( - BOTTOM_HEIGHT_MIN + vMargin, - bottomHeight + vMargin + heightOffset); - verticalPositions.top = Math.max( - BOTTOM_HEIGHT_MIN + vMargin * 2, - bottomHeight + (vMargin * 2) + heightOffset); - }; - })(), - - registerBeat: function (beatComponent) { - this.beats.push(beatComponent); - }, - - unregisterBeat: function (beatComponent) { - this.beats.splice(this.beats.indexOf(beatComponent), 1); - } -}); - -/** - * Bears, beats, Battlestar Galactica. - * Create beat from pool, collision detection, movement, scoring. - */ -AFRAME.registerComponent('beat', { - schema: { - color: { default: 'red', oneOf: ['red', 'blue'] }, - debug: { default: false }, - type: { default: 'arrow', oneOf: ['arrow', DOT, MINE] } - }, - - init: function () { - this.bbox = null; - this.beatSystem = this.el.sceneEl.components['beat-system']; - this.broken = null; - this.brokenPoolName = undefined; - this.destroyed = false; - this.hitEventDetail = {}; - this.poolName = undefined; - this.returnToPoolTimer = DESTROY_TIME; - this.rotationAxis = new THREE.Vector3(); - this.superCutIdx = 0; - this.startPositionZ = undefined; - this.warmupTime = 0; - this.weaponColors = { right: 'blue', left: 'red' }; - this.curveEl = document.getElementById('curve'); - this.curveFollowRig = document.getElementById('curveFollowRig'); - this.mineParticles = document.getElementById('mineParticles'); - this.rigContainer = document.getElementById('rigContainer'); - this.superCuts = document.querySelectorAll('.superCutFx'); - - this.verticalPositions = this.beatSystem.verticalPositions; - - this.explodeEventDetail = { - beatDirection: '', - color: this.data.color, - correctHit: false, - direction: new THREE.Vector3(), - gameMode: '', - position: new THREE.Vector3(), - rotation: new THREE.Euler() - }; - - this.blockEl = document.createElement('a-entity'); - this.blockEl.setAttribute('mixin', 'beatBlock'); - this.el.appendChild(this.blockEl); - this.initMesh(); - - if (this.data.type === MINE) { - this.poolName = 'pool__beat-mine'; - } else { - this.poolName = `pool__beat-${this.data.type}-${this.data.color}`; - } - }, - - tick: function (time, timeDelta) { - const el = this.el; - const data = this.data; - - // Delay these events into next frame to spread out the workload. - if (this.queueBeatHitEvent) { - el.sceneEl.emit('beathit', this.queueBeatHitEvent, true); - this.queueBeatHitEvent = null; - } else if (this.queueBeatWrongEvent) { - el.sceneEl.emit('beatwrong', null, true); - this.queueBeatWrongEvent = null; - } - - if (this.destroyed) { - this.returnToPoolTimer -= timeDelta; - if (this.returnToPoolTimer <= 0) { this.returnToPool(); } - return; - } - - // Warmup animation. - if (this.warmupTime < WARMUP_TIME) { - const progress = elasticEasing(this.warmupTime / WARMUP_TIME); - el.object3D.rotation.y = this.rotationStart + (progress * this.rotationChange); - el.object3D.position.y = this.positionStart + (progress * this.positionChange); - this.warmupTime += timeDelta; - } - - // Check if past the camera to return to pool. - const returnDistance = this.data.type === 'mine' ? 0.25 : 1.25; - if ((el.object3D.position.z - returnDistance) > this.curveFollowRig.object3D.position.z) { - this.returnToPool(); - this.missHit(); - } - }, - - /** - * Called when summoned by beat-generator. - * Called after updatePosition. - */ - onGenerate: function (songPosition, horizontalPosition, verticalPosition, cutDirection, heightOffset) { - const data = this.data; - const el = this.el; - - this.beatSystem.registerBeat(this); - - // Model is 0.29 size. We make it 1.0 so we can easily scale based on 1m size. - const FACTOR = 1 / 0.29; - const size = SIZES[this.beatSystem.data.gameMode] * FACTOR; - this.blockEl.object3D.scale.set(size, size, size); - - cutDirection = cutDirection || 'down'; - this.cutDirection = cutDirection; - this.horizontalPosition = horizontalPosition; - this.verticalPosition = verticalPosition; - this.songPosition = songPosition; - - if (!this.blockEl) { - console.warn('Unable to generate beat. blockEl was undefined.'); - return; - } - - this.blockEl.object3D.visible = true; - this.destroyed = false; - el.object3D.visible = true; - - this.warmupTime = 0; - - // Set position. - const supercurve = this.curveEl.components.supercurve; - supercurve.getPointAt(songPosition, el.object3D.position); - supercurve.alignToCurve(songPosition, el.object3D); - el.object3D.position.x += this.beatSystem.horizontalPositions[horizontalPosition]; - - if (data.type !== DOT) { - el.object3D.rotation.z = THREE.Math.degToRad(ROTATIONS[cutDirection]); - } - - // Set up rotation warmup. - this.rotationStart = el.object3D.rotation.y; - this.rotationChange = WARMUP_ROTATION_CHANGE; - if (Math.random > 0.5) { this.rotationChange *= -1; } - - // Set up position warmup. - const offset = 0.5; - el.object3D.position.y -= offset; - this.positionStart = el.object3D.position.y; - this.positionChange = this.verticalPositions[verticalPosition] + offset + heightOffset; - }, - - /** - * Set geometry and maybe material. - */ - initMesh: function () { - const blockEl = this.blockEl; - const el = this.el; - const type = this.data.type; - - setObjModelFromTemplate( - blockEl, - MODELS[type !== 'mine' ? `${type}${this.data.color}` : type]); - - blockEl.setAttribute('materials', 'name', 'beat'); - const mesh = blockEl.getObject3D('mesh'); - mesh.geometry.computeBoundingBox(); - - this.bbox = mesh.geometry.boundingBox; - - if (this.data.type === 'mine') { - this.bbox.expandByScalar(-0.25); - } - }, - - wrongHit: function () { - this.destroyed = true; - this.queueBeatWrongEvent = true; - }, - - missHit: function () { - if (this.data.type === MINE) { return; } - this.el.sceneEl.emit('beatmiss', null, true); - }, - - destroyBeat: function (weaponEl, correctHit) { - const data = this.data; - const explodeEventDetail = this.explodeEventDetail; - const rig = this.rigContainer.object3D; - - this.blockEl.object3D.visible = false; - - this.destroyed = true; - this.returnToPoolTimer = DESTROY_TIME; - - explodeEventDetail.beatDirection = this.cutDirection; - explodeEventDetail.color = this.data.color; - explodeEventDetail.correctHit = correctHit; - explodeEventDetail.gameMode = this.beatSystem.data.gameMode; - explodeEventDetail.position.copy(this.el.object3D.position); - rig.worldToLocal(explodeEventDetail.position); - - let brokenPoolName; - if (this.data.type === MINE) { - brokenPoolName = 'pool__beat-broken-mine'; - } else { - const mode = this.beatSystem.data.gameMode === CLASSIC ? 'beat' : PUNCH; - brokenPoolName = `pool__${mode}-broken-${this.data.color}`; - if (this.data.type === DOT) { - brokenPoolName += '-dot'; - } - } - - this.broken = this.el.sceneEl.components[brokenPoolName].requestEntity(); - if (this.broken) { - this.broken.emit('explode', this.explodeEventDetail, false); - } - - if (this.beatSystem.data.gameMode === CLASSIC && correctHit) { - weaponEl.components.trail.pulse(); - } - }, - - /** - * Check if need to return to pool. - */ - returnToPool: function () { - this.beatSystem.unregisterBeat(this); - this.el.object3D.position.set(0, 0, -9999); - this.el.object3D.visible = false; - this.el.sceneEl.components[this.poolName].returnEntity(this.el); - }, - - onHit: function (weaponEl, wrongHit) { - const data = this.data; - - // Haptics. - try { - weaponEl.components.haptics__beat.pulse(); - } catch (err) { - console.log(err); - } - - // Sound. - this.el.parentNode.components['beat-hit-sound'].playSound(this.el, this.cutDirection); - - if (wrongHit) { - this.wrongHit(); - return; - } - - if (data.type === MINE) { - this.destroyBeat(weaponEl, false); - this.el.sceneEl.emit('minehit', null, true); - return; - } - - // Do blade-related checks. - if (this.beatSystem.data.gameMode === CLASSIC) { - let dot = 0; - if (data.type === 'arrow') { - const blade = weaponEl.components.blade; - dot = blade.strokeDirectionVector.dot(CUT_DIRECTION_VECTORS[this.cutDirection]); - if (dot < ANGLE_DOT_MIN) { - this.destroyBeat(weaponEl, false); - this.wrongHit(); - return; - } - } - this.destroyBeat(weaponEl, true); - this.calculateScoreBlade(weaponEl, dot); - return; - } - - // Do punch-related checks. - if (this.beatSystem.data.gameMode === PUNCH) { - this.destroyBeat(weaponEl, true); - this.calculateScorePunch(weaponEl); - } - }, - - /** - * Emit score and show score effects. - * Called by multiple modes (blade, punch). - */ - score: function (score, percent) { - const el = this.el; - const hitEventDetail = this.hitEventDetail; - - score = Math.ceil(parseInt(score, 10) / 10) * 10; - hitEventDetail.percent = percent; - hitEventDetail.score = score; - this.queueBeatHitEvent = hitEventDetail; - - // Super FX. - if (percent >= 100) { - this.superCuts[this.superCutIdx].components.supercutfx.createSuperCut( - el.object3D, this.data.color); - this.superCutIdx = (this.superCutIdx + 1) % this.superCuts.length; - } - }, - - /** - * Blade scoring. - */ - calculateScoreBlade: function (bladeEl, angleDot) { - const SUPER_SCORE_SPEED = 10; - const speed = bladeEl.components.blade.strokeSpeed; - const speedScore = (bladeEl.components.blade.strokeSpeed / SUPER_SCORE_SPEED) * 30; - - let score; - if (speed <= SUPER_SCORE_SPEED) { - score = Math.min(speedScore, 30); - } else { - score = remap(clamp(speed, 10, 25), 10, 25, 30, 50); - } - - let percent = Math.min(speedScore, 30); - - // 70% score on direction. - if (this.data.type === DOT) { - score += 70; - percent += 70; - } else { - score += angleDot * 70; - if (angleDot > ANGLE_DOT_SUPER) { - percent += 70; - } else { - percent += angleDot * 70; - } - } - - this.score(score, percent); - }, - - /** - * A possible To Do would be to score based on punch velocity and direction. - * More points scored if punching straight down the curve. - */ - calculateScorePunch: function (punchEl) { - const base = 60; // Get 60% of the score just by hitting the beat. - - const SUPER_SCORE_SPEED = 1.5; - const speed = punchEl.components.punch.speed; - const speedScore = (speed / SUPER_SCORE_SPEED) * 40; - - let score; - if (speed <= SUPER_SCORE_SPEED) { - score = base + Math.min(speedScore, 40); - } else { - score = base + remap(clamp(speed, 1.5, 6), 1.5, 6, 40, 70); - } - - const percent = base + Math.min(speedScore, 40); - this.score(score, percent); - }, - - /** - * Play hit if SYNC_TEST or 2D viewer mode. - */ - autoHit: function (weaponEl) { - const el = this.el; - this.destroyBeat(weaponEl, Math.random() < 0.9); - el.parentNode.components['beat-hit-sound'].playSound(el, this.cutDirection); - const hitEventDetail = this.hitEventDetail; - hitEventDetail.percent = 100; - hitEventDetail.score = 100; - this.queueBeatHitEvent = hitEventDetail; - } -}); - -/** - * Load OBJ from already parsed and loaded OBJ template. - */ -const geometries = {}; -function setObjModelFromTemplate (el, templateId) { - // Load into cache. - if (!geometries[templateId]) { - const templateEl = document.getElementById(templateId); - if (templateEl.getObject3D('mesh')) { - // Set cache. - geometries[templateId] = templateEl.getObject3D('mesh').children[0].geometry; - } else { - // Wait. - templateEl.addEventListener('object3dset', evt => { - if (evt.detail.type !== 'mesh') { return; } - setObjModelFromTemplate(el, templateId); - }, ONCE); - return; - } - } - - // Set geometry. - if (geometries[templateId]) { - if (!el.getObject3D('mesh')) { el.setObject3D('mesh', new THREE.Mesh()); } - el.getObject3D('mesh').geometry = geometries[templateId]; - } -} - -function getElasticEasing (a, p) { - return t => 1 - elastic(a, p)(1 - t); -} - -function elastic (amplitude, period) { - function minMax (val, min, max) { - return Math.min(Math.max(val, min), max); - } - - const a = minMax(amplitude || 1, 1, 10); - const p = minMax(period || 0.5, .1, 2); - return t => { - return (t === 0 || t === 1) - ? t - : -a * Math.pow(2, 10 * (t - 1)) * - Math.sin((((t - 1) - (p / (Math.PI * 2) * - Math.asin(1 / a))) * (Math.PI * 2)) / p); - }; -} - -function remap (value, low1, high1, low2, high2) { - return low2 + (high2 - low2) * (value - low1) / (high1 - low1); -} - -function clamp (val, min, max) { - return Math.min(Math.max(val, min), max); -} diff --git a/src/components/blade.js b/src/components/blade.js deleted file mode 100644 index 9890f0294..000000000 --- a/src/components/blade.js +++ /dev/null @@ -1,134 +0,0 @@ -/** - * Blade, swing, strokes. - */ -AFRAME.registerComponent('blade', { - schema: { - enabled: {default: false} - }, - - init: function () { - const el = this.el; - const data = this.data; - - this.bladeHandle = el.querySelector('.bladeHandleHelper').object3D; - this.bladeTip = el.querySelector('.bladeTipHelper').object3D; - - this.rigEl = document.getElementById('curveFollowRig'); - this.strokeDirectionVector = new THREE.Vector3(); - this.strokeSpeed = 0; - this.bladeBottomPosition = new THREE.Vector3(); - this.bladeTipPositions = [ - new THREE.Vector3(), // Oldest. - new THREE.Vector3(), - new THREE.Vector3() // Most recent. - ]; - this.bladeWorldPositions = [ - new THREE.Vector3(), // Current frame tip. - new THREE.Vector3(), // Current frame handle. - new THREE.Vector3(), // Last frame tip. - new THREE.Vector3(), // Last frame handle. - ]; - - this.bladeEl = this.el.querySelector('.blade'); - }, - - update: function (oldData) { - if (!oldData.enabled && this.data.enabled) { - this.bladeEl.emit('drawblade'); - } - }, - - tickBeatSystem: function (time, delta) { - if (!this.data.enabled) { return; } - this.updateVelocity(delta); - }, - - updateVelocity: function (delta) { - const bladeTipPositions = this.bladeTipPositions; - const bladeWorldPositions = this.bladeWorldPositions; - const data = this.data; - - /* - if (this.el.closest('#rightHand')) { - this.createDebugCube(this.bladeHandle.getWorldPosition(new THREE.Vector3()), 0xFF0000) - this.createDebugCube(this.blade.getWorldPosition(new THREE.Vector3()), 0x00FF00) - } - */ - - // Previous frame. - bladeWorldPositions[2].copy(bladeWorldPositions[0]); - bladeWorldPositions[3].copy(bladeWorldPositions[1]); - - // Current frame. - this.bladeTip.getWorldPosition(bladeWorldPositions[0]); - this.bladeHandle.getWorldPosition(bladeWorldPositions[1]); - bladeTipPositions[2].copy(bladeWorldPositions[0]); - - // Cover to rig to calculate stroke direction. - this.rigEl.object3D.worldToLocal(bladeTipPositions[2]); - - // Distance covered but the blade tip in one frame. - this.strokeDirectionVector.copy(bladeTipPositions[2]).sub(bladeTipPositions[0]); - const distance = this.strokeDirectionVector.length(); - this.strokeSpeed = distance / (delta / 1000); - - this.strokeDirectionVector.z = 0; - this.strokeDirectionVector.normalize(); - - // Move down the queue. Calculate direction through several frames for less noise. - const oldest = bladeTipPositions.shift(); - bladeTipPositions.push(oldest); - }, - - checkCollision: (function () { - const bbox = new THREE.Box3(); - const bladeLocalPositions = [new THREE.Vector3(), new THREE.Vector3(), - new THREE.Vector3(), new THREE.Vector3()]; - const bladeLocalTriangle = new THREE.Triangle(); - const LEFT = 'left'; - const RIGHT = 'right'; - - return function (beat) { - if (this.strokeSpeed < 1) { return false; } - - // Convert points to beat space. - for (let i = 0; i < 3; i++) { - bladeLocalPositions[i].copy(this.bladeWorldPositions[i]); - beat.blockEl.object3D.worldToLocal(bladeLocalPositions[i]); - bladeLocalPositions[i].multiplyScalar(1.75); - } - - // Current frame triangle. - bladeLocalTriangle.set( - bladeLocalPositions[0], - bladeLocalPositions[1], - bladeLocalPositions[2]); - - // Increase hitbox for high beats. - bbox.copy(beat.bbox); - bbox.expandByScalar(0.02); - if (beat.horizontalPosition === LEFT || beat.horizontalPosition === RIGHT) { - bbox.expandByScalar(0.07); - } - - if (bbox.intersectsTriangle(bladeLocalTriangle)) { return true; } - - // Previous frame triangle. - // Only checked if the current frame triangle does not intersect. - bladeLocalPositions[3].copy(this.bladeWorldPositions[3]); - beat.blockEl.object3D.worldToLocal(bladeLocalPositions[3]); - bladeLocalTriangle.set(bladeLocalPositions[2], bladeLocalPositions[3], - bladeLocalPositions[0]); - if (bbox.intersectsTriangle(bladeLocalTriangle)) { return true; } - - return false; - }; - })(), - - createDebugCube: function (v, color) { - const geo = new THREE.BoxGeometry(0.05, 0.05, 0.05); - const mesh = new THREE.Mesh(geo, new THREE.MeshBasicMaterial({color: color, side: THREE.DoubleSide})); - mesh.position.copy(v); - this.el.sceneEl.object3D.add(mesh); - } -}); diff --git a/src/components/check-vr.js b/src/components/check-vr.js deleted file mode 100644 index baf2de50b..000000000 --- a/src/components/check-vr.js +++ /dev/null @@ -1,13 +0,0 @@ -AFRAME.registerSystem('check-vr', { - init: function () { - if (AFRAME.utils.device.isMobile()) { - document.getElementById('vrButton').style.display = 'none'; - } - - setTimeout(() => { - if (AFRAME.utils.device.checkHeadsetConnected()) { - this.el.emit('displayconnected'); - } - }, 250); - } -}); diff --git a/src/components/console-shortcuts.js b/src/components/console-shortcuts.js deleted file mode 100644 index 75f1ef594..000000000 --- a/src/components/console-shortcuts.js +++ /dev/null @@ -1,10 +0,0 @@ -AFRAME.registerComponent('console-shortcuts', { - play: function () { - window.$ = val => document.querySelector(val); - window.$$ = val => document.querySelectorAll(val); - window.$$$ = val => document.querySelector(`[${val}]`).getAttribute(val); - window.$$$$ = val => document.querySelector(`[${val}]`).components[val]; - window.scene = this.el; - window.state = this.el.systems.state.state; - } -}); diff --git a/src/components/controller.js b/src/components/controller.js deleted file mode 100644 index e3d7157e8..000000000 --- a/src/components/controller.js +++ /dev/null @@ -1,98 +0,0 @@ -/** - * Controller registration, cursor. - */ -AFRAME.registerComponent('controller', { - schema: { - hand: {default: 'right', oneOf: ['left', 'right']} - }, - - init: function () { - const el = this.el; - const data = this.data; - - this.controllerType = ''; - - el.addEventListener('controllerconnected', evt => { - this.controllerType = evt.detail.name; - this.el.setAttribute('cursor', this.config[this.controllerType].cursor || {}); - }); - - const hand = {hand: data.hand, model: false}; - el.setAttribute('daydream-controls', hand); - el.setAttribute('oculus-go-controls', hand); - el.setAttribute('oculus-touch-controls', { - hand: data.hand, - model: false, - orientationOffset: {x: 0, y: 0, z: 0} - }); - el.setAttribute('vive-controls', hand); - el.setAttribute('vive-focus-controls', hand); - el.setAttribute('windows-motion-controls', hand); - el.setAttribute('generic-tracked-controller-controls', hand); - }, - - config: { - 'daydream-controls': { - cursor: { - downEvents: ['trackpaddown', 'triggerdown'], - upEvents: ['trackpadup', 'triggerup'] - } - }, - - 'oculus-go-controls': { - cursor: { - downEvents: ['trackpaddown', 'triggerdown'], - upEvents: ['trackpadup', 'triggerup'] - } - }, - - 'oculus-touch-controls': { - cursor: { - downEvents: [ - 'triggerdown', - 'gripdown', - 'abuttondown', - 'bbuttondown', - 'xbuttondown', - 'ybuttondown' - ], - upEvents: [ - 'triggerup', - 'gripup', - 'abuttonup', - 'bbuttonup', - 'xbuttonup', - 'ybuttonup' - ] - } - }, - - 'vive-controls': { - cursor: { - downEvents: ['trackpaddown', 'triggerdown', 'gripdown'], - upEvents: ['trackpadup', 'triggerup', 'gripup'] - } - }, - - 'vive-focus-controls': { - cursor: { - downEvents: ['trackpaddown', 'triggerdown', 'gripdown'], - upEvents: ['trackpadup', 'triggerup', 'gripup'] - } - }, - - 'windows-motion-controls': { - cursor: { - downEvents: ['trackpaddown', 'triggerdown', 'gripdown'], - upEvents: ['trackpadup', 'triggerup', 'gripup'] - } - }, - - 'generic-tracked-controller-controls': { - cursor: { - downEvents: ['triggerdown'], - upEvents: ['triggerup'] - } - } - } -}); diff --git a/src/components/copy-texture.js b/src/components/copy-texture.js deleted file mode 100644 index 377fefb8b..000000000 --- a/src/components/copy-texture.js +++ /dev/null @@ -1,30 +0,0 @@ -AFRAME.registerComponent('copy-texture', { - dependencies: ['geometry', 'material'], - - schema: { - from: {type: 'selector'} - }, - - init: function () { - const data = this.data; - - data.from.addEventListener('materialtextureloaded', () => { - this.copyTexture();}); - this.copyTexture(); - }, - - copyTexture: function () { - const el = this.el; - const target = this.data.from; - const material = el.getObject3D('mesh').material; - - if (!target.getObject3D('mesh')) { return; } - - material.map = target.getObject3D('mesh').material.map; - - if (!material.map) { return; } - - material.map.needsUpdate = true; - material.needsUpdate = true; - } -}); diff --git a/src/components/cursor-laser.js b/src/components/cursor-laser.js deleted file mode 100644 index dbecedfdf..000000000 --- a/src/components/cursor-laser.js +++ /dev/null @@ -1,54 +0,0 @@ -/** - * Laser beam. - * Automatically set length on intersection. - */ -AFRAME.registerComponent('cursor-laser', { - dependencies: ['geometry'], - - schema: { - enabled: {default: true} - }, - - init: function () { - const el = this.el; - this.weaponEl = this.el.closest('.weapon'); - - // Calculate size to position beam at tip of controller. - const geometry = this.el.getAttribute('geometry'); - el.object3D.position.z = -1 * geometry.height / 2; - this.originalSize = geometry.height; - this.currentLength = geometry.height; - }, - - update: function () { - this.el.object3D.visible = this.data.enabled; - }, - - tick: function () { - const el = this.el; - - if (!this.data.enabled) { return; } - - const cursor = this.weaponEl.components.cursor; - if (!cursor) { return; } - - // Toggle beam. - const intersectedEl = cursor.intersectedEl; - - if (!intersectedEl) { - // Retract the beam if not intersecting. - el.object3D.position.z = -24.98; - el.object3D.scale.x = 0.75; - el.getObject3D('mesh').scale.y = 50; - this.currentLength = 1; - return; - } - - // Set appropriate length of beam on intersection. - const intersection = this.weaponEl.components.raycaster.intersections[0]; - if (!intersection) { return; } - el.object3D.scale.x = 1; - el.object3D.position.z = (-intersection.distance / 2); - el.getObject3D('mesh').scale.y = this.currentLength = intersection.distance; - } -}); diff --git a/src/components/cursor-mesh.js b/src/components/cursor-mesh.js deleted file mode 100644 index 94aa69308..000000000 --- a/src/components/cursor-mesh.js +++ /dev/null @@ -1,50 +0,0 @@ -/** - * Cursor mesh to show at intersection point with respective hand. - */ -AFRAME.registerComponent('cursor-mesh', { - schema: { - active: {default: true}, - cursorEl: {type: 'selector'} - }, - - init: function () { - this.scenePivotEl = document.getElementById('scenePivot'); - }, - - update: function () { - this.el.object3D.visible = this.data.active; - }, - - tick: function () { - var cursor; - var cursorEl = this.data.cursorEl; - var el = this.el; - var intersection; - var intersectedEl; - var scenePivotEl = this.scenePivotEl; - - if (!this.data.active) { return; } - - cursor = cursorEl.components.cursor; - if (!cursor) { return; } - - // Look for valid intersection target. - intersectedEl = cursorEl.components.cursor.intersectedEl; - if (intersectedEl) { - el.object3D.visible = true; - } else { - el.object3D.visible = false; - return; - } - - // Update cursor mesh. - intersection = cursorEl.components.raycaster.getIntersection(intersectedEl); - if (!intersection) { return; } - - el.object3D.position.copy(intersection.point); - - if (scenePivotEl) { - el.object3D.rotation.copy(scenePivotEl.object3D.rotation); - } - } -}); diff --git a/src/components/curve-follow-rig-reset.js b/src/components/curve-follow-rig-reset.js deleted file mode 100644 index ed9fb7d43..000000000 --- a/src/components/curve-follow-rig-reset.js +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Reset curve follow rig pose back to beginning. - */ -AFRAME.registerComponent('curve-follow-rig-reset', { - schema: { - isVictory: {type: 'string'} - }, - - init: function () { - const el = this.el; - - el.sceneEl.addEventListener('cleargame', () => { - this.reset(); - }); - }, - - update: function (oldData) { - const data = this.data; - const el = this.el; - - if (!oldData.isVictory && data.isVictory) { this.reset(); } - }, - - reset: function () { - this.el.components['supercurve-follow'].curveProgress = 0; - this.el.object3D.position.set(0, 0, 0); - this.el.object3D.rotation.set(0, 0, 0); - } -}); diff --git a/src/components/cutfx-shader.js b/src/components/cutfx-shader.js deleted file mode 100644 index 2982c8101..000000000 --- a/src/components/cutfx-shader.js +++ /dev/null @@ -1,14 +0,0 @@ -AFRAME.registerShader('cutfxShader', { - schema: { - src: {type: 'map', is: 'uniform', default: '#cutfxImg'}, - color: {type: 'color', is: 'uniform', default: '#fff'}, - progress: {type: 'number', is: 'uniform'}, - transparent: {default: true}, - blending: {default: 'additive'}, - side: {default: 'double'}, - depthTest: {default: false}, - depthWrite: {default: false} - }, - vertexShader: require('./shaders/cutfx.vert.glsl'), - fragmentShader: require('./shaders/cutfx.frag.glsl') -}); diff --git a/src/components/debug-beat-generator.js b/src/components/debug-beat-generator.js deleted file mode 100644 index 0248b1f85..000000000 --- a/src/components/debug-beat-generator.js +++ /dev/null @@ -1,271 +0,0 @@ -AFRAME.registerComponent('debug-beat-generator', { - dependencies: ['beat-generator'], - - schema: { - beatEnabled: {default: false}, - stageEnabled: {default: false} - }, - - init: function () { - this.beatLoader = this.el.components['beat-generator']; - this.selectedBeat = { - color: 'red', - position: 'middleCenterLeft', - type: 'arrow', - orientation: 'up' - }; - - this.beats = {}; - - this.onKeyDown = this.onKeyDown.bind(this); - - if (this.data.stageEnabled || AFRAME.utils.getUrlParameter('debugstage')) { - this.addDebugStageControls(); - } - - if (this.data.beatEnabled || - AFRAME.utils.getUrlParameter('debugstate').trim() === 'gameplay') { - window.addEventListener('keydown', this.onKeyDown); - this.addDebugBeatControls(); - } - }, - - spawn: function () { - var self = this; - Object.keys(this.beats).forEach(function (key) { - self.generateBeat(self.beats[key]); - }); - }, - - generateBeat: function (beatInfo) { - var type; - if (beatInfo.type === 'wall') { - this.generateWall(beatInfo); - return; - } - if (beatInfo.type === 'mine') { - type = 3; - } else { - type = beatInfo.color === 'red' ? 0 : 1; - } - this.beatLoader.generateBeat({ - _lineIndex: this.beatLoader.positionHumanized[beatInfo.position].index, - _lineLayer: this.beatLoader.positionHumanized[beatInfo.position].layer, - _cutDirection: beatInfo.type === 'dot' - ? 8 - : this.beatLoader.orientationsHumanized.indexOf(beatInfo.orientation), - _type: type - }); - }, - - generateWall: function (wallInfo) { - this.beatLoader.bpm = 90; - this.beatLoader.generateWall({ - _lineIndex: this.beatLoader.positionHumanized[wallInfo.position].index, - _width: 1, - _duration: 3 - }); - }, - - /** - * Debug generate beats. - */ - onKeyDown: function (event) { - const keyCode = event.keyCode; - switch (keyCode) { - case 32: { // Space bar. - this.spawn(); - break; - } - } - }, - - addDebugBeatControls: function () { - const parentDiv = document.createElement('div'); - const self = this; - - parentDiv.style.position = 'absolute'; - parentDiv.style.right = '0'; - parentDiv.style.top = '0'; - parentDiv.style.padding = '10px'; - parentDiv.style.width = '500px'; - parentDiv.style.height = '600px'; - document.body.appendChild(parentDiv); - - addTypeBeatMenu(); - addColorBeatMenu(); - addOrientationMenu(); - - setBeatButton(); - addBeatPositionMenu(); - - addGenerateButton(); - - function addOrientationMenu () { - const menuDiv = addMenu('orientation'); - addButton('top', menuDiv); - addButton('left', menuDiv); - addButton('right', menuDiv); - addButton('down', menuDiv); - parentDiv.appendChild(menuDiv); - } - - function addColorBeatMenu () { - const menuDiv = addMenu('color'); - addButton('blue', menuDiv); - addButton('red', menuDiv); - parentDiv.appendChild(menuDiv); - } - - function addTypeBeatMenu () { - const menuDiv = addMenu('type'); - addButton('arrow', menuDiv); - addButton('dot', menuDiv); - addButton('mine', menuDiv); - addButton('wall', menuDiv); - parentDiv.appendChild(menuDiv); - } - - function addBeatPositionMenu () { - const menuDiv = addMenu('position'); - addButton('topLeft', menuDiv); - addButton('topCenterLeft', menuDiv); - addButton('topCenterRight', menuDiv); - addButton('topRight', menuDiv); - - addButton('middleLeft', menuDiv); - addButton('middleCenterLeft', menuDiv); - addButton('middleCenterRight', menuDiv); - addButton('middleRight', menuDiv); - - addButton('bottomLeft', menuDiv); - addButton('bottomCenterLeft', menuDiv); - addButton('bottomCenterRight', menuDiv); - addButton('bottomRight', menuDiv); - } - - function addMenu (name) { - const menuDiv = document.createElement('div'); - menuDiv.id = name; - menuDiv.style.marginBottom = '20px'; - menuDiv.style.width = '500px'; - menuDiv.style.display = 'inline-block'; - parentDiv.appendChild(menuDiv); - return menuDiv; - } - - function addButton (text, containerEl, clickHandler) { - const div = document.createElement('div'); - const handler = clickHandler || function onClick () { - const buttons = div.parentElement.querySelectorAll('.button'); - for (let i = 0; i < buttons.length; i++) { buttons[i].style.background = '#000'; } - div.style.background = '#66f'; - self.selectedBeat[div.parentElement.id] = this.id; - self['selected' + div.parentElement.id.charAt(0).toUpperCase() + div.parentElement.id.slice(1) + 'El'] = this; - }; - div.classList.add('button'); - div.id = text; - div.style.width = '100px'; - div.style.height = '30px'; - div.style.background = '#000'; - div.style.color = '#fff'; - div.style.zIndex = 999999999; - div.style.padding = '5px'; - div.style.margin = '5px'; - div.style.font = '14px sans-serif'; - div.style.textAlign = 'center'; - div.style.lineHeight = '30px'; - div.style.cursor = 'pointer'; - div.style.display = 'inline-block'; - div.innerHTML = text; - containerEl.appendChild(div); - div.addEventListener('click', handler); - return div; - } - - function addGenerateButton (text, containerEl) { - const buttonEl = addButton('Spawn (Space Bar)', parentDiv, () => { - self.spawn();}); - buttonEl.style.width = '460px'; - buttonEl.style.bottomMargin = '10px'; - } - - function setBeatButton (text, containerEl) { - var buttonEl = addButton('Set Beat', parentDiv, function () { - var color = self.selectedBeat.type !== 'mine' ? ' ' + self.selectedBeat.color : ''; - var orientation = self.selectedBeat.type !== 'arrow' ? '' : ' ' + self.selectedBeat.orientation; - self.selectedBeat = { - position: self.selectedBeat.position, - type: self.selectedBeat.type, - orientation: self.selectedBeat.orientation, - color: self.selectedBeat.color - }; - if (!self.selectedPositionEl) { return; } - self.selectedPositionEl.innerHTML = self.selectedBeat.type + color + orientation; - self.beats[self.selectedPositionEl.id] = { - position: self.selectedBeat.position, - type: self.selectedBeat.type, - orientation: self.selectedBeat.orientation, - color: self.selectedBeat.color - }; - }); - buttonEl.style.width = '460px'; - buttonEl.style.bottomMargin = '10px'; - } - }, - - addDebugStageControls: function () { - var currControl = 0; - - const addControl = (i, name, type) => { - const div = document.createElement('div'); - div.style.position = 'absolute'; - div.id = 'stagecontrol' + i; - div.style.width = '100px'; - div.style.height = '30px'; - div.style.top = type === 'element' ? '20px' : '70px'; - div.style.background = '#000'; - div.style.color = '#fff'; - div.style.zIndex = 999999999; - div.style.padding = '5px'; - div.style.font = '14px sans-serif'; - div.style.textAlign = 'center'; - div.style.cursor = 'pointer'; - div.style.left = (20 + i * 120) + 'px'; - div.innerHTML = name; - if (type === 'element') { - div.addEventListener('click', () => { - document.getElementById('stagecontrol' + currControl).style.background = '#000'; - div.style.background = '#66f'; - currControl = i; - }); - } else { - div.addEventListener('click', () => { - this.beatLoader.generateEvent({_type: currControl, _value: i}); - }); - } - document.body.appendChild(div); - }; - - [ - 'sky', - 'tunnelNeon', - 'leftStageLasers', - 'rightStageLasers', - 'floor' - ].forEach((id, i) => { - addControl(i, id, 'element');}); - - [ - 'off', - 'blue', - 'blue', - 'bluefade', - '', - 'red', - 'red', - 'redfade' - ].forEach((id, i) => { - addControl(i, id, 'value');}); - } -}); diff --git a/src/components/debug-beat-positioning.js b/src/components/debug-beat-positioning.js deleted file mode 100644 index c1e7fb687..000000000 --- a/src/components/debug-beat-positioning.js +++ /dev/null @@ -1,45 +0,0 @@ -const horizontalPositions = ['left', 'middleleft', 'middleright', 'right']; -const verticalPositions = ['bottom', 'middle', 'top']; - -/** - * Display all beat positions at once. - */ -AFRAME.registerComponent('debug-beat-positioning', { - play: function () { - let mode = AFRAME.utils.getUrlParameter('debugbeatpositioning'); - if (!mode) { return; } - if (mode !== 'punch' && mode !== 'classic') { mode = 'classic'; } - - this.el.emit('debugbeatpositioning'); - - setTimeout(() => { - const generator = this.el.sceneEl.components['beat-generator']; - generator.data.gameMode = mode; - scene.components['beat-system'].data.gameMode = mode; - scene.components['beat-system'].updateBeatPositioning(); - - horizontalPositions.forEach(hPos => { - verticalPositions.forEach(vPos => { - let beatEl = generator.requestBeat(mode === 'punch' ? 'dot' : 'arrow', 'red'); - let dir = Math.random() < 0.5 ? 'left' : 'right'; - beatEl.components.beat.onGenerate(0.001, hPos, vPos, dir); - beatEl.object3D.renderOrder = 9999; - beatEl.play(); - - beatEl = generator.requestBeat('dot', 'blue'); - dir = Math.random() < 0.5 ? 'down' : 'up'; - beatEl.components.beat.onGenerate(0.0015, hPos, vPos, dir); - beatEl.object3D.renderOrder = 9999; - beatEl.play(); - }); - }); - - const wallEl = scene.components.pool__wall.requestEntity(); - wallEl.components.wall.onGenerate(0.0015, 'left', 4, 4, true); - wallEl.play(); - - document.getElementById('beatContainer').removeAttribute('bind__visible'); - document.getElementById('beatContainer').object3D.visible = true; - }, 500); - } -}); diff --git a/src/components/debug-controller.js b/src/components/debug-controller.js deleted file mode 100644 index 9d0d0c71d..000000000 --- a/src/components/debug-controller.js +++ /dev/null @@ -1,202 +0,0 @@ -/** - * Keyboard bindings to control controller. - * Position controller in front of camera. - */ -AFRAME.registerComponent('debug-controller', { - init: function () { - var primaryHand; - var secondaryHand; - - if (!AFRAME.utils.getUrlParameter('debug')) { return; } - - console.log('%c debug-controller enabled ', 'background: #111; color: red'); - - primaryHand = document.getElementById('rightHand'); - secondaryHand = document.getElementById('leftHand'); - - primaryHand.setAttribute('tracked-controls', 'autoHide', false); - primaryHand.object3D.visible = true; - secondaryHand.object3D.visible = true; - secondaryHand.setAttribute('tracked-controls', 'autoHide', false); - - if (AFRAME.utils.getUrlParameter('headfist')) { return; } - - window.addEventListener('click', evt => { - if (!evt.isTrusted) { return; } - primaryHand.emit('triggerdown'); - primaryHand.emit('triggerup'); - }); - - if (AFRAME.utils.getUrlParameter('debug') === 'oculus') { - primaryHand.emit('controllerconnected', {name: 'oculus-touch-controls'}); - secondaryHand.emit('controllerconnected', {name: 'oculus-touch-controls'}); - primaryHand.setAttribute('controller', 'controllerType', 'oculus-touch-controls'); - secondaryHand.setAttribute('controller', 'controllerType', 'oculus-touch-controls'); - } else { - primaryHand.emit('controllerconnected', {name: 'vive-controls'}); - secondaryHand.emit('controllerconnected', {name: 'vive-controls'}); - primaryHand.setAttribute('controller', 'controllerType', 'vive-controls'); - secondaryHand.setAttribute('controller', 'controllerType', 'vive-controls'); - } - - // Enable raycaster. - this.el.emit('enter-vr', null, false); - - document.addEventListener('keydown', evt => { - var primaryPosition; - var primaryRotation; - var secondaryPosition; - var secondaryRotation; - - if (!evt.shiftKey) { return; } - - // for trigger. - if (evt.keyCode === 32) { - if (this.isTriggerDown) { - primaryHand.emit('triggerup'); - this.isTriggerDown = false; - } else { - primaryHand.emit('triggerdown'); - this.isTriggerDown = true; - } - return; - } - - // for secondary trigger. - if (evt.keyCode === 81) { - if (this.isSecondaryTriggerDown) { - secondaryHand.emit('triggerup'); - this.isSecondaryTriggerDown = false; - } else { - secondaryHand.emit('triggerdown'); - this.isSecondaryTriggerDown = true; - } - return; - } - - // secondary grip. - if (evt.keyCode === 78) { - if (this.secondaryGripDown) { - secondaryHand.emit('gripup'); - this.secondaryGripDown = false; - } else { - secondaryHand.emit('gripdown'); - this.secondaryGripDown = true; - } - } - - // primary grip. - if (evt.keyCode === 77) { - if (this.primaryGripDown) { - primaryHand.emit('gripup'); - this.primaryGripDown = false; - } else { - primaryHand.emit('gripdown'); - this.primaryGripDown = true; - } - } - - // Menu button <1>. - if (evt.keyCode === 49) { - secondaryHand.emit('menudown'); - } - - // Position bindings. - if (evt.ctrlKey) { - secondaryPosition = secondaryHand.getAttribute('position'); - if (evt.keyCode === 72) { secondaryPosition.x -= 0.02; } // h. - if (evt.keyCode === 74) { secondaryPosition.y -= 0.02; } // j. - if (evt.keyCode === 75) { secondaryPosition.y += 0.02; } // k. - if (evt.keyCode === 76) { secondaryPosition.x += 0.02; } // l. - if (evt.keyCode === 59 || evt.keyCode === 186) { secondaryPosition.z -= 0.01; } // ;. - if (evt.keyCode === 222) { secondaryPosition.z += 0.01; } // ;. - secondaryHand.setAttribute('position', AFRAME.utils.clone(secondaryPosition)); - } else { - primaryPosition = primaryHand.getAttribute('position'); - if (evt.keyCode === 72) { primaryPosition.x -= 0.02; } // h. - if (evt.keyCode === 74) { primaryPosition.y -= 0.02; } // j. - if (evt.keyCode === 75) { primaryPosition.y += 0.02; } // k. - if (evt.keyCode === 76) { primaryPosition.x += 0.02; } // l. - if (evt.keyCode === 59 || evt.keyCode === 186) { primaryPosition.z -= 0.02; } // ;. - if (evt.keyCode === 222) { primaryPosition.z += 0.02; } // ;. - primaryHand.setAttribute('position', AFRAME.utils.clone(primaryPosition)); - } - - // Rotation bindings. - if (evt.ctrlKey) { - secondaryRotation = secondaryHand.getAttribute('rotation'); - if (evt.keyCode === 89) { secondaryRotation.x -= 10; } // y. - if (evt.keyCode === 79) { secondaryRotation.x += 10; } // o. - if (evt.keyCode === 85) { secondaryRotation.y -= 10; } // u. - if (evt.keyCode === 73) { secondaryRotation.y += 10; } // i. - secondaryHand.setAttribute('rotation', AFRAME.utils.clone(secondaryRotation)); - } else { - primaryRotation = primaryHand.getAttribute('rotation'); - if (evt.keyCode === 89) { primaryRotation.x -= 10; } // y. - if (evt.keyCode === 79) { primaryRotation.x += 10; } // o. - if (evt.keyCode === 85) { primaryRotation.y -= 10; } // u. - if (evt.keyCode === 73) { primaryRotation.y += 10; } // i. - primaryHand.setAttribute('rotation', AFRAME.utils.clone(primaryRotation)); - } - }); - }, - - play: function () { - var primaryHand; - var secondaryHand; - - this.bounds = document.body.getBoundingClientRect(); - - if (!AFRAME.utils.getUrlParameter('debug')) { return; } - if (AFRAME.utils.getUrlParameter('headfist')) { return; } - - primaryHand = document.getElementById('rightHand'); - secondaryHand = document.getElementById('leftHand'); - - secondaryHand.object3D.position.set(-0.2, 1.5, -0.5); - primaryHand.object3D.position.set(0.2, 1.5, -0.5); - secondaryHand.setAttribute('rotation', {x: 35, y: 0, z: 0}); - - const type = AFRAME.utils.getUrlParameter('type'); - [primaryHand, secondaryHand].forEach(hand => { - hand.querySelector('.laser').object3D.visible = false; - if (type === 'classic') { - hand.querySelector('.bladeContainer').removeAttribute('bind__visible'); - hand.querySelector('.bladeContainer').object3D.visible = true; - hand.querySelector('.bladeContainer').object3D.scale.set(1, 1, 1); - } else if (type === 'punch') { - hand.querySelector('.punch').removeAttribute('bind__visible'); - hand.querySelector('.punch').object3D.visible = true; - hand.querySelector('.punch').object3D.visible = true; - hand.querySelector('.bladeHandle').object3D.visible = false; - } else if (type === 'ride') { - hand.querySelector('.handStar').removeAttribute('bind__visible'); - hand.querySelector('.handStar').object3D.visible = true; - hand.querySelector('.bladeHandle').object3D.visible = false; - } - }); - }, - - onMouseMove: (function () { - const direction = new THREE.Vector3(); - const mouse = new THREE.Vector2(); - const cameraPos = new THREE.Vector3(); - - return function (evt) { - const bounds = this.bounds; - const camera = this.el.sceneEl.camera; - const left = evt.clientX - bounds.left; - const top = evt.clientY - bounds.top; - mouse.x = (left / bounds.width) * 2 - 1; - mouse.y = (-top / bounds.height) * 2 - 1; - - document.getElementById('camera').object3D.getWorldPosition(cameraPos); - direction.set(mouse.x, mouse.y, 0.5).unproject(camera).sub(cameraPos).normalize(); - - const handPos = document.getElementById('rightHand').object3D.position; - const distance = -cameraPos.z / direction.z; - camera.getWorldPosition(handPos).add(direction.multiplyScalar(distance)); - handPos.y += 0.8; - }; - })() -}); diff --git a/src/components/debug-cursor.js b/src/components/debug-cursor.js deleted file mode 100644 index 6cf94b4c0..000000000 --- a/src/components/debug-cursor.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Log cursor events. - */ -AFRAME.registerComponent('debug-cursor', { - init: function () { - if (process.env.NODE_ENV === 'production') { - return; - } - - this.el.addEventListener('mouseenter', evt => { - this.log('mouseenter', evt.detail.intersectedEl, 'green'); - }); - - this.el.addEventListener('mouseleave', evt => { - this.log('mouseleave', evt.detail.intersectedEl, 'red'); - }); - - this.el.addEventListener('click', evt => { - this.log('click', evt.detail.intersectedEl, 'blue'); - }); - }, - - log: function (event, intersectedEl, color) { - if (intersectedEl.id) { - console.log(`%c[${event}] ${intersectedEl.id}`, `color: ${color}`); - } else { - console.log(`%c[${event}]`, `color: ${color}`); - console.log(intersectedEl); - } - } -}); diff --git a/src/components/debug-intro.js b/src/components/debug-intro.js deleted file mode 100644 index dc18ccdc5..000000000 --- a/src/components/debug-intro.js +++ /dev/null @@ -1,8 +0,0 @@ -const SKIP_INTRO = AFRAME.utils.getUrlParameter('skipintro'); - -AFRAME.registerComponent('debug-intro', { - play: function () { - if (!SKIP_INTRO) { return; } - document.getElementById('startButton').emit('click'); - } -}); diff --git a/src/components/debug-song-time.js b/src/components/debug-song-time.js deleted file mode 100644 index 4ac726aeb..000000000 --- a/src/components/debug-song-time.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Emit events from query parameter to state to automatically set up state. - */ -AFRAME.registerComponent('debug-song-time', { - dependencies: ['song'], - - init: function () { - if (!AFRAME.utils.getUrlParameter('debug-song-time')) { return; } - setInterval(() => { - console.log(this.el.components.song.getCurrentTime()); - }, 250); - } -}); diff --git a/src/components/debug-state.js b/src/components/debug-state.js deleted file mode 100644 index 61dabf668..000000000 --- a/src/components/debug-state.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Emit events from query parameter to state to automatically set up state. - */ -AFRAME.registerComponent('debug-state', { - play: function () { - const flags = AFRAME.utils.getUrlParameter('debugstate').trim(); - if (!flags) { return; } - - setTimeout(() => { - flags.split(',').forEach(flag => { - this.el.sceneEl.emit(`debug${flag.trim()}`, null, false); - }); - }, 500); - } -}); diff --git a/src/components/delayed-proxy-event.js b/src/components/delayed-proxy-event.js deleted file mode 100644 index 281abb5e0..000000000 --- a/src/components/delayed-proxy-event.js +++ /dev/null @@ -1,72 +0,0 @@ -/** - * Listen to event and forward to another entity or entities. - */ -AFRAME.registerComponent('delayed-proxy-event', { - schema: { - captureBubbles: {default: false}, - enabled: {default: true}, - event: {type: 'string'}, - from: {type: 'string'}, - to: {type: 'string'}, - as: {type: 'string'}, - bubbles: {default: false}, - delay: {default: 0, type: 'int'} - }, - - multiple: true, - - init: function () { - var data = this.data; - var el = this.el; - var from; - var i; - var to; - var self = this; - - if (data.from) { - if (data.from === 'PARENT') { - from = [el.parentNode]; - } else { - from = document.querySelectorAll(data.from); - } - } else { - if (data.to === 'CHILDREN') { - to = el.querySelectorAll('*'); - } else if (data.to === 'SELF') { - to = [el]; - } else { - to = document.querySelectorAll(data.to); - } - } - - if (data.from) { - for (i = 0; i < from.length; i++) { - this.addEventListenerFrom(from[i]); - } - } else { - el.addEventListener(data.event, function (evt) { - setTimeout(() => { - var data = self.data; - if (!data.enabled) { return; } - if (!data.captureBubbles && evt.target !== el) { return; } - for (i = 0; i < to.length; i++) { - to[i].emit(data.as || data.event, evt['detail'] ? evt.detail : null, data.bubbles); - } - }, data.delay); - }); - } - }, - - addEventListenerFrom: function (fromEl) { - var data = this.data; - var self = this; - fromEl.addEventListener(data.event, function (evt) { - setTimeout(() => { - var data = self.data; - if (!data.enabled) { return; } - if (!data.captureBubbles && evt.target !== fromEl) { return; } - self.el.emit(data.as || data.event, evt['detail'] ? evt.detail : null, false); - }, data.delay); - }); - } -}); diff --git a/src/components/difficulty-background.js b/src/components/difficulty-background.js deleted file mode 100644 index 5d61ec48f..000000000 --- a/src/components/difficulty-background.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Handle difficulty raycastability. - * Needed since state component does not have a bind-toggle that works within a bind-for. - */ -AFRAME.registerComponent('difficulty-background', { - schema: { - enabled: {type: false} - }, - - update: function () { - if (this.data.enabled) { - this.el.setAttribute('raycastable', ''); - } else { - this.el.removeAttribute('raycastable'); - } - } -}); diff --git a/src/components/difficulty-filter.js b/src/components/difficulty-filter.js deleted file mode 100644 index ff2f41519..000000000 --- a/src/components/difficulty-filter.js +++ /dev/null @@ -1,7 +0,0 @@ -AFRAME.registerComponent('difficulty-filter', { - events: { - click: function (evt) { - this.el.sceneEl.emit('difficultyfilter', evt.target.parentNode.dataset.difficultyFilter); - } - } -}); diff --git a/src/components/difficulty-text.js b/src/components/difficulty-text.js deleted file mode 100644 index 0fd81c1ef..000000000 --- a/src/components/difficulty-text.js +++ /dev/null @@ -1,15 +0,0 @@ -// Unique difficulty naming. -AFRAME.registerComponent('difficulty-text', { - schema: { - id: { value: 'Standard-Easy' } - }, - - update: function () { - this.el.setAttribute( - 'text', 'value', - this.data.id - .replace('Standard-', '') - .replace('-', '\n') - ); - } -}); diff --git a/src/components/follow-position.js b/src/components/follow-position.js deleted file mode 100644 index f31a5b295..000000000 --- a/src/components/follow-position.js +++ /dev/null @@ -1,9 +0,0 @@ -AFRAME.registerComponent('follow-position', { - schema: { - target: {type: 'selector'} - }, - - tick: function () { - this.el.object3D.position.copy(this.data.target.object3D.position); - } -}); diff --git a/src/components/follow-z.js b/src/components/follow-z.js deleted file mode 100644 index d85871bfa..000000000 --- a/src/components/follow-z.js +++ /dev/null @@ -1,12 +0,0 @@ -AFRAME.registerComponent('follow-z', { - schema: { - offset: {type: 'vec3'}, - target: {type: 'selector'} - }, - - tick: function () { - if (!this.data.target) { return; } - this.el.object3D.position.copy(this.data.offset); - this.el.object3D.position.z += this.data.target.object3D.position.z; - } -}); diff --git a/src/components/gameover.js b/src/components/gameover.js deleted file mode 100644 index 6a788d961..000000000 --- a/src/components/gameover.js +++ /dev/null @@ -1,42 +0,0 @@ -AFRAME.registerComponent('gameover', { - schema: { - isGameOver: {default: false} - }, - - init: function () { - this.beatContainer = document.getElementById('beatContainer'); - this.gameOverEls = document.querySelectorAll('[animation__gameover]'); - }, - - update: function (oldData) { - var data = this.data; - if (!oldData.isGameOver && this.data.isGameOver) { - this.triggerAnimations(); - this.countDown = 1; - } - if (oldData.isGameOver && !this.data.isGameOver) { - this.reset(); - } - }, - - tick: function (time, delta) { - if (!this.data.isGameOver) { return; } - if (this.countDown >= 0) { - this.beatContainer.object3D.position.z = -Math.pow(1 - this.countDown, 2) * 1.5; - this.countDown -= delta / 1000; - } - }, - - reset: function () { - this.beatContainer.object3D.position.z = 0; - this.el.sceneEl.setAttribute('stage-colors', 'color', 'blue'); - }, - - triggerAnimations: function () { - for (let i = 0; i < this.gameOverEls.length; i++) { - this.gameOverEls[i].emit('gameover', null, false); - } - this.el.emit('textglowoff', null, false); - this.el.emit('bgcolorgameover', null, false); - } -}); diff --git a/src/components/gpu-preloader.js b/src/components/gpu-preloader.js deleted file mode 100644 index 615721029..000000000 --- a/src/components/gpu-preloader.js +++ /dev/null @@ -1,76 +0,0 @@ -let i = 0; - -/** - * Preload textures to GPU that are not visible from the start.. - * three.js renderer by default will not upload textures from non-visible entities. - */ -AFRAME.registerComponent('gpu-preloader', { - dependencies: ['materials'], - - play: function () { - setTimeout(() => { - this.preloadFromSelector('#mainLogo'); - this.preloadFromSelector('#prevArrow'); - this.preloadFromSelector('#stepback'); - this.preloadFromSelector('.difficultyBackground'); - this.preloadFromSelector('.genreIcon'); - this.preloadFromSelector('.merkababloom'); - this.preloadFromSelector('.searchResultBackground'); - this.preloadMaterialsComponentTextures(); - this.preloadKeyboard(); - this.preloadSlice(); - this.preloadEnvMap(); - this.preloadFXs(); - }, 1000); - }, - - // Standard material.map texture got from a dom selector - preloadFromSelector: function (selector) { - const el = document.querySelector(selector); - this.preloadTexture(el.getObject3D('mesh').material.map); - }, - - // List of textures gathered in `materials` system - preloadMaterialsComponentTextures: function () { - const textures = this.el.systems.materials.textureList; - for (var i = 0; i < textures.length; i++) { - this.preloadTexture(textures[i]); - } - }, - - preloadKeyboard: function () { - const keyboard = document.getElementById('keyboard').components['super-keyboard']; - this.preloadTexture(keyboard.kbImg.getObject3D('mesh').material.map); - this.preloadTexture(keyboard.keyColorPlane.getObject3D('mesh').material.map); - }, - - preloadSlice: function () { - const button = document.getElementById('searchPrevPage'); - this.preloadTexture(button.components.slice9.material.map); - }, - - preloadEnvMap: function () { - const wall = document.querySelector('#wallContainer [wall]'); - this.preloadTexture(wall.components.material.material.uniforms.environment.value); - }, - - preloadFXs: function () { - const cutfx = document.querySelector('#rigContainer [mixin~=blueBeatFX]'); - this.preloadTexture(cutfx.components.material.material.uniforms.src.value); - - const minefx = document.querySelector('#rigContainer [mixin~=mineFX]'); - this.preloadTexture(minefx.components.material.material.map); - }, - - preloadTexture: function (texture) { - if (!texture || !texture.image) { - console.warn('[gpu-preloader] Error preloading texture', texture); - return; - } - if (!texture.image.complete) { - console.warn('[gpu-preloader] Error preloading, image not loaded', texture); - return; - } - this.el.renderer.setTexture2D(texture, i++ % 8); - } -}); diff --git a/src/components/gradient-shader.js b/src/components/gradient-shader.js deleted file mode 100644 index 68216c637..000000000 --- a/src/components/gradient-shader.js +++ /dev/null @@ -1,10 +0,0 @@ -AFRAME.registerShader('gradientShader', { - schema: { - color1: {type: 'color', is: 'uniform'}, - color2: {type: 'color', is: 'uniform'} - }, - - vertexShader: require('./shaders/flat.vert.glsl'), - - fragmentShader: require('./shaders/gradient.frag.glsl') -}); diff --git a/src/components/hand-swapper.js b/src/components/hand-swapper.js deleted file mode 100644 index df06db277..000000000 --- a/src/components/hand-swapper.js +++ /dev/null @@ -1,32 +0,0 @@ -const events = [ - 'triggerdown', - 'gripdown', - 'abuttondown', - 'bbuttondown', - 'xbuttondown', - 'ybuttondown', - 'trackpaddown' -]; - -/** - * Swap left or right-handed mode. - */ -AFRAME.registerComponent('hand-swapper', { - schema: { - enabled: {default: false} - }, - - init: function () { - this.swapHand = this.swapHand.bind(this); - events.forEach(event => { - this.el.addEventListener(event, this.swapHand); - }); - }, - - swapHand: function () { - if (!this.data.enabled) { return; } - - // Handled via state. - this.el.sceneEl.emit('activehandswap', null, false); - } -}); diff --git a/src/components/handstar-shader.js b/src/components/handstar-shader.js deleted file mode 100644 index b7c7786e6..000000000 --- a/src/components/handstar-shader.js +++ /dev/null @@ -1,16 +0,0 @@ -import COLORS from '../constants/colors'; - -AFRAME.registerShader('handStar', { - schema: { - colorPrimary: {type: 'color', is: 'uniform', default: COLORS.initial.primary}, - colorSecondary: {type: 'color', is: 'uniform', default: COLORS.initial.secondary}, - colorTertiary: {type: 'color', is: 'uniform', default: COLORS.initial.tertiary}, - pulse: {type: 'number', is: 'uniform', default: 0}, - transparent: {default: true}, - side: {default: 'back'}, - depthTest: {default: false} - }, - - vertexShader: require('./shaders/handstar.vert.glsl'), - fragmentShader: require('./shaders/handstar.frag.glsl') -}); diff --git a/src/components/haptics-wall.js b/src/components/haptics-wall.js deleted file mode 100644 index b1b64f758..000000000 --- a/src/components/haptics-wall.js +++ /dev/null @@ -1,39 +0,0 @@ -/** - * Listen to aabb-collider event for wall haptics. - */ -AFRAME.registerComponent('haptics-wall', { - schema: { - enabled: {default: false} - }, - - init: function () { - const el = this.el; - this.isHittingWall = false; - el.setAttribute('haptics__wall', {dur: 50, force: 0.15}); - - this.checkIfHittingWall = this.checkIfHittingWall.bind(this); - el.addEventListener('mouseenter', this.checkIfHittingWall); - el.addEventListener('mouseleave', this.checkIfHittingWall); - - this.tick = AFRAME.utils.throttleTick(this.tick.bind(this), 50); - }, - - /** - * On raycaster event, check if we are still hitting a wall. - */ - checkIfHittingWall: function () { - const intersectedEls = this.el.components.raycaster__game.intersectedEls; - this.isHittingWall = false; - for (let i = 0; i < intersectedEls.length; i++) { - if (intersectedEls[i].components.wall) { - this.isHittingWall = true; - return; - } - } - }, - - tick: function () { - if (!this.data.enabled || !this.isHittingWall) { return; } - this.el.components.haptics__wall.pulse(); - } -}); diff --git a/src/components/haptics-weapon.js b/src/components/haptics-weapon.js deleted file mode 100644 index 18e8e553e..000000000 --- a/src/components/haptics-weapon.js +++ /dev/null @@ -1,39 +0,0 @@ -/** - * Haptics when weapons collide. - */ -AFRAME.registerComponent('haptics-weapons', { - schema: { - enabled: {default: false} - }, - - init: function () { - const el = this.el; - - this.isColliding = false; - this.tick = AFRAME.utils.throttleTick(this.tick.bind(this), 100); - - el.setAttribute('haptics__weapon', {dur: 100, force: 0.075}); - - el.addEventListener('mouseenter', evt => { - if (!evt.detail || !evt.detail.intersectedEl || !this.data.enabled) { return; } - - const intersectedEl = evt.detail.intersectedEl; - if (!intersectedEl.classList.contains('blade') || intersectedEl === el) { - this.isColliding = false; - return; - } - - this.isColliding = true; - this.el.components.haptics__weapon.pulse(); - }); - - el.addEventListener('mouseleave', evt => { - this.isColliding = false; - }); - }, - - tick: function () { - if (!this.isColliding || !this.data.enabled) { return; } - this.el.components.haptics__weapon.pulse(); - } -}); diff --git a/src/components/headfist.js b/src/components/headfist.js deleted file mode 100644 index 0eea48b26..000000000 --- a/src/components/headfist.js +++ /dev/null @@ -1,54 +0,0 @@ -const enabled = !!AFRAME.utils.getUrlParameter('headfist'); - -AFRAME.registerComponent('headfist', { - schema: { - hand: {type: 'string'}, - isPlaying: {default: false} - }, - - init: function () { - console.log(`[headfist] ${enabled}`); - if (!enabled) { return; } - this.camera = document.getElementById('camera').object3D; - this.originalParent = this.el.object3D.parent; - }, - - update: function () { - const el = this.el; - - if (!enabled || !this.camera) { return; } - - // Attach hands to head. - if (this.data.isPlaying) { - this.camera.add(el.object3D); - - el.object3D.rotation.set(-5, 0, 0); - el.object3D.position.set( - this.data.hand === 'right' ? 0.175 : -0.175, - 0.15, - -0.2 - ); - - el.components['tracked-controls'].pause(); - if (el.components['tracked-controls-webvr']) { - el.components['tracked-controls-webvr'].pause(); - } - if (el.components['tracked-controls-webxr']) { - el.components['tracked-controls-webxr'].pause(); - } - return; - } - - // Add hands back. - if (el.object3D.parent !== this.originalParent) { - console.log(`[headfist] Detach.`); - this.originalParent.add(el.object3D); - if (el.components['tracked-controls-webvr']) { - el.components['tracked-controls-webvr'].play(); - } - if (el.components['tracked-controls-webxr']) { - el.components['tracked-controls-webxr'].play(); - } - } - } -}); diff --git a/src/components/history.js b/src/components/history.js deleted file mode 100644 index 8fbb3c18f..000000000 --- a/src/components/history.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Update window title and history. - */ -AFRAME.registerComponent('history', { - schema: { - challengeId: {type: 'string'}, - songName: {type: 'string'}, - songSubName: {type: 'string'} - }, - - update: function () { - const data = this.data; - history.pushState( - '', - data.songName, - updateQueryParam(window.location.href, 'challenge', data.challengeId) - ); - document.title = `Super Saber - ${data.songName}`; - } -}); diff --git a/src/components/intro-song.js b/src/components/intro-song.js deleted file mode 100644 index e62774ac5..000000000 --- a/src/components/intro-song.js +++ /dev/null @@ -1,47 +0,0 @@ -AFRAME.registerComponent('intro-song', { - schema: { - isPlaying: {default: true}, - isSearching: {default: false} - }, - - init: function () { - this.analyserEl = document.getElementById('audioAnalyser'); - this.audio = document.getElementById('introSong'); - this.timeout = null; - }, - - update: function (oldData) { - const audio = this.audio; - - if (!this.el.sceneEl.isPlaying) { return; } - - if (!oldData.isSearching && this.data.isSearching) { return; } - - // Play. - if (!oldData.isPlaying && this.data.isPlaying) { - this.analyserEl.components.audioanalyser.resumeContext(); - this.analyserEl.setAttribute('audioanalyser', 'src', audio); - this.fadeInAudio(); - } - - // Pause. - if (oldData.isPlaying && !this.data.isPlaying) { audio.pause(); } - }, - - pause: function () { - this.audio.pause(); - }, - - play: function () { - this.fadeInAudio(); - }, - - fadeInAudio: function () { - if (AFRAME.utils.getUrlParameter('mute')) { return; } - const context = this.analyserEl.components.audioanalyser.context; - const gainNode = this.analyserEl.components.audioanalyser.gainNode; - gainNode.gain.setValueAtTime(0, context.currentTime); - this.audio.play(); - gainNode.gain.linearRampToValueAtTime(0.5, context.currentTime + 0.5); - } -}); diff --git a/src/components/keyboard-raycastable.js b/src/components/keyboard-raycastable.js deleted file mode 100644 index 9a39e8519..000000000 --- a/src/components/keyboard-raycastable.js +++ /dev/null @@ -1,12 +0,0 @@ -AFRAME.registerComponent('keyboard-raycastable', { - dependencies: ['super-keyboard'], - - schema: { - condition: {default: ''} - }, - - play: function () { - this.el.components['super-keyboard'].kbImg.setAttribute('bind-toggle__raycastable', - this.data.condition); - } -}); diff --git a/src/components/leaderboard.js b/src/components/leaderboard.js deleted file mode 100644 index 86a3e998d..000000000 --- a/src/components/leaderboard.js +++ /dev/null @@ -1,159 +0,0 @@ -const firebase = require('firebase/app'); -const pr = require('profane-words'); -require('firebase/firestore'); - -const NUM_SCORES_DISPLAYED = 10; -const ba = /(fuc)|(ass)|(nig)|(shit)|(retard)/gi; - -// TODO! Support beatmapCharacteristic in here - -/** - * High score with Firebase cloud store. - * Index: challengeId ASC difficulty ASC score DESC time ASC - */ -AFRAME.registerComponent('leaderboard', { - schema: { - apiKey: {type: 'string'}, - authDomain: {type: 'string'}, - databaseURL: {type: 'string'}, - projectId: {type: 'string'}, - storageBucket: {type: 'string'}, - messagingSenderId: {type: 'string'}, - - challengeId: {default: ''}, - difficulty: {default: ''}, - beatmapCharacteristic: { default: '' }, - inVR: {default: false}, - gameMode: {type: 'string'}, - menuSelectedChallengeId: {default: ''}, - isVictory: {default: false} - }, - - init: function () { - this.qualifyingIndex = undefined; - this.scores = []; - this.eventDetail = {scores: this.scores}; - this.addEventDetail = {scoreData: undefined, index: undefined}; - - this.username = localStorage.getItem('moonriderusername') || 'Super Zealot'; - this.el.addEventListener('leaderboardusername', evt => { - this.username = evt.detail.value; - localStorage.setItem('moonriderusername', this.username); - }); - this.el.addEventListener('leaderboardsubmit', this.addScore.bind(this)); - }, - - update: function (oldData) { - // Initialize Cloud Firestore through Firebase. - if (!firebase.apps.length && this.data.apiKey) { - firebase.initializeApp({ - apiKey: this.data.apiKey, - authDomain: this.data.authDomain, - databaseURL: this.data.databaseURL, - projectId: this.data.projectId, - storageBucket: this.data.storageBucket, - messagingSenderId: this.data.messagingSenderId - }); - this.firestore = firebase.firestore(); - this.firestore.settings({}); - this.db = this.firestore.collection('scores'); - } - - if (!oldData.isVictory && this.data.isVictory) { - this.checkLeaderboardQualify(); - } - - if (this.data.difficulty && oldData.difficulty !== this.data.difficulty) { - this.fetchScores(this.data.menuSelectedChallengeId); - return; - } - - if (this.data.menuSelectedChallengeId && - oldData.menuSelectedChallengeId !== this.data.menuSelectedChallengeId) { - this.fetchScores(this.data.menuSelectedChallengeId); - return; - } - - if (this.data.challengeId && oldData.challengeId !== this.data.challengeId) { - this.fetchScores(this.data.challengeId); - return; - } - }, - - addScore: function () { - const state = this.el.sceneEl.systems.state.state; - - if (!state.isVictory || !state.inVR) { return; } - - const scoreData = { - accuracy: state.score.accuracy, - challengeId: state.challenge.id, - gameMode: this.data.gameMode, - score: state.score.score, - username: this.username, - difficulty: this.data.difficulty || state.challenge.difficulty, - time: new Date() - }; - - if (!pr.includes(this.username.toLowerCase()) && - !this.username.match(ba)) { - this.db.add(scoreData); - } - - this.addEventDetail.scoreData = scoreData; - this.el.emit('leaderboardscoreadded', this.addEventDetail, false); - }, - - fetchScores: function (challengeId) { - if (this.data.gameMode === 'ride') { return; } - - const state = this.el.sceneEl.systems.state.state; - const query = this.db - .where('challengeId', '==', challengeId) - .where( - 'difficulty', '==', - state.menuSelectedChallenge.id - ? state.menuSelectedChallenge.difficulty - : state.challenge.difficulty) - .where('gameMode', '==', this.data.gameMode) - .orderBy('score', 'desc') - .orderBy('time', 'asc') - .limit(10); - query.get().then(snapshot => { - this.eventDetail.challengeId = challengeId; - this.scores.length = 0; - if (!snapshot.empty) { - snapshot.forEach(score => this.scores.push(score.data())); - } - this.el.sceneEl.emit('leaderboard', this.eventDetail, false); - }).catch(e => { - console.error('[firestore]', e); - }); - }, - - /** - * Is high score? - */ - checkLeaderboardQualify: function () { - const state = this.el.sceneEl.systems.state.state; - const score = state.score.score; - - if (AFRAME.utils.getUrlParameter('dot')) { return; } - - // If less than 10, then automatic high score. - if (this.scores.length < NUM_SCORES_DISPLAYED) { - this.qualifyingIndex = this.scores.length; - this.el.sceneEl.emit('leaderboardqualify', this.scores.length, false); - return; - } - - // Check if overtook any existing high score. - for (let i = 0; i < this.scores.length; i++) { - if (score > this.scores[i].score) { - this.qualifyingIndex = i; - this.el.sceneEl.emit('leaderboardqualify', i, false); - return; - } - } - } -}); diff --git a/src/components/materials.js b/src/components/materials.js deleted file mode 100644 index c646239bd..000000000 --- a/src/components/materials.js +++ /dev/null @@ -1,722 +0,0 @@ -const COLORS = require('../constants/colors'); - -const auxColor = new THREE.Color(); - -AFRAME.registerSystem('materials', { - schema: {}, - - init: function () { - this.curve = null; - this.panelMaterials = []; - - const scheme = localStorage.getItem('colorScheme') || 'default'; - this.scheme = COLORS.schemes[scheme]; - - // Collect references to textures for gpu-preloader. - this.textureList = []; - - // Generated textures. - this.beatsCanvas = document.createElement('canvas'); - this.beatsTexture = new THREE.CanvasTexture(this.beatsCanvas); - this.generateBeatsTexture(); - this.textureList.push(this.beatsTexture); - - this.envmapCanvas = document.createElement('canvas'); - this.envmapTexture = new THREE.CanvasTexture(this.envmapCanvas); - this.generateEnvmapTexture(); - this.textureList.push(this.envmapTexture); - - /* - this.cutFxCanvas = document.createElement('canvas') - this.cutFxTexture = new THREE.CanvasTexture(this.cutFxCanvas) - this.generateCutFxTexture() - this.textureList.push(this.cutFxTexture) - */ - - this.fistsCanvas = document.createElement('canvas'); - this.fistsTexture = new THREE.CanvasTexture(this.fistsCanvas); - this.generateFistsTexture(); - this.textureList.push(this.fistsTexture); - - if (document.readyState === 'loading') { - document.addEventListener('DOMContentLoaded', () => { - this.createMaterials(); - }); - } else { - this.createMaterials(); - } - }, - - play: function () { - this.setColorScheme(); - }, - - tick: function (t, dt) { - this.aurora.uniforms.time.value = t; - if (this.home.animate) { this.home.uniforms.time.value = t; } - this.leftFistWeapon.uniforms.time.value = t; - this.leftWeapon.uniforms.time.value = t; - this.rightFistWeapon.uniforms.time.value = t; - this.rightWeapon.uniforms.time.value = t; - this.rings.uniforms.time.value = t; - this.tube.uniforms.time.value = t; - }, - - createMaterials: function () { - const scheme = this.scheme; - - this.tunnel = new THREE.ShaderMaterial({ - vertexShader: require('./shaders/tunnel.vert.glsl'), - fragmentShader: require('./shaders/tunnel.frag.glsl'), - uniforms: { - fogColor: {value: new THREE.Color(scheme.primary)}, - color1: {value: new THREE.Color(scheme.primary)}, - color2: {value: new THREE.Color(scheme.secondary)}, - color3: {value: new THREE.Color(scheme.tertiary)}, - scale: {value: 1.0} - }, - transparent: true - }); - - this.merkaba = new THREE.MeshBasicMaterial({ - color: new THREE.Color(scheme.primary) - }); - - this.backglow = new THREE.MeshBasicMaterial({ - transparent: true, - map: new THREE.TextureLoader().load(document.getElementById('backGlowImg').src), - color: new THREE.Color(scheme.primary) - }); - this.textureList.push(this.backglow.map); - - this.aurora = new THREE.ShaderMaterial({ - vertexShader: require('./shaders/aurora.vert.glsl'), - fragmentShader: require('./shaders/aurora.frag.glsl'), - uniforms: { - colorPrimary: {value: new THREE.Color(scheme.primary)}, - colorSecondary: {value: new THREE.Color(scheme.secondary)}, - time: {value: 0} - }, - transparent: true - }); - - this.rings = new THREE.ShaderMaterial({ - vertexShader: require('./shaders/rings.vert.glsl'), - fragmentShader: require('./shaders/rings.frag.glsl'), - uniforms: { - colorPrimary: {value: new THREE.Color(scheme.primary)}, - colorSecondary: {value: new THREE.Color(scheme.secondary)}, - colorTertiary: {value: new THREE.Color(scheme.tertiary)}, - time: {value: 0} - }, - transparent: true, - depthWrite: false - }); - - this.moon = new THREE.ShaderMaterial({ - vertexShader: require('./shaders/moon.vert.glsl'), - fragmentShader: require('./shaders/moon.frag.glsl'), - uniforms: { - map: {value: new THREE.TextureLoader().load(document.getElementById('moonImg').src)}, - tint: {value: new THREE.Color(scheme.secondarybright)} - }, - transparent: true - }); - this.textureList.push(this.moon.uniforms.map.value); - - this.home = new THREE.ShaderMaterial({ - vertexShader: require('./shaders/home.vert.glsl'), - fragmentShader: require('./shaders/home.frag.glsl'), - uniforms: { - color1: {value: new THREE.Color(scheme.primary)}, - color2: {value: new THREE.Color(scheme.secondary)}, - color3: {value: new THREE.Color(scheme.tertiary)}, - src: {value: new THREE.TextureLoader().load(document.getElementById('homeShadowImg').src)}, - time: {value: 0} - }, - transparent: true - }); - this.textureList.push(this.home.uniforms.src.value); - - const weaponTexture = new THREE.TextureLoader().load( - document.getElementById('weaponImg').src); - weaponTexture.wrapS = THREE.RepeatWrapping; - weaponTexture.wrapT = THREE.RepeatWrapping; - weaponTexture.repeat.set(2, 2); - weaponTexture.magFilter = THREE.NearestFilter; - this.textureList.push(weaponTexture); - - this.rightWeapon = new THREE.ShaderMaterial({ - vertexShader: require('./shaders/weapon.vert.glsl'), - fragmentShader: require('./shaders/weapon.frag.glsl'), - uniforms: { - src: {value: weaponTexture}, - color: {value: new THREE.Color(scheme.secondary)}, - thickness: {value: 1.6}, - time: {value: 0} - }, - transparent: true, - blending: THREE.AdditiveBlending - }); - - this.leftWeapon = new THREE.ShaderMaterial({ - vertexShader: require('./shaders/weapon.vert.glsl'), - fragmentShader: require('./shaders/weapon.frag.glsl'), - uniforms: { - src: {value: weaponTexture}, - color: {value: new THREE.Color(scheme.primary)}, - thickness: {value: 1.6}, - time: {value: 0} - }, - transparent: true, - blending: THREE.AdditiveBlending - }); - - this.leftFistWeapon = new THREE.ShaderMaterial({ - vertexShader: require('./shaders/flat.vert.glsl'), - fragmentShader: require('./shaders/fistWeapon.frag.glsl'), - uniforms: { - src: {value: weaponTexture}, - color: {value: new THREE.Color(scheme.primary)}, - time: {value: 0} - }, - side: THREE.DoubleSide, - transparent: true, - blending: THREE.AdditiveBlending - }); - - this.rightFistWeapon = new THREE.ShaderMaterial({ - vertexShader: require('./shaders/flat.vert.glsl'), - fragmentShader: require('./shaders/fistWeapon.frag.glsl'), - uniforms: { - src: {value: weaponTexture}, - color: {value: new THREE.Color(scheme.secondary)}, - time: {value: 0} - }, - side: THREE.DoubleSide, - transparent: true, - blending: THREE.AdditiveBlending - }); - - const weaponHandleEnvTexture = new THREE.TextureLoader().load( - document.getElementById('weaponImg').src); - const weaponHandleTexture = new THREE.TextureLoader().load( - document.getElementById('weaponHandleImg').src); - weaponHandleEnvTexture.mapping = THREE.SphericalReflectionMapping; - this.textureList.push(weaponHandleEnvTexture); - this.textureList.push(weaponHandleTexture); - - this.leftWeaponHandle = new THREE.MeshStandardMaterial({ - roughness: 0.4, - metalness: 0.5, - color: new THREE.Color(scheme.primary), - map: weaponHandleTexture, - envMap: weaponHandleEnvTexture - }); - this.rightWeaponHandle = new THREE.MeshStandardMaterial({ - roughness: 0.4, - metalness: 0.5, - color: new THREE.Color(scheme.secondary), - map: weaponHandleTexture, - envMap: weaponHandleEnvTexture - }); - - const fistEnvTexture = new THREE.TextureLoader().load(document.getElementById('weapon2Img').src); - fistEnvTexture.mapping = THREE.SphericalReflectionMapping; - this.leftFist = new THREE.MeshStandardMaterial({ - roughness: 0.3, - metalness: 0.8, - map: this.fistsTexture, - envMap: fistEnvTexture, - transparent: true - }); - this.rightFist = new THREE.MeshStandardMaterial({ - roughness: 0.3, - metalness: 0.8, - map: this.fistsTexture, - envMap: fistEnvTexture, - transparent: true - }); - - this.beat = new THREE.MeshLambertMaterial({map: this.beatsTexture, transparent: true}); - this.blueBeatPieces = new THREE.MeshLambertMaterial({ - map: this.beatsTexture, - color: scheme.secondary, - emissive: scheme.secondary, - emissiveIntensity: 0.2 - }); - this.redBeatPieces = new THREE.MeshLambertMaterial({ - map: this.beatsTexture, - color: scheme.primary, - emissive: scheme.primary, - emissiveIntensity: 0.2 - }); - this.minePieces = new THREE.MeshLambertMaterial({ - color: scheme.tertiary, - emissive: scheme.tertiary, - emissiveIntensity: 0.2 - }); - - const glowTexture = new THREE.TextureLoader().load( - document.getElementById('backGlowImg').src); - this.redBeatGlow = new THREE.MeshBasicMaterial({ - color: scheme.primary, - map: glowTexture, - blending: THREE.AdditiveBlending, - transparent: true - }); - this.blueBeatGlow = new THREE.MeshBasicMaterial({ - color: scheme.secondary, - map: glowTexture, - blending: THREE.AdditiveBlending, - transparent: true - }); - this.textureList.push(glowTexture); - - this.stars = new THREE.PointsMaterial({ - size: 1, - map: new THREE.TextureLoader().load(document.getElementById('starImg').src), - blending: THREE.AdditiveBlending, - transparent: true, - color: new THREE.Color(scheme.secondary) - }); - this.textureList.push(this.stars.map); - - const sideglowTexture = new THREE.TextureLoader().load( - document.getElementById('sideglowImg').src); - this.textureList.push(sideglowTexture); - this.leftsideglow = new THREE.MeshBasicMaterial({ - map: sideglowTexture, - transparent: true, - blending: THREE.AdditiveBlending, - depthTest: false, - side: THREE.BackSide, - color: new THREE.Color(COLORS.OFF) - }); - - this.rightsideglow = new THREE.MeshBasicMaterial({ - map: sideglowTexture, - transparent: true, - blending: THREE.AdditiveBlending, - depthTest: false, - color: new THREE.Color(COLORS.OFF) - }); - - const plumeTexture = new THREE.TextureLoader().load(document.getElementById('plumeImg').src); - plumeTexture.minFilter = THREE.LinearFilter; - this.arrowBluePlume = new THREE.ShaderMaterial({ - vertexShader: require('./shaders/plume.vert.glsl'), - fragmentShader: require('./shaders/plume.frag.glsl'), - uniforms: { - color: {value: new THREE.Color(scheme.secondary)}, - src: {value: plumeTexture} - }, - transparent: true, - depthTest: false - }); - - this.arrowRedPlume = new THREE.ShaderMaterial({ - vertexShader: require('./shaders/plume.vert.glsl'), - fragmentShader: require('./shaders/plume.frag.glsl'), - uniforms: { - color: {value: new THREE.Color(scheme.primary)}, - src: {value: plumeTexture} - }, - transparent: true, - depthTest: false - }); - - this.dotBluePlume = new THREE.ShaderMaterial({ - vertexShader: require('./shaders/plume.vert.glsl'), - fragmentShader: require('./shaders/plume.frag.glsl'), - uniforms: { - color: {value: new THREE.Color(scheme.secondary)}, - src: {value: plumeTexture} - }, - transparent: true, - depthTest: false - }); - - this.dotRedPlume = new THREE.ShaderMaterial({ - vertexShader: require('./shaders/plume.vert.glsl'), - fragmentShader: require('./shaders/plume.frag.glsl'), - uniforms: { - color: {value: new THREE.Color(scheme.primary)}, - src: {value: plumeTexture} - }, - transparent: true, - depthTest: false - }); - - this.minePlume = new THREE.ShaderMaterial({ - vertexShader: require('./shaders/plume.vert.glsl'), - fragmentShader: require('./shaders/plume.frag.glsl'), - uniforms: { - color: {value: new THREE.Color(scheme.tertiary)}, - src: {value: plumeTexture} - }, - transparent: true, - depthTest: false - }); - - const tubeTexture = new THREE.TextureLoader().load(document.getElementById('tubeImg').src); - const tubeColorTexture = new THREE.TextureLoader().load(document.getElementById('tubeColorImg').src); - tubeTexture.generateMipmaps = false; - tubeTexture.minFilter = THREE.LinearFilter; - tubeColorTexture.generateMipmaps = false; - tubeColorTexture.minFilter = THREE.LinearFilter; - this.tube = new THREE.ShaderMaterial({ - vertexShader: require('./shaders/tube.vert.glsl'), - fragmentShader: require('./shaders/tube.frag.glsl'), - uniforms: { - time: {value: 0}, - opacity: {value: 0}, - src: {value: tubeTexture}, - color: {value: tubeColorTexture} - }, - transparent: true, - depthTest: false, - side: THREE.BackSide - }); - - const trailTexture = new THREE.TextureLoader().load(document.getElementById('handStarTrailImg').src); - trailTexture.generateMipmaps = false; - trailTexture.minFilter = THREE.LinearFilter; - this.handStarTrail = new THREE.ShaderMaterial({ - vertexShader: require('./shaders/handstartrail.vert.glsl'), - fragmentShader: require('./shaders/handstartrail.frag.glsl'), - uniforms: { - colorPrimary: {value: new THREE.Color(scheme.primary)}, - colorSecondary: {value: new THREE.Color(scheme.secondary)}, - colorTertiary: {value: new THREE.Color(scheme.tertiary)}, - pulse: {value: 0}, - src: {value: trailTexture} - }, - transparent: true, - depthTest: false, - blending: THREE.AdditiveBlending, - side: THREE.DoubleSide - }); - }, - - /** - * Change color scheme as commanded by the optionsMenu.html - * (materials-color-menu component). - * - * @param {string} color - ID or name of the color scheme. - */ - setColorScheme: function (colorSchemeName) { - const scene = this.el.sceneEl; - const scheme = this.scheme = COLORS.schemes[colorSchemeName] || COLORS.schemes.default; - - set(this.arrowBluePlume, 'color', scheme.secondary); - set(this.arrowRedPlume, 'color', scheme.primary); - set(this.aurora, 'colorPrimary', scheme.primary); - set(this.aurora, 'colorSecondary', scheme.secondary); - set(this.backglow, 'color', scheme.primary); - set(this.blueBeatGlow, 'color', scheme.secondary); - set(this.blueBeatGlow, 'color', scheme.secondary); - set(this.blueBeatPieces, 'color', scheme.secondary); - set(this.blueBeatPieces, 'emissive', scheme.secondary); - set(this.dotBluePlume, 'color', scheme.secondary); - set(this.dotRedPlume, 'color', scheme.primary); - set(this.handStarTrail, 'colorPrimary', scheme.primary); - set(this.handStarTrail, 'colorSecondary', scheme.secondary); - set(this.handStarTrail, 'colorTertiary', scheme.tertiary); - set(this.home, 'color1', scheme.primary); - set(this.home, 'color2', scheme.secondary); - set(this.home, 'color3', scheme.tertiary); - set(this.leftFist, 'color', scheme.primarybright); - set(this.leftFistWeapon, 'color', scheme.primary); - set(this.leftWeapon, 'color', scheme.primary); - set(this.leftWeaponHandle, 'color', scheme.primary); - set(this.merkaba, 'color', scheme.primary); - set(this.minePieces, 'color', scheme.tertiary); - set(this.minePieces, 'emissive', scheme.tertiary); - set(this.minePlume, 'color', scheme.tertiary); - set(this.moon, 'tint', scheme.secondarybright); - set(this.redBeatGlow, 'color', scheme.primary); - set(this.redBeatGlow, 'color', scheme.primary); - set(this.redBeatPieces, 'color', scheme.primary); - set(this.redBeatPieces, 'emissive', scheme.primary); - set(this.rightFist, 'color', scheme.secondarybright); - set(this.rightWeapon, 'color', scheme.secondary); - set(this.rightFistWeapon, 'color', scheme.secondary); - set(this.rightWeaponHandle, 'color', scheme.secondary); - set(this.rings, 'colorPrimary', scheme.primary); - set(this.rings, 'colorSecondary', scheme.secondary); - set(this.rings, 'colorTertiary', scheme.tertiary); - set(this.stars, 'color', scheme.secondary); - set(this.tunnel, 'fogColor', scheme.primary); - set(this.tunnel, 'color1', scheme.primary); - set(this.tunnel, 'color2', scheme.secondary); - set(this.tunnel, 'color3', scheme.tertiary); - - this.generateBeatsTexture(); - // this.generateCutFxTexture() - this.generateEnvmapTexture(); - this.generateFistsTexture(); - - document.querySelectorAll('a-entity[wall]').forEach(el => { - set(el.getObject3D('mesh').material, 'colorTertiary', scheme.tertiary); - }); - - this.panelMaterials.forEach(material => { - set(material, 'colorPrimary', scheme.primary); - set(material, 'colorSecondary', scheme.secondary); - }); - - set(this.curve, 'fogColor', scheme.primary); - set(this.curve, 'color1', scheme.primary); - set(this.curve, 'color2', scheme.secondary); - }, - - generateBeatsTexture: function () { - const scheme = this.scheme; - const primary = new THREE.Color(scheme.primary); - const secondary = new THREE.Color(scheme.secondary); - const tertiary = new THREE.Color(scheme.tertiary); - - const canvas = this.beatsCanvas; - const ctx = canvas.getContext('2d'); - canvas.width = 512; - canvas.height = 32; - - canvasFill(ctx, tertiary.getStyle(), 0, 0, 128, 6); - canvasFill(ctx, '#000', 128, 0, 128, 6); - canvasFill(ctx, secondary.getStyle(), 256, 0, 128, 6); - canvasFill(ctx, primary.getStyle(), 384, 0, 105, 6); - canvasFill(ctx, '#FFF', 489, 0, 23, 6); - - canvasGradient(ctx, '#000000', secondary.getStyle(), 0, 6, 512, 4); - canvasGradient(ctx, '#000', primary.getStyle(), 0, 10, 512, 5); - canvasGradient(ctx, '#000', tertiary.getStyle(), 0, 15, 512, 4); - - canvasGradient( - ctx, - `rgba(${secondary.r}, ${secondary.g}, ${secondary.b}, 0)`, - secondary.getStyle(), 0, 19, 512, 5); - canvasGradient( - ctx, - `rgba(${primary.r}, ${primary.g}, ${primary.b}, 0)`, - primary.getStyle(), 0, 24, 512, 4); - canvasGradient( - ctx, - `rgba(${tertiary.r}, ${tertiary.g}, ${tertiary.b}, 0)`, - tertiary.getStyle(), 0, 28, 512, 4); - - const texture = this.beatsTexture; - texture.generateMipmaps = false; - texture.magFilter = THREE.LinearFilter; - texture.minFilter = THREE.LinearFilter; - texture.needsUpdate = true; - return texture; - }, - - generateFistsTexture: function () { - const scheme = this.scheme; - const primary = new THREE.Color(scheme.primarybright); - const secondary = new THREE.Color(scheme.secondarybright); - - const canvas = this.fistsCanvas; - const ctx = canvas.getContext('2d'); - canvas.width = 8; - canvas.height = 128; - - canvasGradient( - ctx, primary.getStyle(), - `rgba(${primary.r}, ${primary.g}, ${primary.b}, 0)`, - 0, 0, 4, 128); - canvasGradient( - ctx, secondary.getStyle(), - `rgba(${secondary.r}, ${secondary.g}, ${secondary.b}, 0)`, - 4, 0, 4, 128); - - this.fistsTexture.needsUpdate = true; - return this.fistsTexture; - }, - - generateEnvmapTexture: function () { - const scheme = this.scheme; - const primary = new THREE.Color(scheme.primary); - const secondary = new THREE.Color(scheme.secondary); - - const img = document.getElementById('envmapTemplateImg'); - img.addEventListener('load', () => { - const w = img.width; - const h = img.height; - - const canvas = this.envmapCanvas; - canvas.width = w; - canvas.height = h; - - const ctx = canvas.getContext('2d'); - ctx.drawImage(img, 0, 0); - const im = ctx.getImageData(0, 0, w, h); - const imdata = im.data; - - let primaryWeight; - let secondaryWeight; - for (let i = 0; i < imdata.length; i += 4) { - primaryWeight = imdata[i]; - secondaryWeight = imdata[i + 1]; - primaryWeight *= 1 - secondaryWeight / 255.0; - - imdata[i + 0] = Math.floor( - primary.r * primaryWeight + secondary.r * secondaryWeight); - imdata[i + 1] = Math.floor( - primary.g * primaryWeight + secondary.g * secondaryWeight); - imdata[i + 2] = Math.floor( - primary.b * primaryWeight + secondary.b * secondaryWeight); - imdata[i + 3] = 255; - } - - ctx.putImageData(im, 0, 0); - document.getElementById('envmapImg').src = canvas.toDataURL('image/png'); - }); - }, - - /* - generateCutFxTexture: function () { - const scheme = this.scheme - const primary = new THREE.Color(scheme.primary) - const secondary = new THREE.Color(scheme.secondary) - - const img = document.getElementById('cutFxTemplateImg') - img.addEventListener('load', () => { - const w = img.width - const h = img.height - - const canvas = this.cutFxCanvas - canvas.width = w - canvas.height = h - - const ctx = canvas.getContext('2d') - ctx.drawImage(img, 0, 0) - const im = ctx.getImageData(0, 0, w, h) - const imdata = im.data - - let primaryWeight - let secondaryWeight - for (let i = 0; i < imdata.length; i += 4) { - primaryWeight = imdata[i] - secondaryWeight = imdata[i + 1] - primaryWeight *= 1 - secondaryWeight / 255.0 - - imdata[i + 0] = Math.floor( - primary.r * primaryWeight + secondary.r * secondaryWeight) - imdata[i + 1] = Math.floor( - primary.g * primaryWeight + secondary.g * secondaryWeight) - imdata[i + 2] = Math.floor( - primary.b * primaryWeight + secondary.b * secondaryWeight) - imdata[i + 3] = 255 - } - - ctx.putImageData(im, 0, 0) - document.getElementById('cutFxImg').src = canvas.toDataURL('image/png') - }) - }, - */ - - registerCurve: function (material) { - this.curve = material; - }, - - registerPanel: function (material) { - this.panelMaterials.push(material); - } -}); - -AFRAME.registerComponent('materials', { - schema: { - animate: {default: true}, - name: {default: ''}, - recursive: {default: true} - }, - - update: function () { - if (this.data.name === '') { return; } - - this.material = this.system[this.data.name]; - if (!this.material) { - console.warn(`[materials] Unknown material: ${this.data.name}`); - return; - } - - let mesh = this.el.getObject3D('mesh'); - if (!mesh) { - this.el.addEventListener('object3dset', evt => { - if (evt.detail.type !== 'mesh') { return; } - mesh = this.el.getObject3D('mesh'); - if (mesh) { this.applyMaterial(mesh); } - }); - } else { - this.applyMaterial(mesh); - } - - this.material.animate = this.data.animate; - }, - - applyMaterial: function (obj) { - if (obj.detail) { obj = obj.detail.model; } - if (this.data.recursive) { - obj.traverse(o => { - if (o.type === 'Mesh') { - o.material = this.material; - } - }); - } else { - obj.material = this.material; - } - } -}); - -AFRAME.registerComponent('materials-color-menu', { - play: function () { - this.text = document.getElementById('colorName'); - }, - - events: { - mouseenter: function (evt) { - this.text.setAttribute('text', 'value', evt.target.dataset.colorName); - }, - - mouseleave: function (evt) { - this.text.setAttribute('text', 'value', ''); - }, - - click: function (evt) { - this.el.sceneEl.systems.materials.setColorScheme(evt.target.dataset.colorScheme); - this.el.sceneEl.emit('colorschemechange', evt.target.dataset.colorScheme, false); - } - } -}); - -function set (mat, name, color) { - auxColor.set(color); - if (mat.uniforms) { - mat.uniforms[name].value.x = auxColor.r; - mat.uniforms[name].value.y = auxColor.g; - mat.uniforms[name].value.z = auxColor.b; - } else { - mat[name].set(color); - } -} - -function canvasFill (ctx, col, x, y, width, height) { - ctx.fillStyle = col; - ctx.fillRect(x, y, width, height); -} - -function canvasGradient (ctx, col1, col2, x, y, width, height) { - let gradient; - if (width > height) { - gradient = ctx.createLinearGradient(0, 0, width, 0); - } else { - gradient = ctx.createLinearGradient(0, 0, 0, height); - } - gradient.addColorStop(0, col1); - gradient.addColorStop(1, col2); - ctx.fillStyle = gradient; - ctx.fillRect(x, y, width, height); -} diff --git a/src/components/menu-controls.js b/src/components/menu-controls.js deleted file mode 100644 index 6c7bc98dd..000000000 --- a/src/components/menu-controls.js +++ /dev/null @@ -1,31 +0,0 @@ -var hoveredIndex; -var keyEventsRegistered = false; -var results = null; - -const PER_PAGE = 6; - -/** - * Use menu with thumb. - */ -AFRAME.registerComponent('menu-controls', { - schema: { - enabled: {default: true} - }, - - events: { - thumbdownstart: function () { - if (!this.data.enabled) { return; } - this.el.sceneEl.emit('searchnextpage', null, false); - }, - - thumbleftstart: function () { - if (!this.data.enabled) { return; } - this.el.sceneEl.emit('menuchallengeunselect', null, false); - }, - - thumbupstart: function () { - if (!this.data.enabled) { return; } - this.el.sceneEl.emit('searchprevpage', null, false); - } - } -}); diff --git a/src/components/menu-difficulty-select.js b/src/components/menu-difficulty-select.js deleted file mode 100644 index 0d5cbdb59..000000000 --- a/src/components/menu-difficulty-select.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Select difficulty. - */ -AFRAME.registerComponent('menu-difficulty-select', { - init: function () { - this.el.sceneEl.addEventListener('menuchallengeselect', () => { - this.el.object3D.visible = false; - setTimeout(() => { - this.el.components.layout.update(); - this.el.object3D.visible = true; - }, 150); - }); - }, - - events: { - click: function (evt) { - this.el.sceneEl.emit( - 'menudifficultyselect', - evt.target.closest('.difficultyOption').dataset.difficulty, - false); - } - } -}); diff --git a/src/components/menu-genre.js b/src/components/menu-genre.js deleted file mode 100644 index bf3e4ca32..000000000 --- a/src/components/menu-genre.js +++ /dev/null @@ -1,7 +0,0 @@ -AFRAME.registerComponent('menu-genre', { - init: function () { - this.el.addEventListener('click', evt => { - this.el.sceneEl.emit('genreselect', evt.target.closest('.genre').dataset.bindForKey); - }); - } -}); diff --git a/src/components/menu-midsection.js b/src/components/menu-midsection.js deleted file mode 100644 index a03de41f6..000000000 --- a/src/components/menu-midsection.js +++ /dev/null @@ -1,18 +0,0 @@ -AFRAME.registerComponent('menu-midsection', { - schema: { - active: {default: false}, - selectedChallenge: {default: ''} - }, - - update: function (oldData) { - if (oldData.active && !this.data.active) { - this.el.emit('hidedifficultysection', null, false); - } - - if ((!oldData.active && this.data.active) || - (this.data.selectedChallenge && - oldData.selectedChallenge !== this.data.selectedChallenge)) { - this.el.emit('showdifficultysection', null, false); - } - } -}); diff --git a/src/components/menu-mode.js b/src/components/menu-mode.js deleted file mode 100644 index 316b9b335..000000000 --- a/src/components/menu-mode.js +++ /dev/null @@ -1,77 +0,0 @@ -const COLORS = require('../constants/colors.js'); - -const iconPositions = { - classicvr: -0.6, - punchvr: 0.87, - ride2d: 0.87, - ridevr: 0.15, - viewer2d: 0.15 -}; - -const modeMap = { - classicvr: 'classic', - punchvr: 'punch', - ride2d: 'ride', - ridevr: 'ride', - viewer2d: 'viewer' -}; - -AFRAME.registerComponent('menu-mode', { - schema: { - colorScheme: {default: 'default'}, - hasVR: {default: false} - }, - - init: function () { - this.el.addEventListener('click', evt => { - const item = evt.target.closest('[data-mode]'); - const mode = item.dataset.mode; - const name = item.dataset.name; - this.el.sceneEl.emit('gamemode', mode, false); - if (this.data.hasVR) { - localStorage.setItem('gameMode', name); - } - this.setModeOption(name); - }); - }, - - update: function () { - if (this.data.hasVR) { - this.setModeOption(localStorage.getItem('gameMode') || 'punchvr'); - this.el.sceneEl.emit('gamemode', modeMap[localStorage.getItem('gameMode') || 'punchvr']); - } else { - this.setModeOption('ride2d'); - } - }, - - setModeOption: function (name) { - const modeEls = this.el.querySelectorAll('.modeItem'); - document.getElementById('modeIcon').object3D.position.y = iconPositions[name]; - - for (let i = 0; i < modeEls.length; i++) { - const modeEl = modeEls[i]; - const selected = modeEl.dataset.name === name; - - modeEl.emit(selected ? 'select' : 'deselect', null, false); - - const background = modeEl.querySelector('.modeBackground'); - background.emit(selected ? 'select' : 'deselect', null, false); - background.setAttribute( - 'mixin', - 'modeBackgroundSelect' + (selected ? '' : ' modeBackgroundHover')); - - const thumb = modeEl.querySelector('.modeThumb'); - thumb.emit(selected ? 'select' : 'deselect', null, false); - - const title = modeEl.querySelector('.modeTitle'); - title.setAttribute( - 'text', 'color', - selected ? COLORS.WHITE : COLORS.schemes[this.data.colorScheme].secondary); - - const instructions = modeEl.querySelector('.modeInstructions'); - instructions.setAttribute( - 'text', 'color', - selected ? COLORS.WHITE : COLORS.schemes[this.data.colorScheme].primary); - } - } -}); diff --git a/src/components/menu-playlist-button.js b/src/components/menu-playlist-button.js deleted file mode 100644 index 98465a0c8..000000000 --- a/src/components/menu-playlist-button.js +++ /dev/null @@ -1,44 +0,0 @@ -/** - * Pulse playlist button on favorite. - */ -AFRAME.registerComponent('menu-playlist-button', { - schema: { - isFavorited: {default: false}, - selectedChallenge: {default: ''} - }, - - init: function () { - const el = this.el; - - el.setAttribute('animation__scaleup', { - property: 'scale', - from: '1 1 1', - to: '1.2 1.2 1.2', - dur: 800, - autoplay: false, - easing: 'easeInOutElastic' - }); - - el.setAttribute('animation__scaledown', { - property: 'scale', - from: '1.2 1.2 1.2', - to: '1 1 1', - dur: 100, - autoplay: false, - easing: 'easeInOutCubic' - }); - }, - - update: function (oldData) { - // Play animation when song is favorited. - if (!oldData.isFavorited && this.data.isFavorited && - oldData.selectedChallenge === this.data.selectedChallenge) { - this.el.object3D.position.z = 0.01; - this.el.components['animation__scaleup'].beginAnimation(); - setTimeout(() => { - this.el.components['animation__scaledown'].beginAnimation(); - this.el.object3D.position.z = 0; - }, 800); - } - } -}); diff --git a/src/components/menu-playlist.js b/src/components/menu-playlist.js deleted file mode 100644 index 519f6150a..000000000 --- a/src/components/menu-playlist.js +++ /dev/null @@ -1,12 +0,0 @@ -AFRAME.registerComponent('menu-playlist', { - init: function () { - this.eventDetail = {id: '', title: ''}; - - this.el.addEventListener('click', evt => { - const item = evt.target.closest('.playlist'); - this.eventDetail.id = item.dataset.playlist; - this.eventDetail.title = item.dataset.title; - this.el.sceneEl.emit('playlistselect', this.eventDetail); - }); - } -}); diff --git a/src/components/menu-selected-challenge-image.js b/src/components/menu-selected-challenge-image.js deleted file mode 100644 index 9c73f4d56..000000000 --- a/src/components/menu-selected-challenge-image.js +++ /dev/null @@ -1,12 +0,0 @@ -AFRAME.registerComponent('menu-selected-challenge-image', { - schema: { - coverURL: { type: 'string' } - }, - - update: function () { - const el = this.el; - el.setAttribute( - 'material', 'src', - this.data.coverURL); - } -}); diff --git a/src/components/menu-slide-animation.js b/src/components/menu-slide-animation.js deleted file mode 100644 index 15fcd272c..000000000 --- a/src/components/menu-slide-animation.js +++ /dev/null @@ -1,44 +0,0 @@ -AFRAME.registerComponent('menu-slide-animation', { - schema: { - isSearching: {default: false}, - menuSelectedChallengeId: {type: 'string'} - }, - - init: function () { - this.isLeft = false; // Means toleft. - }, - - update: function (oldData) { - const data = this.data; - - if (this.isLeft) { - // Unselect. - if (oldData.menuSelectedChallengeId && !data.menuSelectedChallengeId && - !data.isSearching) { this.rightMenu(); } - // Keyboard close. - if (oldData.isSearching && !data.isSearching && !data.menuSelectedChallengeId) { - this.rightMenu(); - } - return; - } - - if (!this.isLeft) { - // Select. - if (!oldData.menuSelectedChallengeId && data.menuSelectedChallengeId) { this.leftMenu(); } - // Keyboard open. - if (!oldData.isSearching && data.isSearching) { this.leftMenu(); } - } - }, - - rightMenu: function () { - if (!this.isLeft) { return; } - this.el.components.animation__menuright.beginAnimation(); - this.isLeft = false; - }, - - leftMenu: function () { - if (this.isLeft) { return; } - this.el.components.animation__menuleft.beginAnimation(); - this.isLeft = true; - } -}); diff --git a/src/components/multiplier-ring.js b/src/components/multiplier-ring.js deleted file mode 100644 index bf4542be6..000000000 --- a/src/components/multiplier-ring.js +++ /dev/null @@ -1,66 +0,0 @@ -const COMBO_PROGRESS_MAP = { - 0: 0, - 1: 0.5, - 2: 0, - 3: 0.25, - 4: 0.5, - 5: 0.75, - 6: 0, - 7: 0.125, - 8: 0.25, - 9: 0.375, - 10: 0.5, - 11: 0.625, - 12: 0.75, - 13: 0.875 -}; - -/* - * Combo needed total for multiplier level: - * - * 0 - 1x - * 2 - 2x - * 6 - 4x - * 14 - 8x - */ -AFRAME.registerComponent('multiplier-ring', { - dependencies: ['geometry', 'material'], - - schema: { - combo: {default: 0}, - multiplier: {default: 1} - }, - - init: function () { - this.animationSet = {from: undefined, to: undefined}; - this.progress = this.el.getObject3D('mesh').material.uniforms.progress; - - // Set up animation. - this.el.setAttribute('animation', { - property: 'components.material.material.uniforms.progress.value', - dur: 100, - autoplay: false - }); - }, - - update: function () { - this.updateRing(); - }, - - updateRing: function () { - const data = this.data; - const el = this.el; - const progress = this.progress; - - if (data.multiplier === 8) { - progress.value = 1; - return; - } - - const animationSet = this.animationSet; - animationSet.from = progress.value; - animationSet.to = COMBO_PROGRESS_MAP[data.combo]; - el.setAttribute('animation', animationSet); - el.components.animation.beginAnimation(); - } -}); diff --git a/src/components/no-frustum-cull.js b/src/components/no-frustum-cull.js deleted file mode 100644 index d376e7738..000000000 --- a/src/components/no-frustum-cull.js +++ /dev/null @@ -1,5 +0,0 @@ -AFRAME.registerComponent('no-frustum-cull', { - init: function () { - this.el.object3D.frustumCulled = false; - } -}); diff --git a/src/components/panel-shader.js b/src/components/panel-shader.js deleted file mode 100644 index 5afe8dcc2..000000000 --- a/src/components/panel-shader.js +++ /dev/null @@ -1,26 +0,0 @@ -import COLORS from '../constants/colors'; - -AFRAME.registerShader('panelShader', { - schema: { - activePanel: {type: 'number', is: 'uniform', default: 0}, - brightness: {type: 'number', is: 'uniform', default: 0.3}, - borderWidth: {type: 'number', is: 'uniform', default: 0.004}, - borderRadius: {type: 'number', is: 'uniform', default: 0.15}, - colorPrimary: {type: 'color', is: 'uniform', default: COLORS.initial.primary}, - colorSecondary: {type: 'color', is: 'uniform', default: COLORS.initial.secondary}, - midSection: {type: 'number', is: 'uniform', default: 0}, - opacity: {type: 'number', is: 'uniform', default: 1}, - ratio: {type: 'number', is: 'uniform', default: 0.5}, - transparent: {default: true} - }, - - vertexShader: require('./shaders/panel.vert.glsl'), - - fragmentShader: require('./shaders/panel.frag.glsl'), - - update: function (data) { - this.updateVariables(data, 'attribute'); - this.updateVariables(data, 'uniform'); - this.el.sceneEl.systems.materials.registerPanel(this.material); - } -}); diff --git a/src/components/pause.js b/src/components/pause.js deleted file mode 100644 index 175d09510..000000000 --- a/src/components/pause.js +++ /dev/null @@ -1,13 +0,0 @@ -AFRAME.registerComponent('pause', { - schema: { - isPaused: {default: false} - }, - - update: function () { - if (this.data.isPaused && this.el.isPlaying) { - this.el.pause(); - } else if (!this.data.isPaused && !this.el.isPlaying && this.el.sceneEl.isPlaying) { - this.el.play(); - } - } -}); diff --git a/src/components/pauser.js b/src/components/pauser.js deleted file mode 100644 index a247d3841..000000000 --- a/src/components/pauser.js +++ /dev/null @@ -1,34 +0,0 @@ -/** - * Tell app to pause game if playing. - */ -AFRAME.registerComponent('pauser', { - schema: { - enabled: {default: true} - }, - - init: function () { - this.pauseGame = this.pauseGame.bind(this); - - document.addEventListener('keydown', evt => { - if (evt.keyCode === 27) { this.pauseGame(); } - }); - - this.el.sceneEl.addEventListener('controllerconnected', evt => { - if (evt.detail.name === 'vive-controls') { - this.el.addEventListener('menudown', this.pauseGame); - } else { - this.el.addEventListener('thumbstickdown', this.pauseGame); - this.el.addEventListener('trackpaddown', this.pauseGame); - } - }); - - document.addEventListener('visibilitychange', () => { - if (document.visibilityState === 'hidden') { this.pauseGame(); } - }); - }, - - pauseGame: function () { - if (!this.data.enabled) { return; } - this.el.sceneEl.emit('pausegame', null, false); - } -}); diff --git a/src/components/play-sound.js b/src/components/play-sound.js deleted file mode 100644 index 6e0ca985b..000000000 --- a/src/components/play-sound.js +++ /dev/null @@ -1,52 +0,0 @@ -var SoundPool = require('../lib/soundpool'); - -AFRAME.registerSystem('play-sound', { - init: function () { - this.lastSoundPlayed = ''; - this.lastSoundPlayedTime = 0; - this.pools = {}; - }, - - createPool: function (sound, volume) { - if (this.pools[sound]) { return; } - this.pools[sound] = new SoundPool(sound, volume); - }, - - playSound: function (sound, volume) { - if (!this.pools[sound]) { - this.createPool(sound, volume); - } - this.pools[sound].play(); - - this.lastSoundPlayed = sound; - this.lastSoundTime = this.el.time; - } -}); - -/** - * Play sound on event. - */ -AFRAME.registerComponent('play-sound', { - schema: { - enabled: {default: true}, - event: {type: 'string'}, - sound: {type: 'string'}, - volume: {type: 'number', default: 1} - }, - - multiple: true, - - init: function () { - this.el.addEventListener(this.data.event, evt => { - if (!this.data.enabled) { return; } - this.system.playSound(this.src, this.data.volume); - }); - }, - - update: function () { - this.src = this.data.sound; - if (this.data.sound.startsWith('#')) { - this.src = document.querySelector(this.data.sound).getAttribute('src'); - } - } -}); diff --git a/src/components/player-height.js b/src/components/player-height.js deleted file mode 100644 index 3f34024d3..000000000 --- a/src/components/player-height.js +++ /dev/null @@ -1,45 +0,0 @@ -/** - * User height based on median value during menu clicks. - */ -AFRAME.registerComponent('player-height', { - init: function () { - this.beatOffset = 0; - this.heights = []; - this.height = 0; - this.el.sceneEl.addEventListener('menuchallengeselect', this.updateHeight.bind(this)); - this.el.sceneEl.addEventListener('playbuttonclick', this.updateHeight.bind(this)); - }, - - pause: function () { - this.heights.length = 0; - }, - - updateHeight: function () { - const heights = this.heights; - if (heights.length > 3) { heights.shift(); } - heights.push(this.el.object3D.position.y); - this.height = median(heights); - - // Adjust beat container height. - const height = clamp(this.height, 1.6, 2.2); - this.beatOffset = remap(height, 1.6, 2.2, 0, 0.2); - } -}); - -function median (arr) { - arr.sort(sort); - const mid = arr.length / 2; - return mid % 1 ? arr[mid - 0.5] : (arr[mid - 1] + arr[mid]) / 2; -} - -function sort (a, b) { - return a - b; -} - -function remap (value, low1, high1, low2, high2) { - return low2 + (high2 - low2) * (value - low1) / (high1 - low1); -} - -function clamp (val, min, max) { - return Math.min(Math.max(val, min), max); -} diff --git a/src/components/plume.js b/src/components/plume.js deleted file mode 100644 index 3c157a83c..000000000 --- a/src/components/plume.js +++ /dev/null @@ -1,73 +0,0 @@ -AFRAME.registerComponent('plume', { - schema: { - color: {default: ''}, - cutDirection: {default: ''}, - horizontalPosition: {default: 'middleleft', oneOf: ['left', 'middleleft', 'middleright', 'right']}, - songPosition: {default: 0}, - type: {default: 'arrow', oneOf: ['arrow', 'dot', 'mine']}, - verticalPosition: {default: 'middle', oneOf: ['bottom', 'middle', 'top']} - }, - - horizontalPositions: { - left: -0.95, - middleleft: -0.6, - middleright: 0.6, - right: 0.95 - }, - - init: function () { - this.curveEl = document.getElementById('curve'); - this.curveFollowRig = document.getElementById('curveFollowRig'); - this.handsEls = this.el.sceneEl.querySelectorAll('.handStar'); - this.handPos = new THREE.Vector3(); - this.verticalPositions = this.el.sceneEl.components['beat-system'].verticalPositions; - - this.el.sceneEl.addEventListener('cleargame', this.returnToPool.bind(this)); - }, - - update: function () { - if (this.data.type === 'mine') { - this.poolName = 'pool__plume-mine'; - } else { - this.poolName = `pool__plume-${this.data.type}-${this.data.color}`; - } - }, - - onGenerate: function (songPosition, horizontalPosition, verticalPosition, heightOffset) { - const data = this.data; - const el = this.el; - // Set position. - const supercurve = this.curveEl.components.supercurve; - supercurve.getPointAt(songPosition, el.object3D.position); - supercurve.alignToCurve(songPosition, el.object3D); - el.object3D.position.x += this.horizontalPositions[horizontalPosition]; - el.object3D.position.y += this.verticalPositions[verticalPosition] + heightOffset; - el.object3D.rotation.z = Math.random() * Math.PI * 2; - - this.songPosition = songPosition; - }, - - tock: function () { - if (this.el.object3D.position.z > this.curveFollowRig.object3D.position.z + 10) { - this.returnToPool(); - return; - } - - // Check collisions with hands. - for (let i = 0; i < this.handsEls.length; i++) { - const hand = this.handsEls[i]; - hand.object3D.getWorldPosition(this.handPos); - if (this.handPos.distanceToSquared(this.el.object3D.position) < 0.2) { - hand.emit('plumepulse'); - } - } - }, - - returnToPool: function () { - this.el.object3D.position.set(0, 0, -9999); - this.el.object3D.visible = false; - if (this.el.isPlaying) { - this.el.sceneEl.components[this.poolName].returnEntity(this.el); - } - } -}); diff --git a/src/components/punch.js b/src/components/punch.js deleted file mode 100644 index 597f94815..000000000 --- a/src/components/punch.js +++ /dev/null @@ -1,52 +0,0 @@ -/** - * Calculate punch bounding box and velocity. - */ -AFRAME.registerComponent('punch', { - schema: { - enabled: {default: false} - }, - - init: function () { - this.currentPos = new THREE.Vector3(); - this.direction = 0; - this.lastSample = new THREE.Vector3(); - this.lastSampleTime = 0; - this.speed = 0; - - this.bbox = new THREE.Box3(); - this.bboxEl = this.el.querySelector('.punchBbox'); - }, - - play: function () { - this.rig = this.el.closest('#curveFollowRig'); - }, - - tick: function (time, dt) { - if (!this.data.enabled) { return; } - - // Calculate velocity (direction + speed), m/s. - this.direction = this.currentPos - .copy(this.el.object3D.position) - .sub(this.lastSample); - - this.speed = this.direction.length() / ((time - this.lastSampleTime) / 1000); - - this.lastSample.copy(this.el.object3D.position); - this.lastSampleTime = time; - }, - - tickBeatSystem: function () { - // Bounding box. - this.bbox.setFromObject(this.bboxEl.getObject3D('mesh')); - }, - - checkCollision: (function () { - const box = new THREE.Box3(); - const expand = new THREE.Vector3(0, 0, 0.2); - - return function (beat) { - box.copy(beat.bbox).translate(beat.el.object3D.position).expandByScalar(0.1).expandByVector(expand); - return this.bbox.intersectsBox(box); - }; - })() -}); diff --git a/src/components/raycaster-target.js b/src/components/raycaster-target.js deleted file mode 100644 index 1d1afb1da..000000000 --- a/src/components/raycaster-target.js +++ /dev/null @@ -1,58 +0,0 @@ -/** - * Set raycast target as a child independnent from entity. - * Useful for padding the raycast target of a mesh without changing the mesh. - */ -AFRAME.registerComponent('raycaster-target', { - schema: { - bindToggle: {default: ''}, - depth: {type: 'number'}, - height: {type: 'number'}, - position: {type: 'vec3', default: {x: 0, y: 0, z: 0}}, - rotation: {type: 'vec3', default: {x: 0, y: 0, z: 0}}, - useBoxTarget: {default: false}, - width: {type: 'number'} - }, - - init: (function () { - var boxGeometry = {primitive: 'box'}; - var planeGeometry = {primitive: 'plane'}; - - return function () { - var data = this.data; - var el = this.el; - var geometry; - var raycastTarget; - - raycastTarget = document.createElement('a-entity'); - raycastTarget.classList.add('raycasterTarget'); - - if (data.bindToggle) { - raycastTarget.setAttribute('bind-toggle__raycastable', data.bindToggle); - } else { - raycastTarget.setAttribute('data-raycastable', ''); - } - - if (data.useBoxTarget) { - // 3D target. - geometry = boxGeometry; - geometry.depth = data.depth; - geometry.height = data.height; - geometry.width = data.width; - } else { - // 2D target. - geometry = planeGeometry; - geometry.height = data.height; - geometry.width = data.width; - } - raycastTarget.setAttribute('geometry', geometry); - - raycastTarget.object3D.visible = false; - raycastTarget.object3D.position.copy(data.position); - raycastTarget.object3D.rotation.x = THREE.Math.degToRad(data.rotation.x); - raycastTarget.object3D.rotation.y = THREE.Math.degToRad(data.rotation.y); - raycastTarget.object3D.rotation.z = THREE.Math.degToRad(data.rotation.z); - - el.appendChild(raycastTarget); - }; - })() -}); diff --git a/src/components/recenter.js b/src/components/recenter.js deleted file mode 100644 index ca078d7f8..000000000 --- a/src/components/recenter.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * Recenter camera back to facing down negative Z axis at 0, 0, 0. - */ -AFRAME.registerComponent('recenter', { - schema: { - enabled: {default: true} - }, - - init: function () { - var sceneEl = this.el.sceneEl; - this.recenter = this.recenter.bind(this); - - document.querySelectorAll('[tracked-controls]').forEach(controlEl => { - controlEl.addEventListener('menudown', this.recenter); - controlEl.addEventListener('thumbstickdown', this.recenter); - }); - - this.el.addEventListener('recenter', this.recenter); - }, - - recenter: (function () { - var euler = new THREE.Euler(); - var matrix = new THREE.Matrix4(); - var rotationMatrix = new THREE.Matrix4(); - var translationMatrix = new THREE.Matrix4(); - - return function () { - const el = this.el; - - if (!this.data.enabled) { return; } - - const camera = el.sceneEl.camera.el.object3D; - - // Reset matrix. - matrix.identity(); - - // Create matrix to reset Y rotation. - euler.set(0, -1 * camera.rotation.y, 0); - rotationMatrix.makeRotationFromEuler(euler); - - // Create matrix to zero position. - translationMatrix.makeTranslation(-1 * camera.position.x, 0, -1 * camera.position.z); - - // Multiply and decompose back to object3D. - matrix.multiply(rotationMatrix).multiply(translationMatrix); - matrix.decompose(el.object3D.position, el.object3D.quaternion, el.object3D.scale); - el.object3D.updateMatrixWorld(true); - el.emit('recentered', null, false); - }; - })() -}); diff --git a/src/components/ring.js b/src/components/ring.js deleted file mode 100644 index ab41f6da8..000000000 --- a/src/components/ring.js +++ /dev/null @@ -1,13 +0,0 @@ -AFRAME.registerShader('ring', { - schema: { - blur: {default: 0.01, is: 'uniform'}, - color: {type: 'color', is: 'uniform'}, - progress: {default: 0, is: 'uniform'}, - radiusInner: {default: 0.6, is: 'uniform'}, - radiusOuter: {default: 1, is: 'uniform'} - }, - - vertexShader: require('./shaders/ring.vert.glsl'), - - fragmentShader: require('./shaders/ring.frag.glsl') -}); diff --git a/src/components/score-texts.js b/src/components/score-texts.js deleted file mode 100644 index eafa20a28..000000000 --- a/src/components/score-texts.js +++ /dev/null @@ -1,42 +0,0 @@ -/** - * Score text fade in animation. - */ -AFRAME.registerComponent('score-texts', { - schema: { - isLoading: {default: false} - }, - - init: function () { - this.textEls = this.el.querySelectorAll('[text]'); - - for (let i = 0; i < this.textEls.length; i++) { - this.textEls[i].setAttribute('animation__fadein', { - autoplay: false, - property: 'components.text.material.uniforms.opacity.value', - delay: 250, - dur: 750, - easing: 'easeInOutCubic', - from: 0, - to: 1 - }); - } - }, - - update: function (oldData) { - // Finished loading. - if (oldData.isLoading && !this.data.isLoading) { - for (let i = 0; i < this.textEls.length; i++) { - this.textEls[i].components['animation__fadein'].beginAnimation(); - } - this.el.sceneEl.emit('textglownormal', null, false); - } - - // Started loading. - if (!oldData.isLoading && this.data.isLoading) { - for (let i = 0; i < this.textEls.length; i++) { - this.textEls[i].components.text.material.uniforms.opacity.value = 0; - } - this.el.sceneEl.emit('textglowoff', null, false); - } - } -}); diff --git a/src/components/search-thumbnail-atlas.js b/src/components/search-thumbnail-atlas.js deleted file mode 100644 index 8d5fc28c5..000000000 --- a/src/components/search-thumbnail-atlas.js +++ /dev/null @@ -1,104 +0,0 @@ -import utils from '../utils'; - -var CANVAS_HEIGHT = 512; // Power-of-two. -var HEIGHT = 64; -var NUM_PER_PAGE = 6; -var WIDTH = 64; - -// Apply height factor since the images don't reach the power-of-two height, need to stretch. -var HEIGHT_FACTOR = CANVAS_HEIGHT / (HEIGHT * NUM_PER_PAGE); -var IMAGE_HEIGHT_CANVAS = HEIGHT * HEIGHT_FACTOR; - -/** - * Create thumbnail atlas for all the thumbnail images together per page. - */ -AFRAME.registerComponent('search-thumbnail-atlas', { - dependencies: ['geometry', 'material'], - - schema: { - dummyUpdater: { type: 'string' } - }, - - init: function () { - // Create canvas for texture atlas. - const canvas = this.canvas = document.createElement('canvas'); - canvas.setAttribute('id', 'thumbnailAtlasMap'); - canvas.height = CANVAS_HEIGHT; // Power-of-two. - canvas.width = WIDTH; - canvas.style.visibility = 'hidden'; - this.ctx = canvas.getContext('2d'); - this.clearCanvas(); - document.body.appendChild(canvas); - - // Alpha map for when search results don't contain max number of results. - const alphaCanvas = this.alphaCanvas = document.createElement('canvas'); - alphaCanvas.setAttribute('id', 'thumbnailAlphaMap'); - alphaCanvas.height = CANVAS_HEIGHT; - alphaCanvas.width = WIDTH; - alphaCanvas.style.visibility = 'hidden'; - this.alphaCtx = alphaCanvas.getContext('2d'); - document.body.appendChild(alphaCanvas); - - this.el.components.material.material.alphaMap = new THREE.CanvasTexture(alphaCanvas); - this.el.setAttribute('material', 'src', canvas); - this.images = []; - - this.lastNumResults = NUM_PER_PAGE; - }, - - update: function () { - var el = this.el; - - const results = el.sceneEl.systems.state.state.searchResultsPage; - for (let i = 0; i < results.length; i++) { - let img = this.images[i] = this.images[i] || document.createElement('img'); - img.crossOrigin = 'anonymous'; - img.src = results[i].coverURL; - if (img.complete) { - this.draw(img, i); - } else { - img.onload = () => { - this.draw(img, i); - }; - } - } - - // Update alpha map. - if (results.length !== this.lastNumResults) { this.updateAlphaMap(results.length); } - this.lastNumResults = results.length; - }, - - /** - * Draw thumbnail on canvas at row i. - */ - draw: function (img, i) { - this.ctx.drawImage( - img, - 0, - i * IMAGE_HEIGHT_CANVAS, - WIDTH, - IMAGE_HEIGHT_CANVAS); - this.el.getObject3D('mesh').material.map.needsUpdate = true; - }, - - clearCanvas: function () { - const canvas = this.canvas; - this.ctx.fillStyle = '#111'; - this.ctx.fillRect(0, 0, canvas.width, canvas.height); - }, - - updateAlphaMap: function (numResults) { - const canvas = this.alphaCanvas; - const ctx = this.alphaCtx; - ctx.fillStyle = '#FFF'; - ctx.fillRect(0, 0, canvas.width, canvas.height); - ctx.fillStyle = '#000'; - ctx.fillRect( - 0, - numResults * IMAGE_HEIGHT_CANVAS, - canvas.width, - canvas.height - numResults * IMAGE_HEIGHT_CANVAS); - this.el.getObject3D('mesh').material.alphaMap.needsUpdate = true; - this.el.getObject3D('mesh').material.needsUpdate = true; - } -}); diff --git a/src/components/search.js b/src/components/search.js deleted file mode 100644 index bc76f88c5..000000000 --- a/src/components/search.js +++ /dev/null @@ -1,186 +0,0 @@ -const debounce = require('lodash.debounce'); - -const convertBeatmap = require('../lib/convert-beatmap'); - -const topSearchRaw = require('../lib/search.json'); -const topSearch = topSearchRaw.map(convertBeatmap); - -const filters = []; - -/** - * Search (including the initial list of popular searches). - * Attached to super-keyboard. - */ -AFRAME.registerComponent('search', { - schema: { - difficultyFilter: { default: 'All' }, - genre: { default: '' }, - playlist: { default: '' }, - query: { default: '' } - }, - - init: function () { - this.eventDetail = { query: '', results: topSearch, url: '', page: 0 }; - this.keyboardEl = document.getElementById('keyboard'); - this.popularHits = topSearch; - shuffle(this.popularHits); - this.queryObject = { hitsPerPage: 0, query: '' }; - this.el.sceneEl.addEventListener('searchclear', () => { - this.search(''); - }); - }, - - update: function (oldData) { - if (!this.popularHits) { return; } // First load. - - this.search(this.data.query); - - // Clear keyboard. - if (oldData.query && !this.data.query) { - this.keyboardEl.components['super-keyboard'].data.value = ''; - this.keyboardEl.components['super-keyboard'].updateTextInput(''); - } - - this.debouncedSearch = debounce(this.search.bind(this), 1000); - }, - - play: function () { - // Pre-populate top. - this.el.sceneEl.emit('searchresults', this.eventDetail); - - // Populate popular. - this.search(''); - }, - - events: { - superkeyboardchange: function (evt) { - if (evt.target !== this.el) { return; } - this.debouncedSearch(evt.detail.value); - } - }, - - search: function (query) { - // Use cached for popular hits. - if (!query && this.data.difficultyFilter === 'All' && !this.data.genre && - !this.data.playlist && this.popularHits) { - this.eventDetail.results = this.popularHits; - this.eventDetail.query = ''; - this.el.sceneEl.emit('searchresults', this.eventDetail); - return; - } - - this.eventDetail.query = query; - this.queryObject.query = query; - this.queryObject.hitsPerPage = query ? 30 : 150; - - // Favorites. - if (this.data.playlist === 'favorites') { - this.eventDetail.results = JSON.parse(localStorage.getItem('favorites-v2')); - this.el.sceneEl.emit('searchresults', this.eventDetail); - return; - } - - /* if (this.data.difficultyFilter || this.data.genre || this.data.playlist) { - filters.length = 0 - - // Difficulty filter. - if (this.data.difficultyFilter && this.data.difficultyFilter !== 'All') { - filters.push(`difficulties:"${this.data.difficultyFilter}"`) - } - - // Genre filter. - if (this.data.genre === 'Video Games') { - filters.push(`genre:"Video Game" OR genre:"Video Games"`) - } else if (this.data.genre) { - filters.push(`genre:"${this.data.genre}"`) - } - - // Playlist filter. - if (this.data.playlist) { - filters.push(`playlists:"${this.data.playlist}"`) - } - - this.queryObject.filters = filters.join(' AND ') - } else { - delete this.queryObject.filters - } */ - let url = `https://beatsaver.com/api/search/text/CURRENT_PAGE_INDEX?sortOrder=Rating&automapper=true&q=${encodeURIComponent(query)}`; - - if (this.data.playlist) { - url = `https://api.beatsaver.com/playlists/id/${this.data.playlist}/CURRENT_PAGE_INDEX`; - } else if (this.data.genre) { - const genreMap = { - 'Pop': 'pop', - 'R&B': 'rb', - 'Rap': 'hip-hop-rap', - 'Rock': 'rock', - 'Soundtrack': 'tv-movie-soundtrack', - 'Video Games': 'video-game-soundtrack', - 'Electronic': 'electronic', - 'Hip Hop': 'hip-hop-rap', - 'House': 'house', - 'J-Pop': 'j-pop', - 'K-Pop': 'k-pop', - 'Meme': 'comedy-meme', - 'Alternative': 'alternative', - 'Anime': 'anime', - 'Comedy': 'comedy-meme', - 'Dubstep': 'dubstep', - 'Dance': 'dance' - }; - const tag = genreMap[this.data.genre]; - url = `https://beatsaver.com/api/search/text/CURRENT_PAGE_INDEX?sortOrder=Rating&automapper=true&tags=${encodeURIComponent(tag)}`; - } else { - if (query && query.length < 3) { return; } - } - - fetch(url.replaceAll('CURRENT_PAGE_INDEX', 0)) - .then(r => { - return r.json();}) - .then(res => { - var hits = (res['docs'] || res['maps']).map(convertBeatmap); - - this.eventDetail.results = hits; - this.eventDetail.url = url; - this.eventDetail.urlPage = 0; - - this.el.sceneEl.emit('searchresults', this.eventDetail); - }); - } -}); - -/** - * Click listener for search result. - */ -AFRAME.registerComponent('search-result-list', { - init: function () { - const obv = new MutationObserver(mutations => { - for (let i = 0; i < mutations.length; i++) { - if (mutations[i].attributeName === 'data-index') { - this.refreshLayout(); - } - } - }); - obv.observe(this.el, { attributes: true, childList: false, subtree: true }); - }, - - events: { - click: function (evt) { - this.el.sceneEl.emit( - 'menuchallengeselect', - evt.target.closest('.searchResult').dataset.id, - false); - } - }, - - refreshLayout: function () { - this.el.emit('layoutrefresh', null, false); - } -}); - -function shuffle (array) { - for (let i = array.length - 1; i > 0; i--) { - const j = Math.floor(Math.random() * (i + 1)); - [array[i], array[j]] = [array[j], array[i]]; - } -} diff --git a/src/components/shaders/aurora.frag.glsl b/src/components/shaders/aurora.frag.glsl deleted file mode 100644 index ac7188bc6..000000000 --- a/src/components/shaders/aurora.frag.glsl +++ /dev/null @@ -1,29 +0,0 @@ -uniform float time; -uniform vec3 colorPrimary; -uniform vec3 colorSecondary; -varying vec2 uvs; - -void main() { - vec3 col = vec3(1.0); - float t = time * 0.001; - col *= 0.80 + sin(-t * 3.4 + 5.5 + uvs.x * 6.0) * 0.1; - col *= 0.80 + sin(t * 1.4 + 0.5 + uvs.x * 12.0) * 0.2; - col *= 0.80 + sin(t * 1.0 + 0.2 + uvs.x * 30.0) * 0.2; - col *= 0.90 + sin(-t * 1.6 + 5.2 + uvs.x * 43.0) * 0.1; - col *= 0.95 + sin(-t * 0.3 + 1.2 + uvs.x * 50.0) * 0.05; - col *= 0.95 + sin(t * 0.8 + 1.2 + uvs.x * 80.0) * 0.05; - col *= 0.94 + sin(-t + 0.1 + uvs.x * 180.0) * 0.01; - col *= 0.90 + sin(t * 2.49 + 0.1 + uvs.x * 120.0) * 0.01; - col *= 0.86 + sin(-t * 1.7 + 4.7 + uvs.x * 80.0) * 0.03; - col *= 0.86 + sin(-t * 1.2 + 0.7 + uvs.x * 180.0) * 0.02; - - // border fades - float alpha = 1.0; - alpha *= 1.0 - smoothstep(0.0, 1.0, uvs.y); - alpha *= smoothstep(0.0, 0.3, uvs.y); - alpha *= sin(uvs.x * 3.141592); - - // colorize - col = col * mix(colorPrimary, colorSecondary, uvs.y); - gl_FragColor = vec4(col, alpha); -} diff --git a/src/components/shaders/aurora.vert.glsl b/src/components/shaders/aurora.vert.glsl deleted file mode 100644 index c7a048dd9..000000000 --- a/src/components/shaders/aurora.vert.glsl +++ /dev/null @@ -1,10 +0,0 @@ -uniform float time; -varying vec2 uvs; -void main() { - uvs.xy = uv.xy; - float t = time * 0.0005; - vec3 pos = position; - pos.y += sin(t + uv.x * 3.0 + pos.x * 0.01) * 20.0; - pos.y += sin(-t * 1.3 + uv.x * 7.0 + pos.x * 0.008) * 10.0; - gl_Position = projectionMatrix * modelViewMatrix * vec4( pos, 1.0 ); -} \ No newline at end of file diff --git a/src/components/shaders/cutfx.frag.glsl b/src/components/shaders/cutfx.frag.glsl deleted file mode 100644 index 885888522..000000000 --- a/src/components/shaders/cutfx.frag.glsl +++ /dev/null @@ -1,10 +0,0 @@ -varying vec2 uvs; -uniform sampler2D src; -uniform vec3 color; -uniform float progress; - -void main() { - vec3 col = color; - float alpha = smoothstep(progress, 1.0, texture2D(src, uvs).a); - gl_FragColor = vec4(col, alpha); -} diff --git a/src/components/shaders/cutfx.vert.glsl b/src/components/shaders/cutfx.vert.glsl deleted file mode 100644 index 0fe15032c..000000000 --- a/src/components/shaders/cutfx.vert.glsl +++ /dev/null @@ -1,5 +0,0 @@ -varying vec2 uvs; -void main() { - uvs.xy = uv.xy; - gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); -} diff --git a/src/components/shaders/fistWeapon.frag.glsl b/src/components/shaders/fistWeapon.frag.glsl deleted file mode 100644 index 01c78c6ea..000000000 --- a/src/components/shaders/fistWeapon.frag.glsl +++ /dev/null @@ -1,11 +0,0 @@ -varying vec2 uvs; -uniform sampler2D src; -uniform vec3 color; -uniform float time; - -#define T time * 0.03 - -void main() { - vec3 col = texture2D(src, uvs * vec2(1.0, 0.7) + vec2(T * 0.01, T * 0.05)).xyz; - gl_FragColor = vec4(col * color, 0.4 * uvs.y); -} diff --git a/src/components/shaders/flat.frag.glsl b/src/components/shaders/flat.frag.glsl deleted file mode 100644 index 674bc426b..000000000 --- a/src/components/shaders/flat.frag.glsl +++ /dev/null @@ -1,6 +0,0 @@ -varying vec2 uvs; -uniform sampler2D src; - -void main() { - gl_FragColor = texture2D(src, uvs); -} \ No newline at end of file diff --git a/src/components/shaders/flat.vert.glsl b/src/components/shaders/flat.vert.glsl deleted file mode 100644 index 16ba5ecfe..000000000 --- a/src/components/shaders/flat.vert.glsl +++ /dev/null @@ -1,5 +0,0 @@ -varying vec2 uvs; -void main() { - uvs.xy = uv.xy; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); -} \ No newline at end of file diff --git a/src/components/shaders/gradient.frag.glsl b/src/components/shaders/gradient.frag.glsl deleted file mode 100644 index 25980438a..000000000 --- a/src/components/shaders/gradient.frag.glsl +++ /dev/null @@ -1,9 +0,0 @@ -varying vec2 uvs; -uniform vec3 color1; -uniform vec3 color2; - -void main () { - float mixDistance = distance(uvs, vec2(0.5, 0)); - float alphaDistance = min(1., (0.5 - distance(uvs, vec2(0.5))) * 2.5); - gl_FragColor = vec4(mix(color1, color2, pow(mixDistance, 2.4)), alphaDistance); -} diff --git a/src/components/shaders/handstar.frag.glsl b/src/components/shaders/handstar.frag.glsl deleted file mode 100644 index 1db5e89d7..000000000 --- a/src/components/shaders/handstar.frag.glsl +++ /dev/null @@ -1,14 +0,0 @@ -varying vec3 vWorldPosition; -varying float fresnel; -uniform float pulse; -uniform vec3 colorPrimary; -uniform vec3 colorSecondary; -uniform vec3 colorTertiary; - -void main() { - vec3 colorize = vWorldPosition-cameraPosition; - colorize = clamp(colorize + 0.5, vec3(0.0), vec3(1.0)); - vec3 col = mix(mix(colorPrimary, colorSecondary, colorize.x), colorTertiary, colorize.z); - col += (fresnel * pulse) * 0.1; - gl_FragColor = vec4 (col, clamp(fresnel, 0.0, 1.0)); -} diff --git a/src/components/shaders/handstar.vert.glsl b/src/components/shaders/handstar.vert.glsl deleted file mode 100644 index 319dd441a..000000000 --- a/src/components/shaders/handstar.vert.glsl +++ /dev/null @@ -1,12 +0,0 @@ -varying vec3 vWorldPosition; -varying float fresnel; -uniform float pulse; - -void main() { - vWorldPosition = (modelMatrix * vec4(position, 1.0)).xyz; - vec3 worldNormal = normalize(mat3(modelMatrix[0].xyz, modelMatrix[1].xyz, modelMatrix[2].xyz) * normal); - vec3 viewVector = normalize(vWorldPosition - cameraPosition); - fresnel = 0.08 * pow(0.4 + dot(viewVector, worldNormal), 6.0 + pulse); - - gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); -} diff --git a/src/components/shaders/handstartrail.frag.glsl b/src/components/shaders/handstartrail.frag.glsl deleted file mode 100644 index 30495f8dd..000000000 --- a/src/components/shaders/handstartrail.frag.glsl +++ /dev/null @@ -1,15 +0,0 @@ -varying vec3 vWorldPosition; -varying vec2 uvs; -uniform vec3 colorPrimary; -uniform vec3 colorSecondary; -uniform vec3 colorTertiary; -uniform float pulse; -uniform sampler2D src; - -void main() { - vec3 colorize = vWorldPosition-cameraPosition; - colorize = clamp(colorize + 0.5, vec3(0.0), vec3(1.0)); - vec3 col = mix(mix(colorPrimary, colorSecondary, colorize.x), colorTertiary, colorize.z); - col += vec3(pulse) * 0.1; - gl_FragColor = vec4 (col, texture2D(src, uvs).a); -} diff --git a/src/components/shaders/handstartrail.vert.glsl b/src/components/shaders/handstartrail.vert.glsl deleted file mode 100644 index 2ae64083e..000000000 --- a/src/components/shaders/handstartrail.vert.glsl +++ /dev/null @@ -1,8 +0,0 @@ -varying vec3 vWorldPosition; -varying vec2 uvs; - -void main() { - uvs = uv; - vWorldPosition = (modelMatrix * vec4(position, 1.0)).xyz; - gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); -} diff --git a/src/components/shaders/home.frag.glsl b/src/components/shaders/home.frag.glsl deleted file mode 100644 index 158686925..000000000 --- a/src/components/shaders/home.frag.glsl +++ /dev/null @@ -1,22 +0,0 @@ -varying vec2 uvs; -varying vec3 vWorldPos; -uniform sampler2D src; -uniform vec3 color1; -uniform vec3 color2; -uniform vec3 color3; - -void main() { - vec4 tex = texture2D(src, uvs); - vec3 p = vWorldPos + cameraPosition; - float pz = p.z * 0.36; - float f = clamp( (sin(p.x + pz ) + sin(p.y - pz)) * 0.35 + 0.14, 0.0, 1.0); - float g = clamp( (sin(p.x + pz + 2.0) + cos(p.y * 0.6 - 15.0) + sin(pz * 0.5)) * 0.3 + 0.1, 0.0, 1.0); - float h = clamp( (sin(p.x * 0.7 + pz + 2.0) + cos(p.y * 0.8 - 5.0) + sin(pz * 0.8)) * 0.3 + 0.05, 0.0, 1.0); - - vec3 col = vec3(0.1); - col = mix(col, color1, f); - col = mix(col, color2, g); - col = mix(col, color3, h); - - gl_FragColor = vec4((col * 1.5) * tex.r, 1.0); -} \ No newline at end of file diff --git a/src/components/shaders/home.vert.glsl b/src/components/shaders/home.vert.glsl deleted file mode 100644 index ed9e18cd0..000000000 --- a/src/components/shaders/home.vert.glsl +++ /dev/null @@ -1,9 +0,0 @@ -uniform float time; -varying vec3 vWorldPos; -varying vec2 uvs; -void main() { - uvs.xy = uv.xy; - vWorldPos = (modelMatrix * vec4( position, 1.0 )).xyz; - vec3 pos = vec3(position.x, position.y + sin(time * 0.002 - position.z) * 0.05 + 0.04, position.z); - gl_Position = projectionMatrix * modelViewMatrix * vec4(pos, 1.0); -} diff --git a/src/components/shaders/moon.frag.glsl b/src/components/shaders/moon.frag.glsl deleted file mode 100644 index c0ada2309..000000000 --- a/src/components/shaders/moon.frag.glsl +++ /dev/null @@ -1,9 +0,0 @@ -varying vec2 uvs; -uniform sampler2D map; -uniform vec3 tint; - -void main() { - vec4 tex = texture2D(map, uvs); - vec3 col = mix(tex.rgb * tint, tex.rgb, uvs.y); - gl_FragColor = vec4(col, tex.a ); -} diff --git a/src/components/shaders/moon.vert.glsl b/src/components/shaders/moon.vert.glsl deleted file mode 100644 index 8ee798643..000000000 --- a/src/components/shaders/moon.vert.glsl +++ /dev/null @@ -1,5 +0,0 @@ -varying vec2 uvs; -void main() { - uvs.xy = uv.xy; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); -} diff --git a/src/components/shaders/panel.frag.glsl b/src/components/shaders/panel.frag.glsl deleted file mode 100644 index 8ee921950..000000000 --- a/src/components/shaders/panel.frag.glsl +++ /dev/null @@ -1,50 +0,0 @@ -#if __VERSION__ == 100 - #extension GL_OES_standard_derivatives : enable -#endif - -uniform vec3 colorPrimary; -uniform vec3 colorSecondary; - -#define PI 3.141592 -#define DIFF_SECTION_WIDTH 0.06 - -uniform float borderWidth; -uniform float borderRadius; -uniform float brightness; -uniform float ratio; -uniform float midSection; -uniform float opacity; -uniform float activePanel; - -varying vec2 uvs; - -float sdBox( in vec2 p, in vec2 b ) -{ - vec2 d = abs(p)-b; - return length(max(d,vec2(0.0))) + min(max(d.x,d.y), 0.0); -} - -void main() -{ - vec2 uv = uvs; - vec2 uv2 = uv * 2.0 - 1.0; // from -1 to 1 - uv2.x *= ratio; - - vec3 col = mix(colorSecondary * uv.y, colorPrimary * uv.y, uv.x) * (brightness + activePanel * 0.4); - vec3 borderCol = mix(colorSecondary, colorPrimary, uv.y); - - vec2 size = vec2(0.83 * ratio, 0.86) - borderRadius; - float grad = sdBox(uv2, size) - borderRadius; - grad = min(grad, sdBox(uv2 - size, vec2(borderRadius))); - grad = min(grad, sdBox(uv2 + size, vec2(borderRadius))); - grad = -grad; - float aa = fwidth(grad); - - float isShape = smoothstep(-aa, 0.0, grad); - float alpha = clamp(isShape + smoothstep(-0.15, 0.15, grad), 0.0, 1.0); - float isBorder = smoothstep(-aa - borderWidth, aa - borderWidth, grad) - smoothstep(-aa + borderWidth, aa + borderWidth, grad); - float mid = clamp(midSection, 0.0, 1.0); - col *= 1.0 - mid * (step(0.5 - DIFF_SECTION_WIDTH * mid, uv.x) - step(0.5 + DIFF_SECTION_WIDTH * midSection, uv.x)) * 0.3; - - gl_FragColor = vec4(mix(col * isShape, borderCol, isBorder), alpha * opacity); -} diff --git a/src/components/shaders/panel.vert.glsl b/src/components/shaders/panel.vert.glsl deleted file mode 100644 index 16ba5ecfe..000000000 --- a/src/components/shaders/panel.vert.glsl +++ /dev/null @@ -1,5 +0,0 @@ -varying vec2 uvs; -void main() { - uvs.xy = uv.xy; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); -} \ No newline at end of file diff --git a/src/components/shaders/plume.frag.glsl b/src/components/shaders/plume.frag.glsl deleted file mode 100644 index dab27c967..000000000 --- a/src/components/shaders/plume.frag.glsl +++ /dev/null @@ -1,10 +0,0 @@ -varying vec2 uvs; -varying float distance; -uniform sampler2D src; -uniform vec3 color; - -void main() { - float alpha = texture2D(src, uvs).a; - alpha *= 1.0 - clamp(distance / 40.0, 0.0, 1.0); - gl_FragColor = vec4(color, alpha); -} diff --git a/src/components/shaders/plume.vert.glsl b/src/components/shaders/plume.vert.glsl deleted file mode 100644 index b47463215..000000000 --- a/src/components/shaders/plume.vert.glsl +++ /dev/null @@ -1,7 +0,0 @@ -varying vec2 uvs; -varying float distance; -void main() { - uvs.xy = uv.xy; - distance = length((modelMatrix * vec4(position, 1.0)).xyz - cameraPosition); - gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); -} diff --git a/src/components/shaders/ring.frag.glsl b/src/components/shaders/ring.frag.glsl deleted file mode 100644 index 2c36344f0..000000000 --- a/src/components/shaders/ring.frag.glsl +++ /dev/null @@ -1,30 +0,0 @@ -#if __VERSION__ == 100 - #extension GL_OES_standard_derivatives : enable -#endif -#define PI 3.14159265358979 -uniform float blur; -uniform float progress; -uniform float radiusInner; -uniform float radiusOuter; -uniform vec3 color; - -varying vec2 vUv; - -void main () { - // make uvs go from -1 to 1 - vec2 uv = vec2(vUv.x * 2.0 - 1.0, vUv.y * 2.0 - 1.0); - // calculate distance of fragment to center - float r = uv.x * uv.x + uv.y * uv.y; - // calculate antialias - float aa = fwidth(r); - // make full circle (radiusOuter - radiusInner) - float col = (1.0 - smoothstep(radiusOuter - aa, radiusOuter + blur + aa, r)) * smoothstep(radiusInner - aa, radiusInner + blur + aa, r); - // radial gradient - float a = smoothstep(-PI-aa, PI+aa, atan(uv.y, uv.x)); - // progress angle - float p = 1.0 - progress - blur; - // apply progress to full circle (1 for done part, 0 for part to go) - col *= smoothstep(p, p + blur, a); - // multiply by user color - gl_FragColor = vec4(color * col, col); -} diff --git a/src/components/shaders/ring.vert.glsl b/src/components/shaders/ring.vert.glsl deleted file mode 100644 index 776e0b7d0..000000000 --- a/src/components/shaders/ring.vert.glsl +++ /dev/null @@ -1,6 +0,0 @@ -varying vec2 vUv; - -void main () { - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); -} diff --git a/src/components/shaders/rings.frag.glsl b/src/components/shaders/rings.frag.glsl deleted file mode 100644 index ea778c34a..000000000 --- a/src/components/shaders/rings.frag.glsl +++ /dev/null @@ -1,37 +0,0 @@ -uniform float time; -uniform vec3 colorPrimary; -uniform vec3 colorSecondary; -uniform vec3 colorTertiary; -varying vec2 uvs; -#define PI 3.14159265358979 - -float pulse(float x, float t, float r){ - return 1.0 - smoothstep(0.0, r, abs((x - t))); -} - -void main() { - float t = time * 0.002; - vec2 uv = uvs - 0.5; - uv = vec2(-uv.y, uv.x); - float d = length(uv); - float f = pulse(d, 0.44, 0.012); - float f2 = pulse(d, 0.44, 0.002); - - float g = pulse(d, 0.20, 0.01); - float g1 = pulse(d, 0.20, 0.0018); - - float g2 = pulse(d, 0.21, 0.01); - float g3 = pulse(d, 0.21, 0.0018); - - float ang = abs(atan(uv.y, uv.x)) / PI; - float angalpha = sin(ang * 20.0 - t * 0.1) * 0.4 + 0.6; - - float sparks = pulse(angalpha, 0.4, 0.17) * (pulse(d, 0.435, 0.035) + pulse(d, 0.205, 0.026)) * 0.14; - sparks += pulse(angalpha, 0.4, 0.2) * (pulse(d, 0.44, 0.002) + pulse(d, 0.2, 0.0018)) * 0.4; - sparks *= sin(ang * 14.0 + t) * 0.5 + 0.5; - vec3 col = mix(colorPrimary, colorSecondary, ang); - col = mix (col, colorPrimary, g3); - col = mix (col, colorSecondary, g1); - col = mix (col, colorTertiary, sparks * 2.4); - gl_FragColor = vec4(col, ((f + g + g2) * 0.1 + (f2 + g1 + g3) * 0.4) * angalpha + sparks); -} diff --git a/src/components/shaders/rings.vert.glsl b/src/components/shaders/rings.vert.glsl deleted file mode 100644 index 3a5243771..000000000 --- a/src/components/shaders/rings.vert.glsl +++ /dev/null @@ -1,5 +0,0 @@ -varying vec2 uvs; -void main() { - uvs.xy = uv.xy; - gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); -} \ No newline at end of file diff --git a/src/components/shaders/supercurve.frag.glsl b/src/components/shaders/supercurve.frag.glsl deleted file mode 100644 index 5c63f00dc..000000000 --- a/src/components/shaders/supercurve.frag.glsl +++ /dev/null @@ -1,40 +0,0 @@ -varying vec2 vUvs; -varying vec3 vWorldPos; -uniform vec3 color1; -uniform vec3 color2; -uniform vec3 fogColor; -uniform float opacity; - -#define BLACK vec3(0.0) -#define YELLOW vec3(250.0 / 255.0, 244.0 / 255.0, 180.0 / 255.0) - -void main() { - vec3 col; - - // Lines. - float f1 = clamp(sin(vUvs.x * 12.9 + 1.4) - 0.99, 0.0, 1.0) * 80.0; - float f2 = clamp(sin(3.1416 + vUvs.x * 12.9 + 1.45) - 0.99, 0.0, 1.0) * 80.0; - - // Gradients. - f1 += sin(vWorldPos.y - vWorldPos.x - vWorldPos.z * 0.4 + 1.4) * 0.1 + 0.1; - f2 += sin(vWorldPos.y - vWorldPos.x - vWorldPos.z * 0.3 + 5.5) * 0.1 + 0.1; - float f3 = sin(vWorldPos.y - vWorldPos.x - vWorldPos.z * 0.1 + 10.3) * 0.1 + 0.1; - - // Build color. - col = mix(BLACK, color1, f1); - col = mix(col, color2, f2); - col = mix(col, YELLOW, f3); - - // Fog. - float far = 100.0; - float fog = 1.0 - clamp(length(vWorldPos - cameraPosition) / 400.0, 0.0, 1.0); - - col = mix(fogColor, col, fog); - - // fade beginning and end - float alpha = 0.0; - alpha += smoothstep(0.0, 0.003, vUvs.y); - alpha -= smoothstep(0.997, 1.0, vUvs.y); - - gl_FragColor = vec4(col, alpha * (fog * fog)); -} diff --git a/src/components/shaders/supercurve.vert.glsl b/src/components/shaders/supercurve.vert.glsl deleted file mode 100644 index 2d6c8e164..000000000 --- a/src/components/shaders/supercurve.vert.glsl +++ /dev/null @@ -1,8 +0,0 @@ -varying vec2 vUvs; -varying vec3 vWorldPos; - -void main() { - vWorldPos = (modelMatrix * vec4(position, 1.0)).xyz; - vUvs = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); -} diff --git a/src/components/shaders/tube.frag.glsl b/src/components/shaders/tube.frag.glsl deleted file mode 100644 index 78d4655ab..000000000 --- a/src/components/shaders/tube.frag.glsl +++ /dev/null @@ -1,14 +0,0 @@ -varying vec2 uvs; -uniform sampler2D src; -uniform sampler2D color; -uniform float time; -uniform float opacity; - -void main() { - vec2 uvanim = vec2( - mod(uvs.x + sin(time / 20000.0), 1.0), - mod(uvs.y + time / 2000.0, 1.0)); - vec4 texAlpha = texture2D(src, uvanim); - float alpha = texAlpha.a * smoothstep(0.0, 0.5, uvs.y) * (1.0 - smoothstep(0.5, 1.0, uvs.y)); - gl_FragColor = vec4(texture2D(color, uvs).rgb, alpha * 0.7 * opacity); -} diff --git a/src/components/shaders/tube.vert.glsl b/src/components/shaders/tube.vert.glsl deleted file mode 100644 index 33e9d427b..000000000 --- a/src/components/shaders/tube.vert.glsl +++ /dev/null @@ -1,6 +0,0 @@ -varying vec2 uvs; -uniform float time; -void main() { - uvs.xy = uv.xy; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); -} diff --git a/src/components/shaders/tunnel.frag.glsl b/src/components/shaders/tunnel.frag.glsl deleted file mode 100644 index 1c4c82918..000000000 --- a/src/components/shaders/tunnel.frag.glsl +++ /dev/null @@ -1,42 +0,0 @@ -uniform sampler2D src; -uniform float scale; -varying vec3 vPos; -varying vec3 vWorldPos; -varying vec3 vNormal; -uniform vec3 color1; -uniform vec3 color2; -uniform vec3 color3; -uniform vec3 fogColor; - -void main() { - vec3 pw = vWorldPos - cameraPosition; - vec3 p = pw / scale; - float pz = p.z * 0.3; - - // build color weights - float f = clamp( (sin(p.x * 0.6 + pz ) + sin(p.y * 0.3 - pz)) * 0.3 + 0.17, 0.0, 1.0); - float g = clamp( (sin(p.x * 0.7 + pz) + cos(p.y * 0.6 - 15.0) + sin(pz * 0.1)) * 0.25 + 0.15, 0.0, 1.0); - float h = clamp( (sin(p.x * 0.4 + pz + 3.0) + cos(p.y * 0.8 - 5.0) + sin(pz * 0.3)) * 0.16 + 0.08, 0.0, 1.0); - - - // mix colors using weights - vec3 col = vec3(0.3); - col = mix(col, color1, f); - col = mix(col, color2, g); - col = mix(col, color3, h); - - float fog = 1.0 - clamp(length(pw) / 180.0 - 0.1, 0.0, 1.0); - - // mix color with fog - col = mix(fogColor, col, smoothstep(0.2, 0.9, fog)); - - // calc shadow (using normal and fixed light pos + fade to black in y) - float shadow = 0.5 + dot(vec3(0.0, 1.0, 1.0), vNormal) * 0.5; - float shadowGrad = clamp((vPos.y + 2.0) / 6.0, 0.1, 1.0); - // fade in fog - shadow = mix(1.0, shadow, fog); - shadowGrad = mix(1.0, shadowGrad, smoothstep(0.3, 1.0, fog)); - - gl_FragColor = vec4(col * shadow * shadowGrad, smoothstep(0.3, 0.6, fog)); - //gl_FragColor = vec4(vec3(fog), 1.0); -} \ No newline at end of file diff --git a/src/components/shaders/tunnel.vert.glsl b/src/components/shaders/tunnel.vert.glsl deleted file mode 100644 index 6f6b0a682..000000000 --- a/src/components/shaders/tunnel.vert.glsl +++ /dev/null @@ -1,10 +0,0 @@ -varying vec3 vWorldPos; -varying vec3 vPos; -varying vec3 vNormal; - -void main() { - vNormal = normal; - vPos = position; - vWorldPos = (modelMatrix * vec4( position, 1.0 )).xyz; - gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); -} diff --git a/src/components/shaders/wall.frag.glsl b/src/components/shaders/wall.frag.glsl deleted file mode 100644 index e33655682..000000000 --- a/src/components/shaders/wall.frag.glsl +++ /dev/null @@ -1,49 +0,0 @@ -uniform float iTime; -uniform float opacity; -uniform sampler2D environment; -uniform vec3 colorTertiary; -uniform vec3 hitLeft; -uniform vec3 hitRight; -varying vec2 uvs; -varying vec3 nrml; -varying vec3 worldPos; - -#define SEED 19.1252 -#define time (3.0 + iTime) / 1000.0 - -float noise(vec3 uv) { - return fract(sin(uv.x*123243. + uv.y*424. + uv.z*642. + SEED) * 1524.); -} - -vec4 drawHit(vec3 p, vec3 center, vec3 color) { - center.z -= 0.1; - float dist = 1.0 - smoothstep(0.0, 0.3, length(p - center)); - float glitch = noise(floor(p*3.0)) * 0.06 - 0.03; - float alpha = 1.0 - smoothstep(0.0, 0.01, abs(p.z-center.z + glitch)); - alpha += 1.0 - smoothstep(0.0, 0.01, abs(p.y-center.y + glitch)); - return vec4(color * dist, alpha * dist + alpha); -} - -void main() { - vec2 uv1 = uvs.xy-0.5; - float alpha = 0.0; - // border - alpha += smoothstep(0.44, 0.50, abs(uv1.x)); - alpha += smoothstep(0.44, 0.50, abs(uv1.y)); - alpha += smoothstep(0.486, 0.49, abs(uv1.x)); - alpha += smoothstep(0.486, 0.49, abs(uv1.y)); - alpha = min(1.0, alpha * 0.5); - - // weapon collision - vec4 hit; - hit = drawHit(worldPos, hitRight, colorTertiary); - hit += drawHit(worldPos, hitLeft, colorTertiary); - - // reflection - vec3 ray = reflect(normalize(cameraPosition - worldPos + sin(worldPos.z) * 0.1 + cos(worldPos.z * 0.3) * 0.3), nrml); - float m = 2.0 * sqrt(pow(ray.x, 2.0) + pow(ray.y, 2.0) + pow(ray.z, 2.0)); - vec2 uv = ray.xy / m + 0.5; - vec3 col = texture2D(environment, uv).rgb * 0.3; - - gl_FragColor = vec4(mix(col, colorTertiary, alpha) + hit.rgb, (alpha * 0.2 + 0.8) * opacity + hit.a); -} diff --git a/src/components/shaders/wall.vert.glsl b/src/components/shaders/wall.vert.glsl deleted file mode 100644 index 28ddd7eaf..000000000 --- a/src/components/shaders/wall.vert.glsl +++ /dev/null @@ -1,11 +0,0 @@ -varying vec2 uvs; -varying vec3 nrml; -varying vec3 worldPos; - -void main() { - uvs.xy = uv.xy; - nrml.xyz = normal.xyz; - vec4 p = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - worldPos = (modelMatrix * vec4( position, 1.0 )).xyz; - gl_Position = p; -} diff --git a/src/components/shaders/weapon.frag.glsl b/src/components/shaders/weapon.frag.glsl deleted file mode 100644 index ae734276d..000000000 --- a/src/components/shaders/weapon.frag.glsl +++ /dev/null @@ -1,14 +0,0 @@ -varying vec2 uvs; -uniform sampler2D src; -uniform vec3 color; -uniform float time; - -#define T time * 0.04 - -void main() { - vec2 uv = uvs; - uv += T * 0.05; - vec3 col = texture2D(src, uv).xyz; - float core = step(0.125, uvs.x); - gl_FragColor = vec4(col * color, mix(1.0, 0.07, core)); -} \ No newline at end of file diff --git a/src/components/shaders/weapon.vert.glsl b/src/components/shaders/weapon.vert.glsl deleted file mode 100644 index 65594477e..000000000 --- a/src/components/shaders/weapon.vert.glsl +++ /dev/null @@ -1,13 +0,0 @@ -#define T time * 0.06 -varying vec2 uvs; -uniform float time; -uniform float thickness; -void main() { - uvs.xy = uv.xy; - vec3 pos = position; - - pos.x *= thickness + sin(T) * ((0.1 + uv.x) * 16.0 + uv.y * 4.9) * thickness * 0.005; - pos.z *= thickness + cos(T) * ((0.1 + uv.x) * 13.0 + uv.y * 14.9) * thickness * 0.005; - - gl_Position = projectionMatrix * modelViewMatrix * vec4(pos, 1.0); -} \ No newline at end of file diff --git a/src/components/shaders/weaponHandle.frag.glsl b/src/components/shaders/weaponHandle.frag.glsl deleted file mode 100644 index 614e02d63..000000000 --- a/src/components/shaders/weaponHandle.frag.glsl +++ /dev/null @@ -1,23 +0,0 @@ -varying vec2 vUV; -varying vec3 vNormal; -varying vec3 vWorldPos; -uniform sampler2D src; -//uniform float time; - -//#define T time * 0.04 - -void main() { - //vec2 uv = vUV; - vec3 eye = normalize(cameraPosition - vWorldPos); - vec3 ray = reflect(eye, vNormal); - float m = 2.0 * sqrt(pow(ray.x, 2.0) + pow(ray.y, 2.0) + pow(ray.z, 2.0)); - vec2 envuv = ray.xy / m + 0.5; - vec3 col = texture2D(src, envuv).xyz; - - vec3 light = normalize(vWorldPos + vec3(0.1, 3.0, 0.5)); - float diff = 0.1 + dot(light, vNormal) * 0.3; - - float fresnel = 1.0 - clamp(pow(vNormal.z, 0.2), 0.0, 1.0); - - gl_FragColor = vec4(mix(vec3(diff), col, fresnel), 1.0); -} \ No newline at end of file diff --git a/src/components/shaders/weaponHandle.vert.glsl b/src/components/shaders/weaponHandle.vert.glsl deleted file mode 100644 index ad42285f0..000000000 --- a/src/components/shaders/weaponHandle.vert.glsl +++ /dev/null @@ -1,13 +0,0 @@ -varying vec2 vUV; -varying vec3 vNormal; -varying vec3 vWorldPos; - -void main() { - vUV.xy = uv.xy; - //vNormal.xyz = normal.xyz; - vNormal = normalize(normalMatrix * normal); - - vec4 p = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - vWorldPos = (modelMatrix * vec4( position, 1.0 )).xyz; - gl_Position = p; -} \ No newline at end of file diff --git a/src/components/song-info-positioner.js b/src/components/song-info-positioner.js deleted file mode 100644 index e1687b096..000000000 --- a/src/components/song-info-positioner.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Puts #songInfoContainer in specific y position depending on state - */ -AFRAME.registerComponent('song-info-positioner', { - schema: { - victory: {default: false} - }, - - update: function () { - if (this.data.victory) { - this.el.object3D.position.y = -1.2; - } else { - this.el.object3D.position.y = -1; - } - } -}); diff --git a/src/components/song-preview.js b/src/components/song-preview.js deleted file mode 100644 index 8459d56af..000000000 --- a/src/components/song-preview.js +++ /dev/null @@ -1,32 +0,0 @@ -var utils = require('../utils'); - -const PREVIEW_VOLUME = 0.5; - -/** - * Song previews. - */ -AFRAME.registerComponent('song-preview-system', { - schema: { - selectedChallengeId: { type: 'string' }, - selectedChallengeVersion: { type: 'string' } - }, - - init: function () { - this.audio = document.createElement('audio'); - this.audio.volume = PREVIEW_VOLUME; - }, - - update: function (oldData) { - const data = this.data; - console.log('update-song', oldData, data); - - if (data.selectedChallengeId && oldData.selectedChallengeId !== data.selectedChallengeId) { - this.audio.pause(); - this.audio.setAttribute('src', 'https://cdn.beatsaver.com/' + data.selectedChallengeVersion + '.mp3'); - this.audio.currentTime = 0; - this.audio.play(); - } else if (!data.selectedChallengeId) { - this.audio.pause(); - } - } -}); diff --git a/src/components/song-progress-info.js b/src/components/song-progress-info.js deleted file mode 100644 index c76353a0e..000000000 --- a/src/components/song-progress-info.js +++ /dev/null @@ -1,38 +0,0 @@ -AFRAME.registerComponent('song-progress-info', { - dependencies: ['geometry', 'material'], - - schema: { - enabled: {default: false} - }, - - init: function () { - this.tick = AFRAME.utils.throttleTick(this.tick.bind(this), 1000); - - this.progress = this.el.getObject3D('mesh'); - this.progress.geometry.translate(0.285, 0, 0); - this.el.sceneEl.addEventListener('cleargame', () => { - this.progress.scale.x = 0.0001; - }); - }, - - update: function (oldData) { - this.progress.scale.x = 0.0001; - }, - - updateInfo: function () { - const source = this.el.sceneEl.components.song.source; - if (!source || !source.buffer) { return; } - - const progress = - this.el.sceneEl.components.song.getCurrentTime() / - source.buffer.duration; - - if (!progress) { return; } - this.progress.scale.x = progress; - }, - - tick: function () { - if (!this.data.enabled) { return; } - this.updateInfo(); - } -}); diff --git a/src/components/song.js b/src/components/song.js deleted file mode 100644 index bbc653d9e..000000000 --- a/src/components/song.js +++ /dev/null @@ -1,227 +0,0 @@ -const utils = require('../utils'); - -const GAME_OVER_LENGTH = 3.5; -const ONCE = {once: true}; -const BASE_VOLUME = 0.5; - -let skipDebug = AFRAME.utils.getUrlParameter('skip'); -if (!!skipDebug) { - skipDebug = parseInt(skipDebug) / 1000; -} else { - skipDebug = 0; -} - -/** - * Active challenge song / audio. - * - * Order of song init in conjuction with beat-generator: - * - * 1. previewStartTime is playing - * 2. songloadfinish - * 3. beat-generator preloading - * 4. preloaded beats generated - * 5. beat-generator preloading finish - * 6. startAudio / songStartTime is set - * 7. beat-generator continues off song current time - */ -AFRAME.registerComponent('song', { - schema: { - audio: {type: 'string'}, // Blob URL. - analyserEl: {type: 'selector', default: '#audioAnalyser'}, - challengeId: {default: ''}, - isBeatsPreloaded: {default: false}, - isGameOver: {default: false}, - isLoading: {default: false}, - isPlaying: {default: false}, - isVictory: {default: false} - }, - - init: function () { - this.analyserSetter = {buffer: true}; - this.audioAnalyser = this.data.analyserEl.components.audioanalyser; - this.context = this.audioAnalyser.context; - this.isAudioPlaying = false; - this.songStartTime = 0; - - this.onSongComplete = this.onSongComplete.bind(this); - - // Base volume. - this.audioAnalyser.gainNode.gain.value = BASE_VOLUME; - - this.el.addEventListener('gamemenurestart', this.onRestart.bind(this)); - this.el.addEventListener('wallhitstart', this.onWallHitStart.bind(this)); - this.el.addEventListener('wallhitend', this.onWallHitEnd.bind(this)); - - if (process.env.NODE_ENV !== 'production') { - this.el.addEventListener('victoryfake', () => { - this.source.onended = null; - this.source.stop(); - this.source.disconnect(); - this.onSongComplete(); - }); - } - }, - - update: function (oldData) { - const data = this.data; - - // Loading start while audio blob URL already set. - if (!oldData.isLoading && data.isLoading && data.audio) { - this.processAudio(); - return; - } - - // Audio blob URL set while already loading. - if (!oldData.audio && data.audio && data.isLoading) { - this.processAudio(); - return; - } - - // Game over, slow down audio, and then stop. - if (!oldData.isGameOver && data.isGameOver) { - this.onGameOver(); - return; - } - - if (oldData.isGameOver && !data.isGameOver) { - this.audioAnalyser.gainNode.value = BASE_VOLUME; - } - - // On victory screen, play song in background. - if (!oldData.isVictory && data.isVictory) { - this.data.analyserEl.addEventListener('audioanalyserbuffersource', evt => { - this.audioAnalyser.resumeContext(); - const gain = this.audioAnalyser.gainNode.gain; - gain.cancelScheduledValues(0); - gain.setValueAtTime(0.05, 0); - this.source = evt.detail; - this.source.start(); - this.el.emit('victory'); - }, ONCE); - this.audioAnalyser.refreshSource(); - return; - } - - // New challenge, play if we have loaded and were waiting for beats to preload. - if (!oldData.isBeatsPreloaded && this.data.isBeatsPreloaded && this.source) { - this.startAudio(); - } - - if (oldData.challengeId && !data.challengeId) { - this.stopAudio(); - return; - } - - // Pause / stop. - if (oldData.isPlaying && !data.isPlaying) { - this.audioAnalyser.suspendContext(); - this.isAudioPlaying = false; - } - - // Resume. - if (!oldData.isPlaying && data.isPlaying && this.source) { - this.audioAnalyser.resumeContext(); - this.isAudioPlaying = true; - } - }, - - processAudio: function () { - this.el.sceneEl.emit('songprocessstart', null, false); - this.getAudio().then(source => { - this.el.sceneEl.emit('songprocessfinish', null, false); - }).catch(console.error); - }, - - getAudio: function () { - const data = this.data; - - if (this.source) { this.stopAudio(); } - - this.isAudioPlaying = false; - return new Promise(resolve => { - data.analyserEl.addEventListener('audioanalyserbuffersource', evt => { - // Finished decoding. - this.source = evt.detail; - resolve(this.source); - }, ONCE); - this.analyserSetter.src = this.data.audio; - data.analyserEl.setAttribute('audioanalyser', this.analyserSetter); - }); - }, - - stopAudio: function () { - if (!this.source) { - console.warn('[song] Tried to stopAudio, but not playing.'); - return; - } - this.source.onended = null; - if (this.isAudioPlaying) { this.source.stop(); } - this.source.disconnect(); - this.source = null; - this.isAudioPlaying = false; - }, - - onSongComplete: function () { - if (!this.data.isPlaying) { return; } - this.el.emit('songcomplete'); - }, - - onGameOver: function () { - this.isAudioPlaying = false; - - // Playback rate. - const playbackRate = this.source.playbackRate; - playbackRate.setValueAtTime(playbackRate.value, this.context.currentTime); - playbackRate.linearRampToValueAtTime(0, this.context.currentTime + GAME_OVER_LENGTH); - - // Gain. - const gain = this.audioAnalyser.gainNode.gain; - gain.setValueAtTime(gain.value, this.context.currentTime); - gain.linearRampToValueAtTime(0, this.context.currentTime + GAME_OVER_LENGTH); - - setTimeout(() => { - if (!this.data.isGameOver) { return; } - this.stopAudio(); - }, 3500); - }, - - onRestart: function () { - this.isAudioPlaying = false; - - // Restart, get new buffer source node and play. - if (this.source) { this.source.disconnect(); } - - // Clear gain interpolation values from game over. - const gain = this.audioAnalyser.gainNode.gain; - gain.cancelScheduledValues(0); - - this.data.analyserEl.addEventListener('audioanalyserbuffersource', evt => { - this.source = evt.detail; - this.el.sceneEl.emit('songloadfinish', null, false); - }, ONCE); - this.audioAnalyser.refreshSource(); - }, - - onWallHitStart: function () { - const gain = this.audioAnalyser.gainNode.gain; - gain.linearRampToValueAtTime(0.1, this.context.currentTime + 0.1); - }, - - onWallHitEnd: function () { - const gain = this.audioAnalyser.gainNode.gain; - gain.linearRampToValueAtTime(BASE_VOLUME, this.context.currentTime + 0.1); - }, - - startAudio: function () { - const gain = this.audioAnalyser.gainNode.gain; - gain.setValueAtTime(BASE_VOLUME, this.context.currentTime); - this.songStartTime = this.context.currentTime; - this.source.onended = this.onSongComplete; - this.source.start(0, skipDebug || 0); - this.isAudioPlaying = true; - }, - - getCurrentTime: function () { - return this.context.currentTime - this.songStartTime; - } -}); diff --git a/src/components/stage-colors.js b/src/components/stage-colors.js deleted file mode 100644 index 4f54957be..000000000 --- a/src/components/stage-colors.js +++ /dev/null @@ -1,147 +0,0 @@ -function $ (id) { return document.getElementById(id); } - -import COLORS from '../constants/colors'; - -// Stage animations have a consistent pattern so animations generated via loop. -const animatables = [ - {name: 'bgcolor', property: 'backglow.color'}, - {name: 'leftglow', property: 'leftsideglow.color'}, - {name: 'rightglow', property: 'rightsideglow.color'} -]; - -// {id: 'gameover', dur: 500, to: 'off'}, -const animations = [ - {id: 'off', dur: 500, to: 'off'}, - {id: 'primary', dur: 5, to: 'primary'}, - {id: 'primarybright', dur: 500, from: 'tertiary', to: 'primarybright'}, - {id: 'secondary', dur: 5, to: 'secondary'}, - {id: 'secondarybright', dur: 500, from: 'tertiary', to: 'secondarybright'} -]; - -// Mapping of index to our stage event IDs. -const colorCodes = [ - 'off', - 'secondary', - 'secondary', - 'secondarybright', - '', - 'primary', - 'primary', - 'primarybright', - 'primarybright' -]; - -AFRAME.registerComponent('stage-colors', { - schema: { - colorScheme: {default: 'default'} - }, - - init: function () { - this.el.addEventListener('cleargame', this.resetColors.bind(this)); - this.el.sceneEl.addEventListener('playbuttonclick', this.resetColors.bind(this)); - setAnimations(this.el.sceneEl, this.data.colorScheme); - }, - - update: function (oldData) { - if (oldData.colorScheme && - this.data.colorScheme !== oldData.colorScheme) { - updateAnimations(this.el.sceneEl, this.data.colorScheme); - } - }, - - play: function () { - this.el.emit('bgcolorsecondary', null, false); - }, - - setColor: function (target, code) { - if (!colorCodes[code]) { - code = 5; - } - - if (target.startsWith('curve')) { - // New event style. - this.el.emit(`${target}stageeventcolor`, colorCodes[code].replace('bright', ''), false); - } else { - this.el.emit(`${target}color${colorCodes[code]}`, null, false); - } - }, - - /** - * Set synchronously, no animation for performance. - */ - setColorInstant: function (target, code) { - const materials = this.el.sceneEl.systems.materials; - - if (target === 'stars') { - let color; - if (code === 0) { - color = COLORS.schemes[this.data.colorScheme].secondarybright; - } else { - color = COLORS.schemes[this.data.colorScheme].secondary; - } - set(materials.stars, 'color', color); - return; - } - - const color = COLORS.schemes[this.data.colorScheme][colorCodes[code]]; - if (target === 'moon') { - set(materials.moon, 'tint', color); - } - }, - - resetColors: function () { - this.el.emit('bgcolorsecondary', null, false); - this.el.emit('curveevenstageeventcolor', 'off', false); - this.el.emit('curveoddstageeventcolor', 'off', false); - } -}); -/** * Set stage animations defined in the objects at top. - */ -function setAnimations (scene, scheme) { - for (let i = 0; i < animatables.length; i++) { - const animatable = animatables[i]; - for (let j = 0; j < animations.length; j++) { - const animation = animations[j]; - - scene.setAttribute(`animation__${animatable.name}${animation.id}`, { - property: `systems.materials.${animatable.property}`, - type: 'color', - isRawProperty: true, - easing: 'linear', - dur: animation.dur, - from: animation.from ? COLORS.schemes[scheme][animation.from] : '', - startEvents: `${animatable.name}${animation.id}`, - to: COLORS.schemes[scheme][animation.to] - }); - } - } -} - -/** - * Update `to` and `from ` of stage animations. - */ -function updateAnimations (scene, scheme) { - for (let i = 0; i < animatables.length; i++) { - const animatable = animatables[i]; - for (let j = 0; j < animations.length; j++) { - const animation = animations[j]; - const attr = `animation__${animatable.name}${animation.id}`; - if (animation.from) { - scene.setAttribute(attr, 'from', COLORS.schemes[scheme][animation.from]); - } - scene.setAttribute(attr, 'to', COLORS.schemes[scheme][animation.to]); - } - } -} - -const auxColor = new THREE.Color(); -function set (mat, name, color) { - auxColor.set(color); - if (mat.uniforms) { - mat.uniforms[name].value.x = auxColor.r; - mat.uniforms[name].value.y = auxColor.g; - mat.uniforms[name].value.z = auxColor.b; - } else { - mat[name].set(color); - } -} diff --git a/src/components/stage-lasers.js b/src/components/stage-lasers.js deleted file mode 100644 index b84533b07..000000000 --- a/src/components/stage-lasers.js +++ /dev/null @@ -1,33 +0,0 @@ -AFRAME.registerComponent('stage-lasers', { - schema: { - enabled: {default: true} - }, - - init: function () { - this.speed = 0; - this.lasers = [ - this.el.children[0].object3D, - this.el.children[1].object3D, - this.el.children[2].object3D - ]; - }, - - pulse: function (speed) { - this.speed = speed / 8; - }, - - tick: function (time, delta) { - if (this.speed === 0) { return; } - delta /= 1000; - if (!this.data.enabled) { - this.speed *= 0.97; - if (Math.abs(this.speed) < 0.01) { - this.speed = 0; - return; - } - } - this.lasers[0].rotation.z += this.speed * delta; - this.lasers[1].rotation.z -= this.speed * delta * 1.01; - this.lasers[2].rotation.z += this.speed * delta * 1.02; - } -}); diff --git a/src/components/stars.js b/src/components/stars.js deleted file mode 100644 index 26a1b4088..000000000 --- a/src/components/stars.js +++ /dev/null @@ -1,27 +0,0 @@ -const COLORS = require('../constants/colors'); - -AFRAME.registerComponent('stars', { - schema: { - color: {type: 'color', default: COLORS.initial.secondary}, - count: {default: 500}, - radius: {default: 300} - }, - - init: function () { - const rand = () => (Math.random() - 0.5) * this.data.radius * 2.0; - const geometry = new THREE.BufferGeometry(); - this.material = this.el.sceneEl.systems.materials.stars; - const positions = []; - for (let i = 0; i < this.data.count; i++) { - positions.push(rand(), rand(), rand() * 4); - } - geometry.setAttribute('position', new THREE.Float32BufferAttribute(positions, 3)); - geometry.computeBoundingSphere(); - const points = new THREE.Points(geometry, this.material); - this.el.setObject3D('stars', points); - }, - - update: function () { - this.material.color.setStyle(this.data.color); - } -}); diff --git a/src/components/stats-param.js b/src/components/stats-param.js deleted file mode 100644 index 389bacc05..000000000 --- a/src/components/stats-param.js +++ /dev/null @@ -1,7 +0,0 @@ -AFRAME.registerComponent('stats-param', { - init: function () { - if (AFRAME.utils.getUrlParameter('stats') === 'true') { - this.el.setAttribute('stats', ''); - } - } -}); diff --git a/src/components/stepback.js b/src/components/stepback.js deleted file mode 100644 index 0c779ac92..000000000 --- a/src/components/stepback.js +++ /dev/null @@ -1,29 +0,0 @@ -AFRAME.registerComponent('stepback', { - init: function () { - this.message = document.getElementById('stepback'); - this.camera = document.getElementById('camera'); - this.lastTime = 0; - this.limit = -(3.0 / 2 - 0.6); - this.throttling = 300; - }, - - tick: function (time, delta) { - if (time - this.lastTime < this.throttling) { return; } - - var camPos = this.camera.object3D.position; - var msgPos = this.message.object3D.position; - - if (camPos.z < this.limit) { - this.throttling = 10; - this.message.object3D.visible = true; - this.message.getObject3D('mesh').material.opacity = 1 - Math.abs(camPos.z - msgPos.z); - msgPos.x = camPos.x; - msgPos.y = camPos.y; - }else { - this.message.object3D.visible = false; - this.throttling = 500; - } - - this.lastTime = time; - } -}); diff --git a/src/components/sub-object.js b/src/components/sub-object.js deleted file mode 100644 index 7b7d5eed5..000000000 --- a/src/components/sub-object.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Pull a submesh out of a model file. - */ -AFRAME.registerComponent('sub-object', { - schema: { - from: {type: 'selector'}, - name: {type: 'string'} - }, - - init: function () { - var el = this.el; - var data = this.data; - - data.from.addEventListener('model-loaded', evt => { - const model = evt.detail.model; - const subset = model.getObjectByName(data.name); - el.setObject3D('mesh', subset.clone()); - el.setAttribute('material', 'shader', 'flat'); - el.emit('subobjectloaded', null, false); - }); - } -}); diff --git a/src/components/super-keyboard.js b/src/components/super-keyboard.js deleted file mode 100644 index 73f96e3fb..000000000 --- a/src/components/super-keyboard.js +++ /dev/null @@ -1,596 +0,0 @@ -/* global AFRAME */ -var KEYBOARDS = { - superkeyboard: {wrapCount: 20, inputOffsetY: 0.008, inputOffsetX: 0.08, img: 'keyboard.png', hoverImg: 'keyboard-hover.png', layout: [{'key': '1', 'x': 0.013, 'y': 0.03, 'w': 0.093, 'h': 0.176}, {'key': '2', 'x': 0.106, 'y': 0.03, 'w': 0.088, 'h': 0.176}, {'key': '3', 'x': 0.194, 'y': 0.03, 'w': 0.077, 'h': 0.176}, {'key': '4', 'x': 0.271, 'y': 0.03, 'w': 0.085, 'h': 0.176}, {'key': '5', 'x': 0.356, 'y': 0.03, 'w': 0.081, 'h': 0.176}, {'key': '6', 'x': 0.437, 'y': 0.03, 'w': 0.081, 'h': 0.176}, {'key': '8', 'x': 0.603, 'y': 0.03, 'w': 0.082, 'h': 0.176}, {'key': '7', 'x': 0.519, 'y': 0.03, 'w': 0.084, 'h': 0.176}, {'key': '9', 'x': 0.685, 'y': 0.03, 'w': 0.076, 'h': 0.176}, {'key': '0', 'x': 0.76, 'y': 0.03, 'w': 0.088, 'h': 0.176}, {'key': 'Delete', 'x': 0.867, 'y': 0.03, 'w': 0.124, 'h': 0.176}, {'key': 'q', 'x': 0.013, 'y': 0.213, 'w': 0.098, 'h': 0.186}, {'key': 'w', 'x': 0.111, 'y': 0.213, 'w': 0.107, 'h': 0.186}, {'key': 'e', 'x': 0.218, 'y': 0.213, 'w': 0.096, 'h': 0.186}, {'key': 'r', 'x': 0.313, 'y': 0.213, 'w': 0.095, 'h': 0.186}, {'key': 't', 'x': 0.408, 'y': 0.213, 'w': 0.094, 'h': 0.186}, {'key': 'y', 'x': 0.503, 'y': 0.213, 'w': 0.099, 'h': 0.186}, {'key': 'u', 'x': 0.602, 'y': 0.213, 'w': 0.097, 'h': 0.186}, {'key': 'i', 'x': 0.701, 'y': 0.213, 'w': 0.085, 'h': 0.186}, {'key': 'o', 'x': 0.786, 'y': 0.213, 'w': 0.099, 'h': 0.186}, {'key': 'p', 'x': 0.885, 'y': 0.213, 'w': 0.097, 'h': 0.186}, {'key': 'a', 'x': 0.063, 'y': 0.408, 'w': 0.1, 'h': 0.182}, {'key': 's', 'x': 0.163, 'y': 0.408, 'w': 0.097, 'h': 0.182}, {'key': 'd', 'x': 0.26, 'y': 0.408, 'w': 0.098, 'h': 0.182}, {'key': 'f', 'x': 0.358, 'y': 0.408, 'w': 0.094, 'h': 0.182}, {'key': 'g', 'x': 0.452, 'y': 0.408, 'w': 0.1, 'h': 0.182}, {'key': 'h', 'x': 0.552, 'y': 0.408, 'w': 0.105, 'h': 0.182}, {'key': 'j', 'x': 0.657, 'y': 0.408, 'w': 0.085, 'h': 0.182}, {'key': 'k', 'x': 0.743, 'y': 0.408, 'w': 0.105, 'h': 0.182}, {'key': 'l', 'x': 0.848, 'y': 0.408, 'w': 0.1, 'h': 0.182}, {'key': 'z', 'x': 0.107, 'y': 0.596, 'w': 0.106, 'h': 0.197}, {'key': 'x', 'x': 0.213, 'y': 0.596, 'w': 0.1, 'h': 0.197}, {'key': 'c', 'x': 0.313, 'y': 0.596, 'w': 0.093, 'h': 0.197}, {'key': 'v', 'x': 0.406, 'y': 0.596, 'w': 0.096, 'h': 0.197}, {'key': 'b', 'x': 0.502, 'y': 0.596, 'w': 0.093, 'h': 0.197}, {'key': 'n', 'x': 0.595, 'y': 0.596, 'w': 0.099, 'h': 0.197}, {'key': 'm', 'x': 0.694, 'y': 0.596, 'w': 0.106, 'h': 0.197}, {'key': ' ', 'x': 0.372, 'y': 0.798, 'w': 0.249, 'h': 0.169}, {'key': 'Insert', 'x': 0.017, 'y': -0.001, 'w': 0.038, 'h': 0.018}]} -}; - -if (typeof AFRAME === 'undefined') { - throw new Error('Component attempted to register before AFRAME was available.'); -} - -var FontFactors = { - roboto: 17, - aileronsemibold: 20, - dejavu: 20.5, - exo2bold: 20, - exo2semibold: 20.3, - kelsonsans: 22.8, - monoid: 19.5, - mozillavr: 9.5, - sourcecodepro: 20.3 -}; - -AFRAME.registerComponent('super-keyboard', { - schema: { - align: {default: 'left', oneOf: ['left', 'center', 'right']}, - blinkingSpeed: {type: 'int', default: 400}, - filters: {type: 'array'}, - // roboto aileronsemibold dejavu exo2bold exo2semibold kelsonsans monoid sourcecodepro - font: {default: 'aileronsemibold'}, - hand: {type: 'selector'}, - imagePath: {default: '.'}, - injectToRaycasterObjects: {default: true}, - inputColor: {type: 'color', default: '#6699ff'}, - interval: {type: 'int', default: 50}, - keyBgColor: {type: 'color', default: '#000'}, - keyColor: {type: 'color', default: '#6699ff'}, - keyHoverColor: {type: 'color', default: '#1A407F'}, - keyPressColor: {type: 'color', default: '#5290F6'}, - label: {type: 'string', default: ''}, - labelColor: {type: 'color', default: '#aaa'}, - maxLength: {type: 'int', default: 0}, - model: {default: 'basic'}, - show: {default: true}, - value: {type: 'string', default: ''}, - width: {default: 0.8} - }, - - init: function () { - this.el.addEventListener('mousedown', this.click.bind(this)); - this.changeEventDetail = {}; - - this.keys = null; - this.focused = false; - this.keyHover = null; - this.prevCheckTime = null; - this.shift = false; - - this.rawValue = this.data.value; - this.defaultValue = this.data.value; - - this.userFilterFunc = null; - this.intervalId = 0; - - // Create keyboard image. - this.kbImg = document.createElement('a-entity'); - this.kbImg.classList.add('keyboardRaycastable'); - this.kbImg.classList.add('superKeyboardImage'); - this.kbImg.addEventListener('raycaster-intersected', this.hover.bind(this)); - this.kbImg.addEventListener('raycaster-intersected-cleared', this.blur.bind(this)); - this.el.appendChild(this.kbImg); - - // Create label. - this.label = document.createElement('a-entity'); - this.label.setAttribute('text', { - align: 'center', - font: this.data.font, - baseline: 'bottom', - lineHeight: 40, - shader: 'msdf', - negate: true, - value: this.data.label, - color: this.data.labelColor, - width: this.data.width, - wrapCount: 30}); - this.el.appendChild(this.label); - - // Create input. - this.textInput = document.createElement('a-entity'); - this.textInput.setAttribute('mixin', 'superKeyboardTextInput'); - this.textInput.setAttribute('text', { - align: this.data.align, - font: this.data.font, - lineHeight: 35, - value: this.data.value, - color: this.data.inputColor, - width: this.data.width, - wrapCount: 20 - }); - this.el.appendChild(this.textInput); - - this.cursor = document.createElement('a-entity'); - this.cursor.object3D.position.set(0, 0, 0.001); - this.cursor.setAttribute('material', {shader: 'flat', color: this.data.inputColor}); - this.textInput.appendChild(this.cursor); - this.cursorUpdated = false; - - this.keyBgColor = new THREE.Color(); - this.keyHoverColor = new THREE.Color(); - this.keyPressColor = new THREE.Color(); - - var self = this; - document.addEventListener('keydown', function (ev) { - if (ev.key === 't') { - var ss = ''; - var s = 'abcdefghijklmopqrstuvQWIEUTGASDLIGKBXACQWETL102394676457'; - var l = Math.floor(Math.random() * 20); - for (var i = 0; i < l; i++) ss += s[Math.floor(Math.random() * s.length)]; - self.el.setAttribute('super-keyboard', {value: ss}); - } - }); - - document.addEventListener('show', this.open.bind(this)); - - this.hand = null; - this.handListenersSet = false; - this.raycaster = null; - }, - - update: function (oldData) { - var kbdata = KEYBOARDS[this.data.model]; - var w = this.data.width; - var h = this.data.width / 2; - var w2 = w / 2; - var h2 = h / 2; - - if (kbdata === undefined) { - console.error('super-keyboard ERROR: model "' + this.data.model + '" undefined.'); - return; - } - - if (!oldData || this.defaultValue !== oldData.defaultValue) { - this.rawValue = this.data.value; - this.defaultValue = this.data.value; - this.updateTextInput(this.filter(this.data.value)); - } else { - this.updateTextInput(this.filter(this.rawValue)); - } - - if (this.data.width !== oldData.width || - this.data.height !== oldData.height || - this.data.keyColor !== oldData.keyColor) { - this.kbImg.setAttribute('geometry', {primitive: 'plane', width: w, height: h}); - this.kbImg.setAttribute('material', { - shader: 'flat', - src: this.data.imagePath + '/' + kbdata.img, - color: this.data.keyColor, - transparent: true - }); - } - - if (this.data.label !== oldData.label || - this.data.labelColor !== oldData.labelColor || - this.data.width !== oldData.width) { - this.label.setAttribute('text', { - value: this.data.label, color: this.data.labelColor, width: this.data.width}); - this.label.object3D.position.set(0, 0.4 * w, -0.02); - } - - if (this.data.width !== oldData.width || - this.data.keyBgColor !== oldData.keyBgColor) { - this.initKeyColorPlane(); - } - - var inputx = this.data.align !== 'center' ? kbdata.inputOffsetX * w : 0; - if (this.data.align === 'right') { inputx *= -1; } - - if (this.data.font !== oldData.font || - this.data.inputColor !== oldData.inputColor || - this.data.width !== oldData.width || - this.data.align !== oldData.align) { - this.textInput.setAttribute('text', { - font: this.data.font, - color: this.data.inputColor, - width: w, - wrapCount: kbdata.wrapCount, - align: this.data.align - }); - } - - // Some hack where the inputRect is stored in the Insert key. - for (var i = 0; i < kbdata.layout.length; i++) { - var kdata = kbdata.layout[i]; - if (kdata.key === 'Insert') { - this.inputRect = kdata; - } - } - - this.textInput.object3D.position.set( - inputx, - (w / 4) - (this.inputRect.y + this.inputRect.h / 2) * w / 2 + kbdata.inputOffsetY * w, - 0.002 - ); - - if (this.data.width !== oldData.width) { - this.cursor.setAttribute('geometry', { - primitive: 'plane', width: 0.03 * w, height: 0.01 * w}); - } - - this.updateCursorPosition(); - this.setupHand(); - - this.keyBgColor.set(this.data.keyBgColor); - this.keyHoverColor.set(this.data.keyHoverColor); - this.keyPressColor.set(this.data.keyPressColor); - - if (this.data.show) { - this.open(); - } else { - this.close(); - } - }, - - tick: function (time) { - var intersection; - - if (this.prevCheckTime && (time - this.prevCheckTime < this.data.interval)) { return; } - if (!this.prevCheckTime) { - this.prevCheckTime = time; - return; - } - - if (!this.raycaster) { return; } - if (!this.focused) { return; } - - intersection = this.raycaster.getIntersection(this.kbImg); - if (!intersection) { return; } - - var uv = intersection.uv; - var keys = KEYBOARDS[this.data.model].layout; - for (var i = 0; i < keys.length; i++) { - var k = keys[i]; - if (uv.x > k.x && uv.x < k.x + k.w && (1.0 - uv.y) > k.y && (1.0 - uv.y) < k.y + k.h) { - if (this.keyHover !== k) { - // Update key hover. - this.keyHover = k; - this.updateKeyColorPlane(this.keyHover.key, this.keyHoverColor); - } - break; - } - } - }, - - play: function () { - if (!this.cursorUpdated) { return; } - this.startBlinking(); - }, - - pause: function () { - this.stopBlinking(); - }, - - /** - * The plane for visual feedback when a key is hovered or clicked - */ - initKeyColorPlane: function () { - var kbdata = KEYBOARDS[this.data.model]; - var keyColorPlane = this.keyColorPlane = document.createElement('a-entity'); - keyColorPlane.classList.add('superKeyboardKeyColorPlane'); - keyColorPlane.object3D.position.z = 0.001; - keyColorPlane.object3D.visible = false; - keyColorPlane.setAttribute('geometry', {primitive: 'plane', buffer: false}); - keyColorPlane.setAttribute('material', {shader: 'flat', color: this.data.keyBgColor, - transparent: true}); - if (kbdata.hoverImg) { - keyColorPlane.setAttribute('material', {src: this.data.imagePath + '/' + kbdata.hoverImg}); - } - - keyColorPlane.addEventListener('componentinitialized', function (evt) { - if (evt.detail.name !== 'material') { return; } - if (!kbdata.hoverImg) { - this.getObject3D('mesh').material.blending = THREE.AdditiveBlending; - } - }); - this.el.appendChild(keyColorPlane); - }, - - /** - * Move key color plane to appropriate position, scale, and change color. - */ - updateKeyColorPlane: function (key, color) { - var kbdata = KEYBOARDS[this.data.model]; - var keyColorPlane = this.keyColorPlane; - - // Unset. - if (!key) { - keyColorPlane.object3D.visible = false; - return; - } - - for (var i = 0; i < kbdata.layout.length; i++) { - var kdata = kbdata.layout[i]; - if (kdata.key !== key) { continue; } - var w = this.data.width; - var h = this.data.width / 2; - var w2 = w / 2; - var h2 = h / 2; - var keyw = kdata.w * w; - var keyh = kdata.h * h; - // Size. - keyColorPlane.object3D.scale.x = keyw; - keyColorPlane.object3D.scale.y = keyh; - // Position. - keyColorPlane.object3D.position.x = kdata.x * w - w2 + keyw / 2; - keyColorPlane.object3D.position.y = (1 - kdata.y) * h - h2 - keyh / 2; - // Color. - keyColorPlane.getObject3D('mesh').material.color.copy(color); - // UVs. - - var geometry = keyColorPlane.getObject3D('mesh').geometry; - var uvSet = geometry.faceVertexUvs[0]; - var kdataY = 1 - kdata.y; - uvSet[0][0].set(kdata.x, kdataY); - uvSet[0][1].set(kdata.x, kdataY - kdata.h); - uvSet[0][2].set(kdata.x + kdata.w, kdataY); - uvSet[1][0].set(kdata.x, kdataY - kdata.h); - uvSet[1][1].set(kdata.x + kdata.w, kdataY - kdata.h); - uvSet[1][2].set(kdata.x + kdata.w, kdataY); - geometry.uvsNeedUpdate = true; - break; - } - keyColorPlane.object3D.visible = true; - }, - - setupHand: function () { - if (this.hand && this.hand.ownRaycaster) { - this.hand.removeAttribute('raycaster'); - } - if (this.data.hand) { - this.hand = this.data.hand; - } else { - this.hand = document.querySelector([ - '[cursor]', - '[vive-controls]', - '[tracked-controls]', - '[oculus-touch-controls]', - '[windows-motion-controls]', - '[hand-controls]', - '[daydream-controls] [cursor] > [raycaster]' - ].join(',')); - } - - if (!this.hand) { - console.error('super-keyboard: no controller found. Add with controller or specify with super-keyboard="hand: #selectorToController".'); - } else { - if (!this.hand.hasLoaded) { - this.hand.addEventListener('loaded', this.setupHand.bind(this)); - return; - } - var raycaster = this.hand.components['raycaster']; - var params = {}; - - if (!raycaster) { - this.hand.ownRaycaster = true; - params.showLine = this.data.show; - params.enabled = this.data.show; - if (this.data.injectToRaycasterObjects) { - params.objects = '.keyboardRaycastable'; - } - this.hand.setAttribute('raycaster', params); - } else { - this.hand.ownRaycaster = false; - if (this.data.injectToRaycasterObjects) { - var objs = raycaster.data.objects.split(','); - if (objs.indexOf('.keyboardRaycastable') === -1) { - objs.push('.keyboardRaycastable'); - } - params.objects = objs.join(',').replace(/^,/, ''); - this.hand.setAttribute('raycaster', params); - } - } - - this.raycaster = this.hand.components.raycaster; - } - }, - - filter: function (str) { - if (str === '') { return ''; } - for (var i = 0; i < this.data.filters.length; i++) { - switch (this.data.filters[i]) { - case 'custom': { - if (this.userFilterFunc) str = this.userFilterFunc(str); - break; - } - case 'allupper': { - str = str.toUpperCase(); - break; - } - case 'alllower': { - str = str.toLowerCase(); - break; - } - case 'title': { - str = str.split(' ').map(function (s) { return s[0].toUpperCase() + s.substr(1); }).join(' '); - break; - } - case 'numbers': { - str = str.split('').filter(function (c) { return !isNaN(parseInt(c)) || c === '.'; }).join(''); - break; - } - case 'first': { - str = str[0].toUpperCase() + str.substr(1); - break; - } - case 'trim': { - str = str.trim(); - break; - } - } - } - return this.data.maxLength > 0 ? str.substr(0, this.data.maxLength) : str; - }, - - click: function (ev) { - if (!this.keyHover) { return; } - - switch (this.keyHover.key) { - case 'Enter': { - this.accept(); - break; - } - case 'Insert': { - return; - } - case 'Delete': { - this.rawValue = this.rawValue.substr(0, this.rawValue.length - 1); - var newValue = this.filter(this.rawValue); - this.el.setAttribute('super-keyboard', 'value', newValue); - this.updateTextInput(newValue); - this.changeEventDetail.value = newValue; - this.el.emit('superkeyboardchange', this.changeEventDetail); - break; - } - case 'Shift': { - this.shift = !this.shift; - this.keyHover.el.setAttribute('material', 'color', - this.shift ? this.data.keyHoverColor : this.data.keyBgColor - ); - break; - } - case 'Escape': { - this.dismiss(); - break; - } - default: { - if (this.data.maxLength > 0 && this.rawValue.length > this.data.maxLength) { break; } - this.rawValue += this.shift ? this.keyHover.key.toUpperCase() : this.keyHover.key; - var newValue = this.filter(this.rawValue); - this.el.setAttribute('super-keyboard', 'value', newValue); - this.updateTextInput(newValue); - this.changeEventDetail.value = newValue; - this.el.emit('superkeyboardchange', this.changeEventDetail); - break; - } - } - - this.updateKeyColorPlane(this.keyHover.key, this.keyPressColor); - var self = this; - setTimeout(function () { - self.updateKeyColorPlane(self.keyHover.key, self.keyHoverColor); - }, 100); - this.updateCursorPosition(); - }, - - open: function () { - this.el.object3D.visible = true; - if (this.hand && this.hand.ownRaycaster) { - this.hand.setAttribute('raycaster', {showLine: true, enabled: true}); - } - }, - - close: function () { - this.el.object3D.visible = false; - if (this.hand && this.hand.ownRaycaster) { - this.hand.setAttribute('raycaster', {showLine: false, enabled: false}); - } - }, - - accept: function () { - this.el.object3D.visible = false; - if (this.hand && this.hand.ownRaycaster) { - this.hand.setAttribute('raycaster', {showLine: false, enabled: false}); - } - this.el.emit('superkeyboardinput', {value: this.data.value}); - this.data.show = false; - }, - - dismiss: function () { - this.data.value = this.defaultValue; - this.updateTextInput(); - this.el.object3D.visible = false; - if (this.hand && this.hand.ownRaycaster) { - this.hand.setAttribute('raycaster', {showLine: false, enabled: false}); - } - this.el.emit('superkeyboarddismiss'); - this.data.show = false; - }, - - blur: function () { - this.focused = false; - if (this.keyHover && this.keyHover.key !== 'Shift') { - this.keyColorPlane.object3D.visible = false; - } - this.keyHover = null; - }, - - hover: function (ev) { - this.focused = true; - }, - - startBlinking: function () { - this.stopBlinking(); - this.intervalId = window.setInterval(this.blink.bind(this), this.data.blinkingSpeed); - }, - - stopBlinking: function () { - window.clearInterval(this.intervalId); - this.intervalId = 0; - }, - - blink: function () { - this.cursor.object3D.visible = !this.cursor.object3D.visible; - }, - - setCustomFilter: function (f) { - this.userFilterFunc = f; - }, - - addCustomModel: function (name, model) { - if (!name) { return; } - KEYBOARDS[name] = model; - }, - - updateCursorPosition: function () { - var font = this.textInput.components.text.currentFont; - if (!font) { - var self = this; - this.cursor.object3D.visible = false; - window.setTimeout(function () { - self.updateCursorPosition(); - self.startBlinking(); - }, 700); - return; - } - - var w = this.data.width; - var kbdata = KEYBOARDS[this.data.model]; - var posy = -this.inputRect.h / 2 * w / 2.4 + kbdata.inputOffsetY * w; - var ratio = this.data.width / this.textInput.components.text.data.wrapCount; - var pos = 0; - var fontFactor = FontFactors[this.textInput.components.text.data.font]; - if (fontFactor === undefined) { fontFactor = 20; } - for (var i = 0; i < Math.min(11, this.data.value.length); i++) { - var char = findFontChar(font.chars, this.data.value.charCodeAt(i)); - pos += char.width + char.xadvance * (char.id === 32 ? 2 : 1); - } - if (this.data.align === 'center') { - pos = pos * ratio * fontFactor * 0.0011 / 2.0 + 0.02 * w; - } else if (this.data.align === 'left') { - pos = pos * ratio * fontFactor * 0.0011 + 0.02 * w; - pos -= w / 2; - } else if (this.data.align === 'right') { - pos = -pos * ratio * fontFactor * 0.0011 - 0.02 * w; - pos += w / 2; - } - this.cursor.object3D.position.set(pos * 0.92, posy + 0.05, 0.001); - this.cursorUpdated = true; - }, - - updateTextInput: function (value) { - this.textInput.setAttribute('text', 'value', backTruncate(value || this.data.value, 12)); - } -}); - -function backTruncate (str, length) { - if (!str) { return ''; } - if (str.length >= length) { - return '...' + str.substring(str.length - length, str.length); - } - return str; -} - -function findFontChar (chars, code) { - for (var i = 0; i < chars.length; i++) { - if (chars[i].id === code) { return chars[i]; } - } - return null; -} diff --git a/src/components/supercurve-color.js b/src/components/supercurve-color.js deleted file mode 100644 index 69e2d95a0..000000000 --- a/src/components/supercurve-color.js +++ /dev/null @@ -1,35 +0,0 @@ -const auxColor = new THREE.Color(); - -/** - * Listen to stage-events to change curve color. - */ -AFRAME.registerComponent('supercurve-color', { - init: function () { - const el = this.el; - - el.sceneEl.addEventListener('curveevenstageeventcolor', evt => { - if (!evt.detail || evt.detail === 'off') { - this.setColor('color1', 'primary'); - return; - } - this.setColor('color1', evt.detail); - }); - - el.sceneEl.addEventListener('curveoddstageeventcolor', evt => { - if (!evt.detail || evt.detail === 'off') { - this.setColor('color2', 'secondary'); - return; - } - this.setColor('color2', evt.detail); - }); - }, - - setColor: function (uniform, colorId) { - const colorVec = this.el.components.material.material.uniforms[uniform].value; - const color = this.el.sceneEl.systems.materials.scheme[colorId]; - auxColor.set(color); - colorVec.x = auxColor.r; - colorVec.y = auxColor.g; - colorVec.z = auxColor.b; - } -}); diff --git a/src/components/supercurve-shader.js b/src/components/supercurve-shader.js deleted file mode 100644 index 5a62d72de..000000000 --- a/src/components/supercurve-shader.js +++ /dev/null @@ -1,22 +0,0 @@ -import COLORS from '../constants/colors'; - -AFRAME.registerShader('supercurve', { - schema: { - cameraPercent: {type: 'number', is: 'uniform'}, - color1: {type: 'color', is: 'uniform', default: COLORS.initial.primary}, - color2: {type: 'color', is: 'uniform', default: COLORS.initial.secondary}, - fogColor: {type: 'color', is: 'uniform', default: COLORS.initial.primary}, - side: {default: 'double'}, - transparent: {default: true} - }, - - fragmentShader: require('./shaders/supercurve.frag.glsl'), - - vertexShader: require('./shaders/supercurve.vert.glsl'), - - update: function (data) { - this.updateVariables(data, 'attribute'); - this.updateVariables(data, 'uniform'); - this.el.sceneEl.systems.materials.registerCurve(this.material); - } -}); diff --git a/src/components/supercurve.js b/src/components/supercurve.js deleted file mode 100644 index 73b589c4d..000000000 --- a/src/components/supercurve.js +++ /dev/null @@ -1,311 +0,0 @@ -require('../../vendor/Curve'); -require('../../vendor/CatmullRomCurve3'); - -const EXTRA_LENGTH = 200; -const CURVE_SAMPLES = 350; -const CURVE_SECTION_LENGTH = 100; -const X_MAX_DEVIATION = 10; -const Y_MAX_DEVIATION = 10; -const WIDTH = 3; - -const positionVec3 = new THREE.Vector3(); -const normalVec3 = new THREE.Vector3(); - -/** - * For some reason, the front face is the bottom. - */ -AFRAME.registerComponent('supercurve', { - schema: { - debug: {default: false} - }, - - init: function () { - this.buffers = {}; - this.curve = null; - this.fullLength = null; - this.indexes = {}; - this.length = null; - this.points = []; - }, - - play: function () { - this.generateCurve(1500); - }, - - /** - * Generate a comfortable curve that starts straight from the origin. - * One point at a time, section length approximately defined by CURVE_SECTION_LENGTH - * varying the X and Y at the MAX_DEVIATIONs. - */ - generateCurve: function (length) { - this.length = length; - - length += EXTRA_LENGTH; // Add extra length for anticipation time past song duration. - this.fullLength = length; - - this.points.length = 0; - this.points.push(new THREE.Vector3(0, 0, 0)); - this.points.push(new THREE.Vector3(0, 0, -1 * CURVE_SECTION_LENGTH)); - - // Build curve one point at time, using curve section length to extend the Z, - // approximately. - let currentLength = CURVE_SECTION_LENGTH; - let prevPoint; - for (let i = 2; i <= Math.ceil(length / CURVE_SECTION_LENGTH) - 1; i++) { - prevPoint = this.points[i - 1]; - currentLength += CURVE_SECTION_LENGTH; - this.points.push(new THREE.Vector3( - prevPoint.x + (Math.random() * X_MAX_DEVIATION * 2 - X_MAX_DEVIATION), - prevPoint.y + (Math.random() * Y_MAX_DEVIATION * 2 - Y_MAX_DEVIATION), - -1 * currentLength - )); - } - - // Calculate last point so that curve ends at exactly the right length. - const almostCurve = new THREE.CatmullRomCurve3(this.points); - const almostLength = almostCurve.getLength(); - const leftoverLength = length - almostLength; - const lastTangent = almostCurve.getTangent(1, new THREE.Vector3()); - const lastPoint = this.points[this.points.length - 1].clone().add( - lastTangent.multiplyScalar(leftoverLength)); - this.points.push(lastPoint); - - this.setCurve(this.points); - this.el.emit('supercurvegenerate'); - }, - - /** - * Create BufferGeometry from curve from set of points. - */ - setCurve: function (inPoints) { - const buffers = this.buffers; - const data = this.data; - const el = this.el; - const indexes = this.indexes; - - // Make curve. - this.points = inPoints; - const curve = this.curve = new THREE.CatmullRomCurve3(inPoints); - - // Get curve info - const length = curve.getLength(); - const points = curve.getSpacedPoints(CURVE_SAMPLES); - const segmentLength = length / CURVE_SAMPLES; - - // Make geometry. - const geometry = new THREE.BufferGeometry(); - - // Number of vertices is number of curve points with two triangles. - // N + 2 for triangle strip. Times three for X / Y / Z of a vertex. - const bufferSize = ((CURVE_SAMPLES * 2) + 2); - - // Buffers. - buffers.position = new Float32Array(bufferSize * 3); - buffers.normal = new Float32Array(bufferSize * 3); - buffers.uvs = new Float32Array(bufferSize * 2); - indexes.position = 0; - indexes.normal = 0; - indexes.uvs = 0; - - const leftOffset = new THREE.Vector3(-1 * WIDTH / 2, 0, -1 * segmentLength / 2); - const rightOffset = new THREE.Vector3(WIDTH / 2, 0, -1 * segmentLength / 2); - - const halfSegmentLengthPercent = (segmentLength / 2) / length; - - // Add points, two tris at a time, by adding two vertices at a time to front of the curve. - for (let i = 0; i < points.length; i++) { - const percent = i / (points.length - 1); - const point = points[i]; - - // Check if point is origin because will mess up the normal calculation. - if (points[i].x === 0 && points[i].y === 0 && points[i].z === 0) { - points[i].set(0.001, 0, 0.001); - normalVec3.y = -1 * Math.abs(normalVec3.y); - } else { - normalVec3.copy(positionVec3).cross(points[i]).normalize(); - // Normal is upside down for some reason. - normalVec3.y = -1 * normalVec3.y; - } - - // Front left. - this.getPositionRelativeToTangent(percent, leftOffset, positionVec3); - buffers.position[indexes.position++] = positionVec3.x; - buffers.position[indexes.position++] = positionVec3.y; - buffers.position[indexes.position++] = positionVec3.z; - buffers.normal[indexes.normal++] = normalVec3.x; - buffers.normal[indexes.normal++] = normalVec3.y; - buffers.normal[indexes.normal++] = normalVec3.z; - buffers.uvs[indexes.uvs++] = 0; - buffers.uvs[indexes.uvs++] = percent; - - // Front right. - this.getPositionRelativeToTangent(percent, rightOffset, positionVec3); - buffers.position[indexes.position++] = positionVec3.x; - buffers.position[indexes.position++] = positionVec3.y; - buffers.position[indexes.position++] = positionVec3.z; - buffers.normal[indexes.normal++] = normalVec3.x; - buffers.normal[indexes.normal++] = normalVec3.y; - buffers.normal[indexes.normal++] = normalVec3.z; - buffers.uvs[indexes.uvs++] = 1; - buffers.uvs[indexes.uvs++] = percent; - - if (this.data.debug) { - const sphere = document.createElement('a-box'); - sphere.setAttribute('geometry', {width: 0.1, height: 0.1, depth: 0.1}); - sphere.setAttribute('material', {shader: 'flat', color: '#333'}); - sphere.object3D.position.copy(point); - sphere.object3D.position.y += 0.1; - el.appendChild(sphere); - } - } - - geometry.setAttribute('normal', new THREE.BufferAttribute(buffers.normal, 3)); - geometry.setAttribute('position', new THREE.BufferAttribute(buffers.position, 3)); - geometry.setAttribute('uv', new THREE.BufferAttribute(buffers.uvs, 2)); - - // Set mesh. - if (el.getObject3D('mesh')) { - el.getObject3D('mesh').geometry = THREE.BufferGeometryUtils.toTrianglesDrawMode(geometry, THREE.TriangleStripDrawMode); - } else { - const mesh = new THREE.Mesh(THREE.BufferGeometryUtils.toTrianglesDrawMode(geometry, THREE.TriangleStripDrawMode)); - el.setObject3D('mesh', mesh); - } - }, - - /** - * getPointAt that factors in extra length past the song duration. - */ - getPointAt: function (percent, vec3) { - percent = this.songProgressToCurveProgress(percent); - this.curve.getPointAt(percent, vec3); - }, - - /** - * getTangentAt that factors in extra length past the song duration. - */ - getTangentAt: function (percent, vec3) { - percent = this.songProgressToCurveProgress(percent); - this.curve.getTangentAt(percent, vec3); - }, - - /** - * Given a percent (from 0 to 1) along the curve, transform a position relative to the - * point along the curve and along the tangent. Such that the negative Z-axis points - * straight down the tangent. - */ - getPositionRelativeToTangent: (function () { - const helperObj3D = new THREE.Object3D(); - const helperPosition = new THREE.Vector3(); - const tangent = new THREE.Vector3(); - - return function (percent, position, target, reverseLookAt) { - const curve = this.curve; - - if (!helperObj3D.parent) { this.el.sceneEl.object3D.add(helperObj3D); } - - // Get point at percent. - this.getPointAt(percent, helperObj3D.position); - - // Get tangent at percent. - this.getTangentAt(percent, tangent); - - // Look down the curve. - if (reverseLookAt) { - helperObj3D.lookAt(helperPosition.copy(helperObj3D.position).sub(tangent)); - } else { - helperObj3D.lookAt(helperPosition.copy(helperObj3D.position).add(tangent)); - } - - // Get offset point in the local space. - helperObj3D.updateMatrixWorld(); - target.copy(position); - helperObj3D.localToWorld(target); - return target; - }; - })(), - - /** - * Align object3D to tangent at a certain spot on the curve. - */ - alignToCurve: (function () { - const curvePosition = new THREE.Vector3(); - const tangent = new THREE.Vector3(); - const lookAt = new THREE.Vector3(0, 0, -0.01); - const lookAtTarget = new THREE.Vector3(); - - return function (percent, object3D) { - this.getPositionRelativeToTangent(percent, lookAt, lookAtTarget); - object3D.lookAt(lookAtTarget); - object3D.position.y += 0.01; // Z-fighting - }; - })(), - - /** - * Factor in extra length. - */ - songProgressToCurveProgress: function (songProgress) { - return (songProgress * this.length) / this.fullLength; - }, - - curveProgressToSongProgress: function (curveProgress) { - return (curveProgress * this.fullLength) / this.length; - } -}); - -/** - * Follow along curve provided by supercurve component. - */ -AFRAME.registerComponent('supercurve-follow', { - schema: { - enabled: {default: false}, - speed: {type: 'number'}, - target: {type: 'selector'} - }, - - init: function () { - this.curveProgress = 0; - this.songProgress = 0; - }, - - update: function () { - this.supercurve = this.data.target.components.supercurve; - }, - - tick: (function () { - const lookAt = new THREE.Vector3(0, 0, 1); - const lookAtTarget = new THREE.Vector3(); - - return function (t, dt) { - const data = this.data; - const el = this.el; - - if (!data.enabled || !dt) { return; } - - if (this.curveProgress >= 1) { return; } - - const supercurve = this.supercurve; - const curve = supercurve.curve; - if (!curve) { return; } - - // Update progress based on speed. - this.curveProgress = this.curveProgress || 0; - const distanceTraveled = data.speed * (dt / 1000); - this.curveProgress += distanceTraveled / this.supercurve.fullLength; - - this.data.target.components.material.material.uniforms.cameraPercent.value = - this.curveProgress; - - if (this.curveProgress >= 1) { - this.curveProgress = 1; - this.data.target.components.material.material.uniforms.cameraPercent.value = - this.curveProgress; - return; - } - - // Update lookAt down the tangent. - curve.getPointAt(this.curveProgress, this.el.object3D.position); - this.songProgress = supercurve.curveProgressToSongProgress(this.curveProgress); - supercurve.alignToCurve(this.songProgress, this.el.object3D); - }; - })() -}); diff --git a/src/components/supercutfx-shader.js b/src/components/supercutfx-shader.js deleted file mode 100644 index 53b93e16b..000000000 --- a/src/components/supercutfx-shader.js +++ /dev/null @@ -1,34 +0,0 @@ -AFRAME.registerShader('superCutFxShader', { - schema: { - startTime: {type: 'float', is: 'uniform'}, - timeMs: {type: 'time', is: 'uniform'}, - color: {type: 'color', is: 'uniform'} - }, - - vertexShader: ` - varying vec2 uvs - varying vec3 worldPos - void main() { - uvs.xy = uv.xy - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ) - } - `, - - fragmentShader: ` - uniform float startTime - uniform float timeMs - uniform vec3 color - varying vec2 uvs - varying vec3 worldPos - - void main() { - float time = (timeMs - startTime) / 2000.0 - vec2 p = uvs.xy - 0.5 - float r = p.x * p.x + p.y * p.y - float alpha = 1.0 - smoothstep(time - 0.01, time, r) - alpha *= smoothstep(time - 0.1, time, r) - alpha *= 1.0 - time * 5.5 - gl_FragColor = vec4(color, alpha) - } - ` -}); diff --git a/src/components/supercutfx.js b/src/components/supercutfx.js deleted file mode 100644 index 9d08059a9..000000000 --- a/src/components/supercutfx.js +++ /dev/null @@ -1,40 +0,0 @@ -const auxColor = new THREE.Color(); - -AFRAME.registerComponent('supercutfx', { - schema: { - colorPrimary: {type: 'string'}, - colorSecondary: {type: 'string'} - }, - - init: function () { - this.rigEl = document.getElementById('curveFollowRig'); - this.startTime = -1100; // Pause on first tick. - }, - - createSuperCut: function (beatObject3D, color) { - const el = this.el; - const mesh = this.el.getObject3D('mesh'); - - mesh.material.transparent = true; - this.rigEl.object3D.worldToLocal(el.object3D.position.copy(beatObject3D.position)); - el.object3D.position.z -= 0.25; - el.object3D.visible = true; - - this.startTime = el.sceneEl.time; - - auxColor.set(color === 'red' ? this.data.colorPrimary : this.data.colorSecondary); - const colorUniform = mesh.material.uniforms.color.value; - colorUniform.x = auxColor.r; - colorUniform.y = auxColor.g; - colorUniform.z = auxColor.b; - mesh.material.uniforms.startTime.value = this.startTime - 50; - el.play(); - }, - - tick: function (time) { - if (time > this.startTime + 1000) { - this.el.object3D.visible = false; - this.el.pause(); - } - } -}); diff --git a/src/components/tail.js b/src/components/tail.js deleted file mode 100644 index 3e5d95c93..000000000 --- a/src/components/tail.js +++ /dev/null @@ -1,61 +0,0 @@ -/** - * Hand star-trail for Ride Mode. - */ -AFRAME.registerComponent('tail', { - schema: { - height: {default: 0.1}, - segments: {default: 10, type: 'int'}, - target: {type: 'selector'}, - width: {default: 1} - }, - - init: function () { - const data = this.data; - - const geometry = this.geometry = new THREE.PlaneBufferGeometry( - data.width, data.height, data.segments, 1); - geometry.deleteAttribute('normal'); - geometry.translate(data.width / 2, 0, 0); - - const material = this.el.sceneEl.systems.materials.handStarTrail; - const mesh = new THREE.Mesh(geometry, material); - mesh.frustumCulled = false; - this.el.setObject3D('mesh', mesh); - this.positions = geometry.attributes['position'].array; - this.numVerts = data.segments * 2 + 2; - this.geometry = geometry; - this.target = data.target.object3D; - this.targetPos = new THREE.Vector3(); - }, - - tick: function (time, delta) { - const positions = this.positions; - const targetPos = this.targetPos; - - let p; - let s = this.numVerts / 2 * 3; - let h = this.data.height / 2; - - for (let i = this.numVerts / 2 - 1; i > 0; i--) { - p = i * 3; - positions[p] = positions[p - 3]; - positions[p + 1] = positions[p - 2]; - positions[p + 2] = positions[p - 1]; - p += s; - positions[p] = positions[p - 3]; - positions[p + 1] = positions[p - 2]; - positions[p + 2] = positions[p - 1]; - } - - // Start of tail. - this.target.getWorldPosition(targetPos); - positions[0] = targetPos.x; - positions[1] = targetPos.y + h; - positions[2] = targetPos.z - 0.1; - positions[s + 0] = targetPos.x; - positions[s + 1] = targetPos.y - h; - positions[s + 2] = targetPos.z - 0.1; - - this.geometry.attributes.position.needsUpdate = true; - } -}); diff --git a/src/components/text-counter.js b/src/components/text-counter.js deleted file mode 100644 index 31d78d99d..000000000 --- a/src/components/text-counter.js +++ /dev/null @@ -1,50 +0,0 @@ -/** - * Animate text number value. - */ -AFRAME.registerComponent('text-counter', { - dependencies: ['text'], - - schema: { - decimals: {default: 0}, - dur: {default: 2000, type: 'int'}, - enabled: {default: false}, - emit: {default: false}, - prefix: {default: ''}, - suffix: {default: ''}, - value: {default: 0.0, type: 'float'} - }, - - init: function () { - this.currentValue = 0; - this.hasCompleted = false; - this.textValue = {value: ''}; - }, - - update: function (oldData) { - this.currentValue = 0; - this.textValue.value = `${this.data.prefix}${this.decimals(0)}${this.data.suffix}`; - this.el.setAttribute('text', this.textValue); - this.hasCompleted = false; - }, - - tick: function (time, timeDelta) { - if (!this.data.enabled || this.hasCompleted) { return; } - - this.currentValue += this.data.value * (timeDelta / this.data.dur); - - if (this.currentValue >= this.data.value) { - this.currentValue = this.data.value; - if (this.data.emit) { this.el.emit('textcounterdone', null, false); } - this.hasCompleted = true; - } - - this.textValue.value = - `${this.data.prefix}${this.decimals(this.currentValue)}${this.data.suffix}`; - this.el.setAttribute('text', this.textValue); - }, - - decimals: function (n) { - var d = Math.pow(10, this.data.decimals); - return (parseInt(n * d) / d).toFixed(this.data.decimals); - } -}); diff --git a/src/components/text-geometry.js b/src/components/text-geometry.js deleted file mode 100644 index c7a7cd22a..000000000 --- a/src/components/text-geometry.js +++ /dev/null @@ -1,56 +0,0 @@ -/** - * TextGeometry component for A-Frame. - */ -var debug = AFRAME.utils.debug; - -var error = debug('aframe-text-component:error'); - -var fontLoader = new THREE.FontLoader(); - -AFRAME.registerComponent('text-geometry', { - schema: { - bevelEnabled: {default: false}, - bevelSize: {default: 8, min: 0}, - bevelThickness: {default: 12, min: 0}, - curveSegments: {default: 12, min: 0}, - font: {type: 'asset', default: 'https://rawgit.com/ngokevin/kframe/master/components/text-geometry/lib/helvetiker_regular.typeface.json'}, - height: {default: 0.05, min: 0}, - size: {default: 0.5, min: 0}, - style: {default: 'normal', oneOf: ['normal', 'italics']}, - weight: {default: 'normal', oneOf: ['normal', 'bold']}, - value: {default: ''} - }, - - /** - * Called when component is attached and when component data changes. - * Generally modifies the entity based on the data. - */ - update: function (oldData) { - const data = this.data; - const el = this.el; - - if (!data.value) { return; } - - let mesh = el.getObject3D('mesh'); - if (!mesh) { - mesh = new THREE.Mesh(); - el.setObject3D('mesh', mesh); - } - - if (data.font.constructor === String) { - // Load typeface.json font. - fontLoader.load(data.font, function (response) { - const textData = AFRAME.utils.clone(data); - textData.font = response; - mesh.geometry = new THREE.TextGeometry(data.value, textData); - mesh.geometry.translate(-0.18, 0, -0.07); - }); - } else if (data.font.constructor === Object) { - // Set font if already have a typeface.json through setAttribute. - mesh.geometry = new THREE.TextGeometry(data.value, data); - mesh.geometry.translate(-0.18, 0, -0.07); - } else { - error('Must provide `font` (typeface.json) or `fontPath` (string) to text component.'); - } - } -}); diff --git a/src/components/text-truncate.js b/src/components/text-truncate.js deleted file mode 100644 index ba02ba34d..000000000 --- a/src/components/text-truncate.js +++ /dev/null @@ -1,18 +0,0 @@ -AFRAME.registerComponent('text-truncate', { - schema: { - value: {type: 'string'}, - length: {type: 'int', default: 10} - }, - - update: function () { - this.el.setAttribute('text', 'value', truncate(this.data.value, this.data.length)); - } -}); - -function truncate (str, length) { - if (!str) { return ''; } - if (str.length >= length) { - return str.substring(0, length - 3) + '...'; - } - return str; -} diff --git a/src/components/text-uppercase.js b/src/components/text-uppercase.js deleted file mode 100644 index 7728f7f77..000000000 --- a/src/components/text-uppercase.js +++ /dev/null @@ -1,9 +0,0 @@ -AFRAME.registerComponent('text-uppercase', { - schema: { - value: {type: 'string'} - }, - - update: function () { - this.el.setAttribute('text', 'value', this.data.value.toUpperCase()); - } -}); diff --git a/src/components/toggle-pause-play.js b/src/components/toggle-pause-play.js deleted file mode 100644 index c58b70455..000000000 --- a/src/components/toggle-pause-play.js +++ /dev/null @@ -1,10 +0,0 @@ -AFRAME.registerComponent('toggle-pause-play', { - schema: { - isPlaying: { default: false } - }, - - update: function () { - const action = this.data.isPlaying ? 'pause' : 'play'; - parent.postMessage(JSON.stringify({ verify: 'game-action', action}), '*'); - } -}); diff --git a/src/components/trail.js b/src/components/trail.js deleted file mode 100644 index edce5e50f..000000000 --- a/src/components/trail.js +++ /dev/null @@ -1,358 +0,0 @@ -import COLORS from '../constants/colors'; - -/** - * Trail effect via geometry. - */ -AFRAME.registerComponent('trail', { - schema: { - color: {default: 'primary'}, - colorScheme: {default: 'default'}, - enabled: {default: false}, - hand: {type: 'string'} - }, - - init: function () { - const geometry = this.geometry = new THREE.BufferGeometry(); - const maxPoints = this.maxPoints = 12; - const vertices = this.vertices = new Float32Array(36 * maxPoints); - const colors = this.colors = new Float32Array(48 * maxPoints); - - this.bladeColor = {alpha: 1.0}; - this.rigContainer = document.getElementById('rigContainer'); - - this.bladeEl = this.el.querySelector('.blade'); - - this.layers = 0; - this.bladeTrajectory = [ - { - top: new THREE.Vector3(-0.5, 0, 0), - center: new THREE.Vector3(0, 0, 0), - bottom: new THREE.Vector3(0.5, 0, 0) - }, - { - top: new THREE.Vector3(-0.5, 0.5, 0), - center: new THREE.Vector3(0, 0.5, 0), - bottom: new THREE.Vector3(0.5, 0.5, 0) - }, - { - top: new THREE.Vector3(-0.5, 1.0, 0), - center: new THREE.Vector3(0, 1.0, 0), - bottom: new THREE.Vector3(0.5, 1.0, 0) - } - ]; - - this.newSample = null; - - geometry.setAttribute('position', new THREE.BufferAttribute(vertices, 3).setUsage(THREE.DynamicDrawUsage)); - geometry.setAttribute('vertexColor', new THREE.BufferAttribute(colors, 4).setUsage(THREE.DynamicDrawUsage)); - - const material = new THREE.ShaderMaterial({ - side: THREE.DoubleSide, - vertexColors: THREE.VertexColors, - transparent: true, - depthTest: false, - blending: THREE.AdditiveBlending, - vertexShader: [ - 'varying vec4 vColor;', - 'attribute vec4 vertexColor;', - 'void main() {', - 'vec4 modelViewPosition = modelViewMatrix * vec4(position, 1.0);', - 'vColor = vertexColor;', - 'gl_Position = projectionMatrix * modelViewPosition;', - '}' - ].join(''), - fragmentShader: [ - 'varying vec4 vColor;', - 'uniform float pulse;', - 'void main() {', - 'gl_FragColor = vec4(vColor.xyz, vColor.a + pulse);', - '}' - ].join(''), - uniforms: { - pulse: {value: 0} - } - }); - - const mesh = this.mesh = new THREE.Mesh(geometry, material); - mesh.frustumCulled = false; - mesh.vertices = vertices; - this.rigContainer.setObject3D(`trail__${this.data.hand}`, mesh); - }, - - update: function (oldData) { - this.mesh.visible = this.data.enabled; - if (!oldData.enabled && this.data.enabled) { - this.enabledTime = this.el.sceneEl.time; - } - - // Update color scheme. - if (oldData.colorScheme !== this.data.colorScheme) { - const bladeColor = this.bladeColor = - new THREE.Color(COLORS.schemes[this.data.colorScheme][this.data.color]); - - this.bladeColor.red = this.bladeColor.r; - this.bladeColor.green = this.bladeColor.g; - this.bladeColor.blue = this.bladeColor.b; - } - }, - - tock: function (time, delta) { - if (!this.data.enabled) { return; } - // Delay before showing after enabled to prevent flash from old blade position. - if (!this.mesh.visible && time > this.enabledTime + 250) { this.mesh.visible = true; } - - this.mesh.material.uniforms.pulse.value *= 0.9; - this.sampleBladePosition(); - }, - - pulse: function () { - this.mesh.material.uniforms.pulse.value = 1; - }, - - addLayer: function (length) { - const color = this.bladeColor; - const colors = this.colors; - const segments = this.segments; - const vertices = this.vertices; - - let dx = 2 / segments; - let startX = -1.0; - - if (this.layers >= this.maxLayers) { this.layers = 0; } - - const bottomLayer = this.layers * length; - length = bottomLayer + length; - const indexOffset = this.layers * segments * 18; - const colorOffset = this.layers * segments * 24; - - for (let i = 0; i < segments; ++i) { - vertices[indexOffset + 18 * i] = startX + i * dx; - vertices[indexOffset + 18 * i + 1] = bottomLayer; - vertices[indexOffset + 18 * i + 2] = 0.0; - - colors[colorOffset + 24 * i] = color.red; - colors[colorOffset + 24 * i + 1] = color.green; - colors[colorOffset + 24 * i + 2] = color.blue; - colors[colorOffset + 24 * i + 3] = color.alpha; - - vertices[indexOffset + 18 * i + 3] = startX + i * dx; - vertices[indexOffset + 18 * i + 4] = length; - vertices[indexOffset + 18 * i + 5] = 0.0; - - colors[colorOffset + 24 * i + 4] = color.red; - colors[colorOffset + 24 * i + 5] = color.green; - colors[colorOffset + 24 * i + 6] = color.blue; - colors[colorOffset + 24 * i + 7] = color.alpha; - - vertices[indexOffset + 18 * i + 6] = startX + i * dx + dx; - vertices[indexOffset + 18 * i + 7] = length; - vertices[indexOffset + 18 * i + 8] = 0.0; - - colors[colorOffset + 24 * i + 8] = color.red; - colors[colorOffset + 24 * i + 9] = color.green; - colors[colorOffset + 24 * i + 10] = color.blue; - colors[colorOffset + 24 * i + 11] = color.alpha; - - vertices[indexOffset + 18 * i + 9] = startX + i * dx + dx; - vertices[indexOffset + 18 * i + 10] = bottomLayer; - vertices[indexOffset + 18 * i + 11] = 0.0; - - colors[colorOffset + 24 * i + 12] = color.red; - colors[colorOffset + 24 * i + 13] = color.green; - colors[colorOffset + 24 * i + 14] = color.blue; - colors[colorOffset + 24 * i + 15] = color.alpha; - - vertices[indexOffset + 18 * i + 12] = startX + i * dx; - vertices[indexOffset + 18 * i + 13] = bottomLayer; - vertices[indexOffset + 18 * i + 14] = 0.0; - - colors[colorOffset + 24 * i + 16] = color.red; - colors[colorOffset + 24 * i + 17] = color.green; - colors[colorOffset + 24 * i + 18] = color.blue; - colors[colorOffset + 24 * i + 19] = color.alpha; - - vertices[indexOffset + 18 * i + 15] = startX + i * dx + dx; - vertices[indexOffset + 18 * i + 16] = length; - vertices[indexOffset + 18 * i + 17] = 0.0; - - colors[colorOffset + 24 * i + 20] = color.red; - colors[colorOffset + 24 * i + 21] = color.green; - colors[colorOffset + 24 * i + 22] = color.blue; - colors[colorOffset + 24 * i + 23] = color.alpha; - } - - this.layers++; - this.geometry.attributes.position.needsUpdate = true; - this.geometry.attributes.vertexColor.needsUpdate = true; - this.geometry.attributes.uv.needsUpdate = true; - }, - - initGeometry: function () { - const color = this.bladeColor; - const colors = this.geometry.attributes.vertexColor.array; - const vertices = this.geometry.attributes.position.array; - const bladeTrajectory = this.bladeTrajectory; - - let alpha; - let previousAlpha; - let previousPoint; - - for (let i = 1; i < bladeTrajectory.length; i++) { - if (i === 1) { previousAlpha = alpha; } - alpha = 1.0 - ((bladeTrajectory.length - i) / bladeTrajectory.length); - - const currentPoint = bladeTrajectory[i]; - previousPoint = bladeTrajectory[i - 1]; - - vertices[36 * i] = previousPoint.center.x; - vertices[36 * i + 1] = previousPoint.center.y; - vertices[36 * i + 2] = previousPoint.center.z; - - colors[48 * i] = color.red; - colors[48 * i + 1] = color.green; - colors[48 * i + 2] = color.blue; - colors[48 * i + 3] = previousAlpha * 0.2; - - vertices[36 * i + 3] = currentPoint.top.x; - vertices[36 * i + 4] = currentPoint.top.y; - vertices[36 * i + 5] = currentPoint.top.z; - - colors[48 * i + 4] = color.red; - colors[48 * i + 5] = color.green; - colors[48 * i + 6] = color.blue; - colors[48 * i + 7] = alpha; - - vertices[36 * i + 6] = previousPoint.top.x; - vertices[36 * i + 7] = previousPoint.top.y; - vertices[36 * i + 8] = previousPoint.top.z; - - colors[48 * i + 8] = color.red; - colors[48 * i + 9] = color.green; - colors[48 * i + 10] = color.blue; - colors[48 * i + 11] = previousAlpha; - - vertices[36 * i + 9] = previousPoint.center.x; - vertices[36 * i + 10] = previousPoint.center.y; - vertices[36 * i + 11] = previousPoint.center.z; - - colors[48 * i + 12] = color.red; - colors[48 * i + 13] = color.green; - colors[48 * i + 14] = color.blue; - colors[48 * i + 15] = previousAlpha * 0.2; - - vertices[36 * i + 12] = currentPoint.center.x; - vertices[36 * i + 13] = currentPoint.center.y; - vertices[36 * i + 14] = currentPoint.center.z; - - colors[48 * i + 16] = color.red; - colors[48 * i + 17] = color.green; - colors[48 * i + 18] = color.blue; - colors[48 * i + 19] = alpha * 0.2; - - vertices[36 * i + 15] = currentPoint.top.x; - vertices[36 * i + 16] = currentPoint.top.y; - vertices[36 * i + 17] = currentPoint.top.z; - - colors[48 * i + 20] = color.red; - colors[48 * i + 21] = color.green; - colors[48 * i + 22] = color.blue; - colors[48 * i + 23] = alpha; - - vertices[36 * i + 18] = previousPoint.bottom.x; - vertices[36 * i + 19] = previousPoint.bottom.y; - vertices[36 * i + 20] = previousPoint.bottom.z; - - colors[48 * i + 24] = color.red; - colors[48 * i + 25] = color.green; - colors[48 * i + 26] = color.blue; - colors[48 * i + 27] = 0.0; - - vertices[36 * i + 21] = currentPoint.center.x; - vertices[36 * i + 22] = currentPoint.center.y; - vertices[36 * i + 23] = currentPoint.center.z; - - colors[48 * i + 28] = color.red; - colors[48 * i + 29] = color.green; - colors[48 * i + 30] = color.blue; - colors[48 * i + 31] = alpha * 0.2; - - vertices[36 * i + 24] = previousPoint.center.x; - vertices[36 * i + 25] = previousPoint.center.y; - vertices[36 * i + 26] = previousPoint.center.z; - - colors[48 * i + 32] = color.red; - colors[48 * i + 33] = color.green; - colors[48 * i + 34] = color.blue; - colors[48 * i + 35] = previousAlpha * 0.2; - - vertices[36 * i + 27] = previousPoint.bottom.x; - vertices[36 * i + 28] = previousPoint.bottom.y; - vertices[36 * i + 29] = previousPoint.bottom.z; - - colors[48 * i + 36] = color.red; - colors[48 * i + 37] = color.green; - colors[48 * i + 38] = color.blue; - colors[48 * i + 39] = 0.0; - - vertices[36 * i + 30] = currentPoint.bottom.x; - vertices[36 * i + 31] = currentPoint.bottom.y; - vertices[36 * i + 32] = currentPoint.bottom.z; - - colors[48 * i + 40] = color.red; - colors[48 * i + 41] = color.green; - colors[48 * i + 42] = color.blue; - colors[48 * i + 43] = 0.0; - - vertices[36 * i + 33] = currentPoint.center.x; - vertices[36 * i + 34] = currentPoint.center.y; - vertices[36 * i + 35] = currentPoint.center.z; - - colors[48 * i + 44] = color.red; - colors[48 * i + 45] = color.green; - colors[48 * i + 46] = color.blue; - colors[48 * i + 47] = alpha * 0.2; - - previousAlpha = alpha; - } - - this.geometry.attributes.position.needsUpdate = true; - this.geometry.attributes.vertexColor.needsUpdate = true; - }, - - sampleBladePosition: function () { - let sample; - - if (this.bladeTrajectory.length === this.maxPoints) { - // Dump oldest point. - sample = this.newSample = this.bladeTrajectory.shift(); - sample.top.set(0, -0.5, 0); - sample.center.set(0, 0, 0); - sample.bottom.set(0, 0.5, 0); - } else { - if (this.newSample) { - this.newSample.top.set(0, -0.5, 0); - this.newSample.center.set(0, 0, 0); - this.newSample.bottom.set(0, 0.5, 0); - sample = this.newSample; - } else { - sample = { - top: new THREE.Vector3(0, -0.5, 0), - center: new THREE.Vector3(0, 0, 0), - bottom: new THREE.Vector3(0, 0.5, 0) - }; - } - } - - const bladeObject = this.bladeEl.object3D; - bladeObject.localToWorld(sample.top); - bladeObject.localToWorld(sample.center); - bladeObject.localToWorld(sample.bottom); - - this.rigContainer.object3D.worldToLocal(sample.top); - this.rigContainer.object3D.worldToLocal(sample.center); - this.rigContainer.object3D.worldToLocal(sample.bottom); - - this.bladeTrajectory.push(sample); - this.initGeometry(); - } -}); diff --git a/src/components/tunnels.js b/src/components/tunnels.js deleted file mode 100644 index 5ffca17d5..000000000 --- a/src/components/tunnels.js +++ /dev/null @@ -1,97 +0,0 @@ -const MIN_TIME = 3000; -const MAX_TIME = 10000; -const SPAWN_DISTANCE = 20; // in seconds - -/** - * Tunnel management. - */ -AFRAME.registerComponent('tunnels', { - dependencies: ['pool_tunnels'], - - schema: { - isPlaying: {default: false}, - songDuration: {default: 0} - }, - - init: function () { - this.addTunnel = this.addTunnel.bind(this); - this.clearTunnels = this.clearTunnels.bind(this); - this.curveEl = document.getElementById('curve'); - this.curveFollowRig = document.getElementById('curveFollowRig'); - this.timeout = 0; - this.tunnels = []; - - this.tick = AFRAME.utils.throttleTick(this.tick.bind(this), 1000); - - this.el.addEventListener('cleargame', this.clearTunnels); - this.el.addEventListener('gamemenuexit', this.clearTunnels); - this.el.addEventListener('gamemenurestart', this.clearTunnels); - }, - - update: function (oldData) { - if (!oldData.isPlaying && this.data.isPlaying) { - this.requestTunnel(); - } - if (oldData.isPlaying && !this.data.isPlaying && this.timeout) { - clearTimeout(this.timeout); - this.timeout = null; - } - }, - - play: function () { - this.pool = this.el.components.pool__tunnels; - }, - - requestTunnel: function () { - this.timeout = setTimeout( - this.addTunnel, - Math.floor(MIN_TIME + Math.random() * MAX_TIME)); - }, - - addTunnel: function () { - const tunnel = this.pool.requestEntity(); - if (!tunnel) { return; } - tunnel.setAttribute('render-order', 'tunnel'); - tunnel.object3D.visible = true; - - const supercurve = this.curveEl.components.supercurve; - let songPosition = (this.el.components.song.getCurrentTime() + SPAWN_DISTANCE) / - this.data.songDuration; - if (songPosition > 1) { songPosition = 1;} - supercurve.getPointAt(songPosition, tunnel.object3D.position); - supercurve.alignToCurve(songPosition, tunnel.object3D); - - tunnel.play(); - this.tunnels.push(tunnel); - this.requestTunnel(); - }, - - clearTunnels: function () { - if (this.timeout) { - clearTimeout(this.timeout); - this.timeout = null; - } - for (let i = 0; i < this.tunnels.length; i++) { - this.tunnels[i].object3D.visible = false; - this.pool.returnEntity(this.tunnels[i]); - } - this.tunnels.length = 0; - }, - - tick: function (time, delta) { - if (this.tunnels.length == 0) { return; } - - // Remove tunnels that went behind the player. - for (let i = 0; i < this.tunnels.length; i++) { - if (this.tunnels[i].object3D.position.z > - this.curveFollowRig.object3D.position.z + 5) { - const tunnel = this.tunnels.splice(i, 1)[0]; - tunnel.object3D.visible = false; - this.pool.returnEntity(tunnel); - } else { - // They're z-ordered, the rest of tunnels are in front of the player. - return; - } - } - } -}); diff --git a/src/components/vertex-colors-buffer.js b/src/components/vertex-colors-buffer.js deleted file mode 100644 index 316e717d3..000000000 --- a/src/components/vertex-colors-buffer.js +++ /dev/null @@ -1,61 +0,0 @@ -var colorHelper = new THREE.Color(); - -/** - * Set geometry vertex colors, allows for geometry merging using one material - * while retaining colors. - */ -AFRAME.registerComponent('vertex-colors-buffer', { - schema: { - baseColor: {type: 'color'}, - itemSize: {default: 3} - }, - - update: function (oldData) { - var colors; - var data = this.data; - var i; - var el = this.el; - var geometry; - var mesh; - var self = this; - - mesh = this.el.getObject3D('mesh'); - - if (!mesh || !mesh.geometry) { - el.addEventListener('object3dset', function reUpdate (evt) { - if (evt.detail.type !== 'mesh') { return; } - el.removeEventListener('object3dset', reUpdate); - self.update(oldData); - }); - return; - } - - geometry = mesh.geometry; - - // Empty geometry. - if (!geometry.attributes.position) { - console.warn('Geometry has no vertices', el); - return; - } - - if (!geometry.attributes.color) { - geometry.setAttribute('color', - new THREE.BufferAttribute( - new Float32Array(geometry.attributes.position.array.length), 3 - ) - ); - } - - colors = geometry.attributes.color.array; - - // TODO: For some reason, incrementing loop by 3 doesn't work. Need to do by 4 for glTF. - colorHelper.set(data.baseColor); - for (i = 0; i < colors.length; i += data.itemSize) { - colors[i] = colorHelper.r; - colors[i + 1] = colorHelper.g; - colors[i + 2] = colorHelper.b; - } - - geometry.attributes.color.needsUpdate = true; - } -}); diff --git a/src/components/victory-accuracy-ring.js b/src/components/victory-accuracy-ring.js deleted file mode 100644 index 2dbf03367..000000000 --- a/src/components/victory-accuracy-ring.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Trigger accuracy ring animation on victory screen. - */ -AFRAME.registerComponent('victory-accuracy-ring', { - dependencies: ['geometry', 'material'], - - schema: { - accuracy: {default: 0} - }, - - update: function () { - this.el.getObject3D('mesh').material.uniforms.progress.value = 0; - this.el.setAttribute('animation', 'to', this.data.accuracy / 100); - this.el.components.animation.beginAnimation(); - } -}); diff --git a/src/components/victory-rank.js b/src/components/victory-rank.js deleted file mode 100644 index 667f891e0..000000000 --- a/src/components/victory-rank.js +++ /dev/null @@ -1,51 +0,0 @@ -const normalObj = {sphericalEnvMap: '', roughness: 0.8, metalness: 0.4}; -const shineObj = {sphericalEnvMap: '#envmapImg', roughness: 0.2, metalness: 0.6}; - -/** - * Rank color. - */ -AFRAME.registerComponent('victory-rank', { - schema: { - isVictory: {default: false}, - rank: {type: 'string'} - }, - - update: function (oldData) { - const el = this.el; - const rank = this.data.rank; - - if (oldData.isVictory && !this.data.isVictory) { - this.el.object3D.scale.set(0.001, 0.001, 0.001); - } - - if (!rank) { return; } - - el.setAttribute('text-geometry', 'value', rank); - switch (rank[0]) { - case 'S': { - el.setAttribute('material', Object.assign({color: '#F0e077'}, shineObj)); - break; - } - case 'A': { - el.setAttribute('material', Object.assign({color: '#6FF9EA'}, shineObj)); - break; - } - case 'B': { - el.setAttribute('material', Object.assign({color: '#F8d'}, shineObj)); - break; - } - case 'C': { - el.setAttribute('material', Object.assign({color: '#F971C3'}, normalObj)); - break; - } - case 'D': { - el.setAttribute('material', Object.assign({color: '#1E6269'}, normalObj)); - break; - } - case 'F': { - el.setAttribute('material', Object.assign({color: '#e3170a'}, normalObj)); - break; - } - } - } -}); diff --git a/src/components/visible-raycastable.js b/src/components/visible-raycastable.js deleted file mode 100644 index 0ddb040e9..000000000 --- a/src/components/visible-raycastable.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Couple visibility and raycastability. - */ -AFRAME.registerComponent('visible-raycastable', { - schema: { - default: true - }, - - update: function () { - this.el.object3D.visible = this.data; - if (this.data) { - this.el.setAttribute('raycastable', ''); - } else { - this.el.removeAttribute('raycastable', ''); - } - } -}); diff --git a/src/components/wall-shader.js b/src/components/wall-shader.js deleted file mode 100644 index af0e233b8..000000000 --- a/src/components/wall-shader.js +++ /dev/null @@ -1,16 +0,0 @@ -const COLORS = require('../constants/colors'); - -AFRAME.registerShader('wallShader', { - schema: { - colorTertiary: {type: 'color', is: 'uniform', default: COLORS.initial.tertiary}, - environment: {type: 'map', is: 'uniform', default: '#envmapImg'}, - hitLeft: {type: 'vec3', is: 'uniform', default: {x: 0, y: 9000, z: 0}}, - hitRight: {type: 'vec3', is: 'uniform', default: {x: 0, y: 9000, z: 0}}, - iTime: {type: 'time', is: 'uniform'}, - opacity: {type: 'number', is: 'uniform'} - }, - - vertexShader: require('./shaders/wall.vert.glsl'), - - fragmentShader: require('./shaders/wall.frag.glsl') -}); diff --git a/src/components/wall.js b/src/components/wall.js deleted file mode 100644 index 648dcf198..000000000 --- a/src/components/wall.js +++ /dev/null @@ -1,120 +0,0 @@ -import { SIZES } from './beat'; - -const HEIGHT = 2.5; -const CEILING_THICKNESS = 1.5; - -/** - * Wall to dodge. - */ -AFRAME.registerComponent('wall', { - dependencies: ['material'], - - init: function () { - this.curveEl = document.getElementById('curve'); - this.curveFollowRig = document.getElementById('curveFollowRig'); - this.el.setObject3D('mesh', new THREE.Mesh()); - this.geometry = null; - this.isCeiling = false; - this.isRaycastable = false; - this.localPosition = new THREE.Vector3(); - this.songPosition = undefined; - this.tick = AFRAME.utils.throttleTick(this.tick.bind(this), 1000); - }, - - play: function () { - this.el.object3D.visible = true; - }, - - tick: function (time, timeDelta) { - const songProgress = this.curveFollowRig.components['supercurve-follow'].songProgress; - - if (!this.isRaycastable && songProgress + 0.01 >= this.songPosition) { - this.isRaycastable = true; - this.el.setAttribute('data-wall-active', ''); - if (!this.isCeiling) { - this.el.setAttribute('data-weapon-particles', ''); - this.el.setAttribute('raycastable-game', ''); - } - } - - if (songProgress >= this.backPosition + 0.01) { this.returnToPool(); } - }, - - onGenerate: function (songPosition, horizontalPosition, width, length, isCeiling, backPosition) { - const el = this.el; - this.isCeiling = isCeiling; - this.backPosition = backPosition; - this.songPosition = songPosition; - this.setWallGeometry(songPosition, horizontalPosition, width, length, isCeiling); - el.getObject3D('mesh').material.uniforms.opacity.value = 0; - el.object3D.position.y = -5; - el.components.animation__fadein.beginAnimation(); - el.components.animation__scalein.beginAnimation(); - }, - - /** - * Curve wall along curve by mapping box geometry vertices along curve using. - * supercurve.getPositionRelativeToTangent. - */ - setWallGeometry: (function () { - const modifiedVertexPos = new THREE.Vector3(); - const left = new THREE.Vector3(); - const right = new THREE.Vector3(); - - return function (songPosition, horizontalPosition, width, length, isCeiling) { - const beatSystem = this.el.sceneEl.components['beat-system']; - const supercurve = this.curveEl.components.supercurve; - - const lengthPercent = length / supercurve.length; - const startPercent = songPosition; - const endPercent = songPosition + lengthPercent; - - const height = isCeiling ? CEILING_THICKNESS : HEIGHT; - - // Offset vectors to get the left / right vertex points to pass into curve helper. - // Note that curve is upside down so the positions are reversed...normally, this would - // read as `+ (width / 2) - 0.25`. - const centerPosition = (-1 * beatSystem.horizontalPositions[horizontalPosition]) - - (width / 2) + 0.25; - left.x = centerPosition - (width / 2); - right.x = centerPosition + (width / 2); - - // TODO: Reuse box. - const geo = this.geometry = new THREE.BoxBufferGeometry(width, height, 1, 1, 1, 30); - const positions = geo.attributes.position.array; - for (let i = 0; i < positions.length; i += 3) { - // Add half length (which will always be 1 / 2) for the box geometry offset. - // Converts box Z from [-0.5, 0.5] to [0, 1] providing a percent. - const vertexPercent = positions[i + 2] + 0.5; - supercurve.getPositionRelativeToTangent( - startPercent + (vertexPercent * (endPercent - startPercent)), - positions[i] < 0 ? left : right, - modifiedVertexPos); - - positions[i] = modifiedVertexPos.x; - positions[i + 1] += modifiedVertexPos.y + height / 2; - positions[i + 2] = modifiedVertexPos.z; - } - - // Notes are higher in punch so lower a tad. - let ceilingHeight = beatSystem.verticalPositions.middle + beatSystem.size / 2; - if (beatSystem.data.gameMode === 'punch') { ceilingHeight -= 0.1; } - - this.el.getObject3D('mesh').geometry = this.geometry; - this.el.getObject3D('mesh').position.y = isCeiling ? ceilingHeight : 0.1; - }; - })(), - - returnToPool: function () { - this.el.object3D.visible = false; - this.el.removeAttribute('data-weapon-particles'); - this.el.removeAttribute('data-wall-active'); - this.el.removeAttribute('raycastable-game'); - this.isCeiling = false; - this.isRaycastable = false; - if (this.el.isPlaying) { - this.el.sceneEl.components.pool__wall.returnEntity(this.el); - } - if (this.geometry) { this.geometry.dispose(); } - } -}); diff --git a/src/components/weapon-particles.js b/src/components/weapon-particles.js deleted file mode 100644 index 5fae6ead6..000000000 --- a/src/components/weapon-particles.js +++ /dev/null @@ -1,76 +0,0 @@ -const HIT_LEFT = 'hitLeft'; -const HIT_RIGHT = 'hitRight'; -const PUNCH_WALL_RAY = {direction: {x: 0, y: -0.25, z: -1}}; -const BLADE_WALL_RAY = {direction: {x: 0, y: 1, z: -1}}; - -/** - * Show particles when touched by weapon. - */ -AFRAME.registerComponent('weapon-particles', { - schema: { - enabled: {default: false}, - gameMode: {default: ''}, - hand: {type: 'string'} - }, - - init: function () { - this.hiddenIntersection = {x: 999, y: 0, z: 0}; - this.intersectedEl = null; - - this.weaponEnter = this.weaponEnter.bind(this); - this.weaponLeave = this.weaponLeave.bind(this); - }, - - update: function (oldData) { - if (oldData.gameMode !== this.data.gameMode) { - this.el.setAttribute( - 'raycaster__game', - this.data.gameMode === 'punch' ? PUNCH_WALL_RAY : BLADE_WALL_RAY); - } - }, - - pause: function () { - this.el.removeEventListener('mouseenter', this.weaponEnter); - this.el.removeEventListener('mouseleave', this.weaponLeave); - }, - - play: function () { - this.el.addEventListener('mouseenter', this.weaponEnter); - this.el.addEventListener('mouseleave', this.weaponLeave); - }, - - weaponEnter: function (evt) { - if (!this.data.enabled) { return; } - if (evt.target !== this.el) { return; } - if (!evt.detail.intersectedEl.hasAttribute('data-weapon-particles')) { return; } - this.intersectedEl = evt.detail.intersectedEl; - }, - - weaponLeave: function (evt) { - if (evt.detail.target !== this.el) { return; } - - // Hide hit intersection texture. - if (this.intersectedEl.components.wall || this.intersectedEl.id === 'floor') { - const uniform = this.data.hand === RIGHT ? HIT_RIGHT : HIT_LEFT; - const material = this.intersectedEl.getObject3D('mesh').material; - material.uniforms[uniform].value = this.hiddenIntersection; - } - this.intersectedEl = null; - }, - - tick: function (time, delta) { - if (!this.data.enabled || !this.intersectedEl) { return; } - - const raycaster = this.el.components.raycaster__game; - const intersection = raycaster.getIntersection(this.intersectedEl); - - if (!intersection) { return; } - - // Update intersection material if necessary. - if (this.intersectedEl.components.wall || this.intersectedEl.id === 'floor') { - const uniform = this.data.hand === 'right' ? HIT_RIGHT : HIT_LEFT; - const material = this.intersectedEl.getObject3D('mesh').material; - material.uniforms[uniform].value = intersection.point; - } - } -}); diff --git a/src/components/zip-loader.js b/src/components/zip-loader.js deleted file mode 100644 index 1bdf48998..000000000 --- a/src/components/zip-loader.js +++ /dev/null @@ -1,139 +0,0 @@ -AFRAME.registerComponent('zip-loader', { - schema: { - difficulties: { type: 'array' }, - isLoading: { default: 'false' }, - version: { type: 'string' }, - directDownload: { type: 'string' }, - bpm: { type: 'number' } - }, - - init: function () { - this.loadingIndicator = document.getElementById('zipLoaderIndicator'); - - // Cache one ZIP at a time. - this.cachedZip = null; - this.cachedVersion = null; - - this.message = {}; - this.worker = new Worker('build/zip.js'); - this.worker.onmessage = this.onMessage.bind(this); - this.worker.onerror = console.error; - }, - - update: function (oldData) { - const data = this.data; - - // Abort previous ZIP request if new song selected. - if (oldData.version && oldData.version !== data.version && - this.cachedVersion !== data.version) { - this.message.abort = true; - this.message.difficulties = JSON.stringify(this.data.difficulties); - this.message.version = oldData.version; - this.message.directDownload = this.data.directDownload; - this.message.bpm = this.data.bpm; - this.message.hash = this.data.hash; - this.worker.postMessage(this.message); // Start the worker. - } - - if (data.version && oldData.version !== data.version) { - this.cachedVersion = null; - this.cachedZip = null; - this.fetchZip(data.version); - } - - // Faulty ZIP. - if (!oldData.isLoading && this.data.isLoading && - this.cachedVersion === this.data.version && - !this.cachedZip) { - this.el.emit('songloaderror'); - } - }, - - fetchZip: function (version) { - this.el.emit('ziploaderstart', null, false); - - this.message.abort = false; - this.message.difficulties = JSON.stringify(this.data.difficulties); - this.message.version = version; - this.message.directDownload = this.data.directDownload; - this.message.bpm = this.data.bpm; - this.message.hash = this.data.hash; - this.worker.postMessage(this.message); // Start the worker. - }, - - onMessage: function (evt) { - switch (evt.data.message) { - case 'error': { - this.el.emit('songloaderror'); - break; - } - case 'progress': { - if (evt.data.version !== this.data.version) { return; } - this.loadingIndicator.setAttribute('material', 'progress', evt.data.progress); - break; - } - case 'load': { - this.cachedVersion = evt.data.version; - this.cachedZip = evt.data.data; - - // Check for faulty empty beats object. - let key; - const beats = evt.data.data.beats; - for (key in beats) { break; } - if (!key) { - this.cachedZip = null; - if (evt.data.version === this.data.version) { - this.el.emit('songloaderror'); - } - return; - } - - // Check version still matches in case selected challenge changed. - if (evt.data.version === this.data.version) { - this.el.emit('ziploaderend', evt.data.data, false); - } - break; - } - } - } -}); - -/** - * Beat Saver JSON sometimes have weird characters in front of JSON in utf16le encoding. - */ -function jsonParseClean (str) { - try { - str = str.trim(); - str = str.replace(/\u0000/g, '').replace(/\u\d\d\d\d/g, ''); - str = str.replace('\b', ' '); - if (str[0] !== '{') { - str = str.substring(str.indexOf('{'), str.length); - } - - // Remove Unicode escape sequences. - // stringified = stringified.replace(/\\u..../g, ' ') - return jsonParseLoop(str, 0); - } catch (e) { - // Should not reach here. - console.log(e, str); - return null; - } -} - -const errorRe1 = /column (\d+)/m; -const errorRe2 = /position (\d+)/m; - -function jsonParseLoop (str, i) { - try { - return JSON.parse(str); - } catch (e) { - let match = e.toString().match(errorRe1); - if (!match) { match = e.toString().match(errorRe2); } - if (!match) { throw e; } - const errorPos = parseInt(match[1]); - str = str.replace(str[errorPos], 'x'); - str = str.replace(str[errorPos + 1], 'x'); - str = str.replace(str[errorPos + 2], 'x'); - return jsonParseLoop(str, i + 1); - } -} diff --git a/src/constants/colors.js b/src/constants/colors.js deleted file mode 100644 index 9adc32d5b..000000000 --- a/src/constants/colors.js +++ /dev/null @@ -1,119 +0,0 @@ -const COLORS = { - OFF: '#111', - WHITE: '#f0f0f0', - - DARKRED: '#5A354B', - RED: '#f971c3', - BRIGHTRED: '#ffd3ee', - - DARKBLUE: '#2B4D4C', - BLUE: '#6ff9ea', - BRIGHTBLUE: '#d7fdf9', - - YELLOW: '#fff568', - - UI_ACCENT: '#08bfa2', - UI_ACCENT2: '#f01978' -}; - -COLORS.schemes = { - default: { - name: 'Super Medium', - off: '#111', - primary: COLORS.RED, - primarybright: COLORS.BRIGHTRED, - secondary: COLORS.BLUE, - secondarybright: COLORS.BRIGHTBLUE, - tertiary: COLORS.YELLOW - }, - - blue: { - name: 'Star Warrior', - off: '#111', - primary: '#1e4482', - primarybright: '#0B4BB3', - secondary: '#c27727', - secondarybright: '#FFD840', - tertiary: '#d7fdf9' - }, - - purple: { - name: 'Galactic Royal', - off: '#111', - primary: '#6A39B3', - primarybright: '#B685FF', - secondary: '#FAF239', - secondarybright: '#FFFC9E', - tertiary: '#50FFF2' - }, - - green: { - name: 'Space Joker', - off: '#111', - primary: '#779E37', - primarybright: '#C0FF59', - secondary: '#6A39B3', - secondarybright: '#B685FF', - tertiary: '#FAFAFA' - }, - - yellow: { - name: 'Solar Flare', - off: '#111', - primary: '#C2C04C', - primarybright: '#FAF761', - secondary: '#E03A3E', - secondarybright: '#FA7578', - tertiary: '#278ECC' - }, - - red: { - name: 'Trail Blazer', - off: '#111', - primary: '#E03A3E', - primarybright: '#FA7578', - secondary: '#DADADA', - secondarybright: '#EFEFEF', - tertiary: '#666' - }, - - rgb: { - name: 'Mint Choco', - off: '#111', - primary: '#34eb89', - primarYBRIGht: '#40fb95', - secondary: '#34ebd8', - secondarybright: '#40fbeA', - tertiary: '#eb3434' - }, - - cheetah: { - name: 'Cheetah SoL', - off: '#111', - primary: '#c27727', - primarYBright: '#e68319', - secondary: '#635c54', - secondarybright: '#8a857f', - tertiary: '#ebebeb' - }, - - black: { - name: 'Ash Nova', - off: '#111', - primary: '#555', - primarybright: '#808080', - secondary: '#FFF', - secondarybright: '#FFF', - tertiary: '#B8B8B8' - } -}; - -COLORS.options = Object.keys(COLORS.schemes); - -if (typeof localStorage === 'undefined') { - COLORS.initial = 'default'; -} else { - COLORS.initial = COLORS.schemes[localStorage.getItem('colorScheme') || 'default']; -} - -module.exports = COLORS; diff --git a/src/constants/genres.js b/src/constants/genres.js deleted file mode 100644 index 0753ff085..000000000 --- a/src/constants/genres.js +++ /dev/null @@ -1,22 +0,0 @@ -module.exports = [ - {name: 'Pop', row: 1, column: 1}, - {name: 'R&B', row: 1, column: 2}, - {name: 'Rap', row: 1, column: 3}, - {name: 'Rock', row: 1, column: 4}, - {name: 'Soundtrack', row: 1, column: 5}, - {name: 'Video Games', row: 1, column: 6}, - - {name: 'Electronic', row: 2, column: 1}, - {name: 'Hip Hop', row: 2, column: 2}, - {name: 'House', row: 2, column: 3}, - {name: 'J-Pop', row: 2, column: 4}, - {name: 'K-Pop', row: 2, column: 5}, - {name: 'Meme', row: 2, column: 6}, - - {name: 'Alternative', row: 3, column: 1}, - {name: 'Anime', row: 3, column: 2}, - {name: 'Comedy', row: 3, column: 3}, - /* {name: 'TODO', row: 3, column: 4}, */ - {name: 'Dubstep', row: 3, column: 5}, - {name: 'Dance', row: 3, column: 6} -]; diff --git a/src/constants/playlists.js b/src/constants/playlists.js deleted file mode 100644 index 2759db890..000000000 --- a/src/constants/playlists.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = [ - {name: 'favorites', author: 'You!', title: 'Your Saved Favorites'}, - {name: '3966', author: 'BeastSaber', title: 'Songs With Fantastic Flow Vol. 1'}, - {name: '3967', author: 'BeastSaber', title: 'Songs With Fantastic Flow Vol. 2'}, - {name: '3968', author: 'BeastSaber', title: 'Songs With Fantastic Flow Vol. 3'}, - {name: '4134', author: 'BeastSaber', title: 'Songs With Fantastic Flow Vol. 4'}, - {name: '4135', author: 'BeastSaber', title: 'Songs With Fantastic Flow Vol. 5'}, - {name: '7483', author: 'BeastSaber', title: 'Maps Of The Weeks'}, - {name: '4137', author: 'BeastSaber', title: "Curator's Picks of 2020"}, - {name: '4139', author: 'BeastSaber', title: "Curator's Picks of 2021"}, - {name: '11584', author: 'BeastSaber', title: "Curator's Picks of 2022"}, - {name: '4405', author: 'BeastSaber', title: 'Intro to Dance'}, - {name: '4138', author: 'BeastSaber', title: "Mom's Maps"} -]; diff --git a/src/index.css b/src/index.css deleted file mode 100644 index 54ad0455d..000000000 --- a/src/index.css +++ /dev/null @@ -1,119 +0,0 @@ -html { - background: #000; -} - -#vrButton { - position: absolute; - background: url(../assets/img/enter-vr-button-background.png) no-repeat; - background-size: cover; - border: 0; - cursor: pointer; - right: 20px; - bottom: 20px; - text-decoration: none; - z-index: 9999999; - width: 84px; - height: 47px; -} - -#vrButton.a-hidden { - visibility: hidden; -} - -#vrButton:active { - border: 0; -} - -#vrButton:hover { - background-position: 0 -50.5px; -} - -#vrButton p { - bottom: 45px; - color: #FFF; - font-size: 12px; - font-family: monospace; - font-weight: bold; - text-align: center; - text-transform: uppercase; - position: relative; -} - -.a-loader-title { - animation: loaderTitle 1s infinite alternate; - color: rgba(0,0,0,0); - background: none; - background-image: url('../assets/img/loadingLogo.jpg'); - height: 36.2vh; - background-repeat: no-repeat; - background-position: center; - margin-top: 0; - background-size: contain; -} - -@keyframes loaderTitle { - 0% { opacity: 1; } - 50% { opacity: 0.8; } - 100% { opacity: 1; } -} - -#subscribeForm { - background: rgba(0, 0, 0, 0.75); - box-shadow: 0px 0 1px #888; - bottom: 0; - color: #FAFAFA; - font-family: monospace; - height: 100px; - left: 0; - margin: 0; - min-width: 400px; - padding: 5px 20px 0 5px; - position: fixed; - text-align: center; - z-index: 9999999; -} - -#subscribeForm h2 { - font-size: 16px; - font-weight: 300; -} - -#subscribeForm #subscribeClose { - cursor: pointer; - font-size: 26px; - font-weight: 600; - position: absolute; - top: 0; - right: 5px; -} - -input[type="email"] { - background: #FAFAFA; - border: 0; - border-radius: 5px; - color: $gray; - height: 40px; - padding-left: 20px; - margin-right: 10px; - max-width: 480px; - text-transform: uppercase; - vertical-align: middle; - width: 50%; -} - -button { - border: 0; - background: #FF74b8; - border-radius: 20px; - cursor: pointer; - font-size: 14px; - color: #FAFAFA; - text-transform: uppercase; - transition: .1s all; - padding: 11px 20px; - vertical-align: middle; -} - -button:hover { - background: #FF94C8; -} diff --git a/src/index.js b/src/index.js deleted file mode 100644 index 994fc83fa..000000000 --- a/src/index.js +++ /dev/null @@ -1,119 +0,0 @@ -function requireAll (req) { req.keys().forEach(req); } - -console.time = () => { -}; -console.timeEnd = () => { -}; - -require('../vendor/BufferGeometryUtils'); - -require('aframe-aabb-collider-component'); -require('aframe-atlas-uvs-component'); -require('aframe-audioanalyser-component'); -require('aframe-event-set-component'); -require('aframe-geometry-merger-component'); -require('aframe-haptics-component'); -require('aframe-layout-component'); -if (process.env.DEBUG_LOG) { - require('aframe-log-component'); -} else { - AFRAME.log = () => void 0; -} -require('aframe-orbit-controls'); -require('aframe-proxy-event-component'); -require('aframe-render-order-component'); -require('aframe-state-component'); -require('aframe-slice9-component'); -require('aframe-thumb-controls-component'); - -requireAll(require.context('./components/', true, /\.js$/)); -requireAll(require.context('./state/', true, /\.js$/)); - -require('./index.css'); - -require('./scene.html'); - -if (module.hot) { module.hot.accept(); } - -document.addEventListener('DOMContentLoaded', () => { - initSubscribeForm(); -}); - -/** - * Init XHR handler to subscribe. - */ -function initSubscribeForm () { - const form = document.querySelector('form'); - if (!form) { return; } - - if (localStorage.getItem('subscribeClosed')) { - const formParent = form.parentNode; - formParent.parentNode.removeChild(formParent); - return; - } - - document.getElementById('subscribeClose').addEventListener('click', () => { - const formParent = form.parentNode; - formParent.parentNode.removeChild(formParent); - localStorage.setItem('subscribeClosed', true); - }); - - const button = form.querySelector('.submit'); - const input = form.querySelector('input[type="email"]'); - const newsletterHeader = document.querySelector('#subscribeForm > h2'); - - let originalHeaderText = ''; - if (newsletterHeader) { - originalHeaderText = newsletterHeader.innerHTML; - } - - form.addEventListener('submit', evt => { - evt.preventDefault(); - - // supermedium/superchimp - const xhr = new XMLHttpRequest(); - let endpoint = 'http://localhost:5000/mail/subscribe'; - if (process.env.NODE_ENV === 'production') { - endpoint = 'https://supermedium.com/mail/subscribe'; - } - xhr.open('POST', endpoint); - - xhr.addEventListener('load', () => { - if (parseInt(xhr.status, 10) !== 200) { - window.location.href = 'https://supermedium/subscribe/'; - } - if (button) { - button.disabled = true; - button.innerHTML = 'Subscribed!'; - } - if (newsletterHeader) { - newsletterHeader.innerHTML = 'Successfully subscribed, thank you!'; - } - }); - - xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8'); - xhr.send(JSON.stringify({ - email: document.querySelector('[name="email"]').value, - source: 'moonrider' - })); - - return false; - }); - - if (button) { - input.addEventListener('keydown', () => { - if (button.hasAttribute('disabled')) { - button.innerHTML = 'Subscribe'; - button.removeAttribute('disabled'); - } - if (newsletterHeader && originalHeaderText) { - newsletterHeader.innerHTML = originalHeaderText; - } - }); - } -} - -// Redirect to HTTPS in production. -if (window.location.protocol === 'http:' && !window.location.host.startsWith('localhost')) { - window.location.replace(`https:${location.href.substring(location.protocol.length)}`); -} diff --git a/src/lib/convert-beatmap.js b/src/lib/convert-beatmap.js deleted file mode 100644 index 2bc689a58..000000000 --- a/src/lib/convert-beatmap.js +++ /dev/null @@ -1,31 +0,0 @@ -module.exports = function convertBeatmap (src) { - if (src.converted) return src; - - if (src['map']) { src = src['map']; } - - src['version'] = src['versions'][0]['hash']; - - const coverImageCorsProxy = 'https://beatproxy.b-cdn.net/'; - - src['directDownload'] = src['versions'][0]['downloadURL']; - - src['coverURL'] = coverImageCorsProxy + src['versions'][0]['coverURL'].split('/')[3]; - - let diffs = src['versions'][0]['diffs']; - - src.metadata.characteristics = {}; - - for (const item of diffs) { - - if (src.metadata.characteristics[item['characteristic']] === undefined) { - src.metadata.characteristics[item['characteristic']] = {}; - } - - src.metadata.characteristics[item['characteristic']][item['difficulty']] = item; - } - src.metadata.characteristics = JSON.stringify(src.metadata.characteristics); - - src.converted = true; - - return src; -}; diff --git a/src/lib/search.json b/src/lib/search.json deleted file mode 100644 index 07d1baa45..000000000 --- a/src/lib/search.json +++ /dev/null @@ -1 +0,0 @@ -[{"id":"2144","name":"Shut Up and Dance - WALK THE MOON","description":"Difficulties: Expert+ (Added 11/15), Expert, Hard, Normal\r\nYouTube Preview: https://youtu.be/x9hJbTlPQUY","uploader":{"id":30311,"name":"bennydabeast","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e98d","avatar":"https://cdn.beatsaver.com/avatar/30311.jpg","type":"SIMPLE"},"metadata":{"bpm":128.0,"duration":200,"songName":"Shut Up and Dance","songSubName":"WALK THE MOON","songAuthorName":"BennyDaBeast","levelAuthorName":"bennydabeast"},"stats":{"plays":0,"downloads":47856,"upvotes":15705,"downvotes":243,"score":0.9584},"uploaded":"2018-11-21T01:27:00Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"89cf8bb07afb3c59ae7b5ac00337d62261c36fb4","key":"2144","state":"Published","createdAt":"2018-11-21T01:27:00Z","sageScore":3,"diffs":[{"njs":10.0,"offset":0.0,"notes":301,"bombs":4,"obstacles":24,"nps":1.578,"length":407.0,"characteristic":"Standard","difficulty":"Normal","events":380,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":190.781,"paritySummary":{"errors":64,"warns":19,"resets":0}},{"njs":10.0,"offset":0.0,"notes":486,"bombs":4,"obstacles":24,"nps":2.547,"length":407.0,"characteristic":"Standard","difficulty":"Hard","events":380,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":190.781,"paritySummary":{"errors":76,"warns":34,"resets":0}},{"njs":10.0,"offset":0.0,"notes":620,"bombs":4,"obstacles":24,"nps":3.246,"length":407.5,"characteristic":"Standard","difficulty":"Expert","events":380,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":191.016,"paritySummary":{"errors":88,"warns":68,"resets":0}},{"njs":12.0,"offset":0.0,"notes":894,"bombs":0,"obstacles":0,"nps":4.68,"length":407.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":380,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":191.016,"paritySummary":{"errors":99,"warns":120,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/89cf8bb07afb3c59ae7b5ac00337d62261c36fb4.zip","coverURL":"https://cdn.beatsaver.com/89cf8bb07afb3c59ae7b5ac00337d62261c36fb4.jpg","previewURL":"https://cdn.beatsaver.com/89cf8bb07afb3c59ae7b5ac00337d62261c36fb4.mp3"}],"createdAt":"2018-11-21T01:27:00Z","updatedAt":"2018-11-21T01:27:00Z","lastPublishedAt":"2018-11-21T01:27:00Z"},{"id":"66e6","name":"League of Legends - Legends never die (ft. Against The Current)","description":"A special request from Prima1URGE","uploader":{"id":4285107,"name":"kikaeaeon","uniqueSet":true,"hash":"5cff0b7498cc5a672c85109b","avatar":"https://cdn.beatsaver.com/avatar/103715469822816256.png","type":"DISCORD"},"metadata":{"bpm":140.0,"duration":236,"songName":"Legends Never Die","songSubName":"","songAuthorName":"League of Legends & Against The Current","levelAuthorName":"KikaeAeon"},"stats":{"plays":0,"downloads":30647,"upvotes":10346,"downvotes":160,"score":0.9549},"uploaded":"2019-09-30T10:19:45.606Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"732bd4072b89d4b3bf0e63db812a7ffc3096e837","key":"66e6","state":"Published","createdAt":"2019-09-30T10:19:45.606Z","sageScore":6,"diffs":[{"njs":12.0,"offset":0.0,"notes":705,"bombs":0,"obstacles":10,"nps":3.041,"length":541.0,"characteristic":"Standard","difficulty":"Expert","events":1693,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":231.857,"paritySummary":{"errors":4,"warns":2,"resets":0}},{"njs":16.0,"offset":0.0,"notes":876,"bombs":0,"obstacles":10,"nps":3.778,"length":541.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":1693,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":231.857,"paritySummary":{"errors":3,"warns":2,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/732bd4072b89d4b3bf0e63db812a7ffc3096e837.zip","coverURL":"https://cdn.beatsaver.com/732bd4072b89d4b3bf0e63db812a7ffc3096e837.jpg","previewURL":"https://cdn.beatsaver.com/732bd4072b89d4b3bf0e63db812a7ffc3096e837.mp3"}],"createdAt":"2019-09-30T10:19:45.606Z","updatedAt":"2019-09-30T10:19:45.606Z","lastPublishedAt":"2019-09-30T10:19:45.606Z"},{"id":"570","name":"Mr. Blue Sky | Electric Light Orchestra","description":"Channel your inner Baby Groot. Normal, Hard, Expert\r\nSpecial thanks to BennydaBeast for his help on this track!","uploader":{"id":41378,"name":"greatyazer","uniqueSet":true,"hash":"5cff0b7298cc5a672c84ea71","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ea71?d=retro","type":"SIMPLE"},"metadata":{"bpm":174.0,"duration":222,"songName":"Mr. Blue Sky","songSubName":"Electric Light Orchestra","songAuthorName":"GreatYazer","levelAuthorName":"greatyazer"},"stats":{"plays":0,"downloads":53449,"upvotes":29661,"downvotes":731,"score":0.9547},"uploaded":"2018-06-16T16:53:34Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"236173d5ba7dc379d480b9cb5fb6b4fa5abe77da","key":"570","state":"Published","createdAt":"2018-06-16T16:53:34Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":462,"bombs":0,"obstacles":25,"nps":2.228,"length":601.313,"characteristic":"Standard","difficulty":"Normal","events":816,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":207.349,"paritySummary":{"errors":132,"warns":16,"resets":0},"stars":1.46},{"njs":10.0,"offset":0.0,"notes":639,"bombs":0,"obstacles":40,"nps":3.082,"length":601.313,"characteristic":"Standard","difficulty":"Hard","events":816,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":207.349,"paritySummary":{"errors":109,"warns":27,"resets":0}},{"njs":10.0,"offset":0.0,"notes":825,"bombs":0,"obstacles":40,"nps":3.979,"length":601.313,"characteristic":"Standard","difficulty":"Expert","events":816,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":207.349,"paritySummary":{"errors":119,"warns":57,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/236173d5ba7dc379d480b9cb5fb6b4fa5abe77da.zip","coverURL":"https://cdn.beatsaver.com/236173d5ba7dc379d480b9cb5fb6b4fa5abe77da.jpg","previewURL":"https://cdn.beatsaver.com/236173d5ba7dc379d480b9cb5fb6b4fa5abe77da.mp3"}],"createdAt":"2018-06-16T16:53:34Z","updatedAt":"2018-06-16T16:53:34Z","lastPublishedAt":"2018-06-16T16:53:34Z"},{"id":"3cf5","name":"Caramelldansen","description":"Preview: https://youtu.be/V5p0HOzunY0\n\n\nTwitter: https://twitter.com/Dack731","uploader":{"id":4285250,"name":"dack","uniqueSet":true,"hash":"5cff0b7598cc5a672c852c6f","avatar":"https://cdn.beatsaver.com/avatar/297344689798119424.png","type":"DISCORD"},"metadata":{"bpm":165.0,"duration":178,"songName":"Caramelldansen (Speedcake Remix)","songSubName":"Caramell","songAuthorName":"Dack","levelAuthorName":"Dack"},"stats":{"plays":0,"downloads":30551,"upvotes":19321,"downvotes":422,"score":0.9543},"uploaded":"2019-03-09T22:54:54Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"cf5e32d6b7f30095f7198da5894139c92336cad7","key":"3cf5","state":"Published","createdAt":"2019-03-09T22:54:54Z","sageScore":4,"diffs":[{"njs":14.0,"offset":0.0,"notes":722,"bombs":52,"obstacles":28,"nps":4.254,"length":466.75,"characteristic":"Standard","difficulty":"Expert","events":597,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":169.727,"paritySummary":{"errors":37,"warns":23,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/cf5e32d6b7f30095f7198da5894139c92336cad7.zip","coverURL":"https://cdn.beatsaver.com/cf5e32d6b7f30095f7198da5894139c92336cad7.jpg","previewURL":"https://cdn.beatsaver.com/cf5e32d6b7f30095f7198da5894139c92336cad7.mp3"}],"createdAt":"2019-03-09T22:54:54Z","updatedAt":"2019-03-09T22:54:54Z","lastPublishedAt":"2019-03-09T22:54:54Z"},{"id":"133b","name":"Daddy - PSY","description":"Insanely fun dance map! Enjoy!\nSee the map in action (Expert): https://www.youtube.com/watch?v=7jOIdfo0j4Q\n\nThank you to my playtesters:\nDuoVR (https://www.twitch.tv/duovr)\nSourgurl (https://www.twitch.tv/sourgurl)\nRexxxzi (https://www.twitch.tv/rexxxzi)\nAshleyriott (https://www.twitch.tv/ashleyriott)","uploader":{"id":38202,"name":"fafurion","uniqueSet":false,"hash":"5cff0b7398cc5a672c84f945","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f945?d=retro","type":"SIMPLE"},"metadata":{"bpm":132.0,"duration":232,"songName":"Daddy","songSubName":"PSY","songAuthorName":"Fafurion","levelAuthorName":"fafurion"},"stats":{"plays":0,"downloads":21881,"upvotes":11227,"downvotes":192,"score":0.9542},"uploaded":"2018-09-02T23:43:45Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"dc489921185f92dfecb9cb07b84fc556123bd134","key":"133b","state":"Published","createdAt":"2018-09-02T23:43:45Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":671,"bombs":0,"obstacles":16,"nps":3.012,"length":490.125,"characteristic":"Standard","difficulty":"Hard","events":1586,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":222.784,"paritySummary":{"errors":38,"warns":39,"resets":0}},{"njs":10.0,"offset":0.0,"notes":831,"bombs":0,"obstacles":16,"nps":3.73,"length":490.125,"characteristic":"Standard","difficulty":"Expert","events":1587,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":222.784,"paritySummary":{"errors":44,"warns":40,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/dc489921185f92dfecb9cb07b84fc556123bd134.zip","coverURL":"https://cdn.beatsaver.com/dc489921185f92dfecb9cb07b84fc556123bd134.jpg","previewURL":"https://cdn.beatsaver.com/dc489921185f92dfecb9cb07b84fc556123bd134.mp3"}],"createdAt":"2018-09-02T23:43:45Z","updatedAt":"2018-09-02T23:43:45Z","lastPublishedAt":"2018-09-02T23:43:45Z"},{"id":"121f","name":"Skillet - Feel Invincible","description":"Expert / Hard\r\nhttps://www.youtube.com/watch?v=nq-Qul4XxbE","uploader":{"id":12996,"name":"rustic","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e8c4","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro","type":"SIMPLE"},"metadata":{"bpm":126.0,"duration":227,"songName":"Feel Invincible","songSubName":"Skillet","songAuthorName":"Rustic","levelAuthorName":"rustic"},"stats":{"plays":0,"downloads":24093,"upvotes":9596,"downvotes":150,"score":0.9541},"uploaded":"2018-08-27T16:47:05Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"2e9ab6e1fb8055649e241cade98b018926cc93a8","key":"121f","state":"Published","createdAt":"2018-08-27T16:47:05Z","sageScore":6,"diffs":[{"njs":10.0,"offset":0.0,"notes":620,"bombs":0,"obstacles":10,"nps":2.764,"length":471.0,"characteristic":"Standard","difficulty":"Hard","events":1654,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":224.286,"paritySummary":{"errors":15,"warns":58,"resets":0}},{"njs":12.0,"offset":0.0,"notes":738,"bombs":0,"obstacles":11,"nps":3.29,"length":471.0,"characteristic":"Standard","difficulty":"Expert","events":1654,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":224.286,"paritySummary":{"errors":21,"warns":72,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/2e9ab6e1fb8055649e241cade98b018926cc93a8.zip","coverURL":"https://cdn.beatsaver.com/2e9ab6e1fb8055649e241cade98b018926cc93a8.jpg","previewURL":"https://cdn.beatsaver.com/2e9ab6e1fb8055649e241cade98b018926cc93a8.mp3"}],"createdAt":"2018-08-27T16:47:05Z","updatedAt":"2018-08-27T16:47:05Z","lastPublishedAt":"2018-08-27T16:47:05Z"},{"id":"4e6f","name":"Kero Kero Bonito - Flamingo","description":"edited: NJS was a tad slow my b\r\nfuramingo \r\noh oh ooh oh\r\nthis needed to be remapped\r\n \r\nPlease check out Kero Kero Bonito and the rest of their songs\r\nI'll be mappin more of em soon\r\n\r\nBPM 178\r\nFlamingo (Expert)\r\nShrimp (Hard)\r\n\r\nhave fun \r\n\r\ngimme feedback on Discord\r\nETAN#8341","uploader":{"id":4235140,"name":"etan","uniqueSet":true,"hash":"5cff0b7798cc5a672c855775","avatar":"https://cdn.beatsaver.com/avatar/136373107559497728.png","type":"DISCORD"},"metadata":{"bpm":178.0,"duration":197,"songName":"Flamingo","songSubName":"Kero Kero Bonito","songAuthorName":"ETAN","levelAuthorName":"ETAN"},"stats":{"plays":0,"downloads":22969,"upvotes":10417,"downvotes":173,"score":0.954},"uploaded":"2019-05-22T00:46:47Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"585ee25e654ebf5db5aa0ec02c3bcecbaccf3e0b","key":"4e6f","state":"Published","createdAt":"2019-05-22T00:46:47Z","sageScore":5,"diffs":[{"njs":13.0,"offset":0.0,"notes":519,"bombs":8,"obstacles":86,"nps":2.692,"length":572.0,"characteristic":"Standard","difficulty":"Hard","events":2271,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":192.809,"paritySummary":{"errors":43,"warns":43,"resets":2}},{"njs":16.0,"offset":0.0,"notes":679,"bombs":10,"obstacles":86,"nps":3.522,"length":572.0,"characteristic":"Standard","difficulty":"Expert","events":2271,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":192.809,"paritySummary":{"errors":35,"warns":24,"resets":4}}],"downloadURL":"https://cdn.beatsaver.com/585ee25e654ebf5db5aa0ec02c3bcecbaccf3e0b.zip","coverURL":"https://cdn.beatsaver.com/585ee25e654ebf5db5aa0ec02c3bcecbaccf3e0b.jpg","previewURL":"https://cdn.beatsaver.com/585ee25e654ebf5db5aa0ec02c3bcecbaccf3e0b.mp3"}],"createdAt":"2019-05-22T00:46:47Z","updatedAt":"2019-05-22T00:46:47Z","lastPublishedAt":"2019-05-22T00:46:47Z"},{"id":"1fef","name":"Imagine Dragons - Believer (100k ver.) | 100k Contest","description":"This is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes. Go to https://bsaber.com/100k-contest/ to register!","uploader":{"id":12996,"name":"rustic","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e8c4","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro","type":"SIMPLE"},"metadata":{"bpm":125.0,"duration":205,"songName":"Believer (100k ver.)","songSubName":"Imagine Dragons","songAuthorName":"Rustic","levelAuthorName":"rustic"},"stats":{"plays":0,"downloads":39471,"upvotes":16897,"downvotes":378,"score":0.9528},"uploaded":"2018-11-12T17:53:58Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"9a7a5beadfdd1c7c0f137ecba6e5f6ff377eb390","key":"1fef","state":"Published","createdAt":"2018-11-12T17:53:58Z","sageScore":6,"diffs":[{"njs":10.0,"offset":0.0,"notes":216,"bombs":0,"obstacles":0,"nps":1.09,"length":413.0,"characteristic":"Standard","difficulty":"Easy","events":3418,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":198.24,"paritySummary":{"errors":42,"warns":14,"resets":0}},{"njs":10.0,"offset":0.0,"notes":388,"bombs":0,"obstacles":8,"nps":1.957,"length":413.0,"characteristic":"Standard","difficulty":"Normal","events":3418,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":198.24,"paritySummary":{"errors":18,"warns":21,"resets":0}},{"njs":11.0,"offset":0.0,"notes":514,"bombs":0,"obstacles":10,"nps":2.593,"length":413.0,"characteristic":"Standard","difficulty":"Hard","events":3418,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":198.24,"paritySummary":{"errors":57,"warns":59,"resets":0}},{"njs":12.0,"offset":0.0,"notes":560,"bombs":0,"obstacles":12,"nps":2.825,"length":413.0,"characteristic":"Standard","difficulty":"Expert","events":3430,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":198.24,"paritySummary":{"errors":102,"warns":70,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/9a7a5beadfdd1c7c0f137ecba6e5f6ff377eb390.zip","coverURL":"https://cdn.beatsaver.com/9a7a5beadfdd1c7c0f137ecba6e5f6ff377eb390.jpg","previewURL":"https://cdn.beatsaver.com/9a7a5beadfdd1c7c0f137ecba6e5f6ff377eb390.mp3"}],"createdAt":"2018-11-12T17:53:58Z","updatedAt":"2018-11-12T17:53:58Z","lastPublishedAt":"2018-11-12T17:53:58Z"},{"id":"4c6","name":"Muse - Uprising","description":"Expert / Hard\r\nhttps://youtu.be/WpFUt3UNp7c","uploader":{"id":12996,"name":"rustic","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e8c4","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro","type":"SIMPLE"},"metadata":{"bpm":128.0,"duration":251,"songName":"Uprising","songSubName":"Muse","songAuthorName":"Rustic","levelAuthorName":"rustic"},"stats":{"plays":0,"downloads":31460,"upvotes":12140,"downvotes":243,"score":0.9522},"uploaded":"2018-06-11T21:47:41Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"00e5671e594a6fe621c3605fcc5a0e4466ba6478","key":"4c6","state":"Published","createdAt":"2018-06-11T21:47:41Z","sageScore":6,"diffs":[{"njs":10.0,"offset":0.0,"notes":633,"bombs":0,"obstacles":13,"nps":2.599,"length":519.625,"characteristic":"Standard","difficulty":"Hard","events":1975,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":243.574,"paritySummary":{"errors":122,"warns":57,"resets":0},"stars":1.45},{"njs":12.0,"offset":0.0,"notes":880,"bombs":0,"obstacles":19,"nps":3.613,"length":519.625,"characteristic":"Standard","difficulty":"Expert","events":1975,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":243.574,"paritySummary":{"errors":104,"warns":75,"resets":0},"stars":2.19}],"downloadURL":"https://cdn.beatsaver.com/00e5671e594a6fe621c3605fcc5a0e4466ba6478.zip","coverURL":"https://cdn.beatsaver.com/00e5671e594a6fe621c3605fcc5a0e4466ba6478.jpg","previewURL":"https://cdn.beatsaver.com/00e5671e594a6fe621c3605fcc5a0e4466ba6478.mp3"}],"createdAt":"2018-06-11T21:47:41Z","updatedAt":"2018-06-11T21:47:41Z","lastPublishedAt":"2018-06-11T21:47:41Z"},{"id":"da60","name":"[Extra Sensory] Dirty Androids - Midnight Lady","description":"Enjoy the ride.\n\nMassive thanks to Nyri0 and Checkthepan for helping with scripts and some math!!\n\n\nThis map was released as a part of the \"Extra Sensory\" event.\n\nVideo showcase thingy: https://youtu.be/pE_s9bvntA0 (watch tougeVR's instead tho)","uploader":{"id":4235136,"name":"reaxt","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e8ab","avatar":"https://cdn.beatsaver.com/avatar/163052863038291970.png","type":"DISCORD"},"metadata":{"bpm":128.0,"duration":127,"songName":"Midnight Lady","songSubName":"","songAuthorName":"Dirty Androids","levelAuthorName":"Reaxt"},"stats":{"plays":0,"downloads":17800,"upvotes":6632,"downvotes":93,"score":0.9519},"uploaded":"2020-08-20T16:48:21.705Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"ee501d7348223470c16ca88eac4a946e41cd11a9","key":"da60","state":"Published","createdAt":"2020-08-20T16:48:21.705Z","sageScore":2,"diffs":[{"njs":18.0,"offset":0.0,"notes":748,"bombs":0,"obstacles":4878,"nps":6.233,"length":256.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":767,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":120.0,"paritySummary":{"errors":7,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/ee501d7348223470c16ca88eac4a946e41cd11a9.zip","coverURL":"https://cdn.beatsaver.com/ee501d7348223470c16ca88eac4a946e41cd11a9.jpg","previewURL":"https://cdn.beatsaver.com/ee501d7348223470c16ca88eac4a946e41cd11a9.mp3"}],"createdAt":"2020-08-20T16:48:21.705Z","updatedAt":"2020-08-20T16:48:21.705Z","lastPublishedAt":"2020-08-20T16:48:21.705Z"},{"id":"2087","name":"Panic at the disco - The Greatest Show reimagined | (100K Contest)","description":"Here is a bonus map for the 100K contest! Playing any difficulty will give you 4x the normal chance of winning up to $12000 in prizes!!\r\nBig thank you to the beat saber mapping group for helping me out with a few things, you guys are great!\r\n\r\nTo enter, you need to go to the following website and download the mod installer: https://bsaber.com/100k-contest/\r\n\r\nThe competition is now over, but the maps remain!\r\nVideo Preview: https://www.youtube.com/watch?v=E929e6puEQA","uploader":{"id":4785,"name":"stumi","uniqueSet":false,"hash":"5cff0b7398cc5a672c84f720","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro","type":"SIMPLE"},"metadata":{"bpm":77.0,"duration":174,"songName":"The greatest show reimagined","songSubName":"Panic at the disco","songAuthorName":"Stumi","levelAuthorName":"stumi"},"stats":{"plays":0,"downloads":26198,"upvotes":9073,"downvotes":160,"score":0.9518},"uploaded":"2018-11-16T17:57:55Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"afc2a905079d1fcdc9d82fa50e83c842d4d42118","key":"2087","state":"Published","createdAt":"2018-11-16T17:57:55Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":252,"bombs":0,"obstacles":6,"nps":1.542,"length":209.75,"characteristic":"Standard","difficulty":"Easy","events":1328,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":163.442,"paritySummary":{"errors":35,"warns":26,"resets":0}},{"njs":10.0,"offset":0.0,"notes":342,"bombs":0,"obstacles":5,"nps":2.092,"length":209.75,"characteristic":"Standard","difficulty":"Normal","events":1327,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":163.442,"paritySummary":{"errors":37,"warns":36,"resets":0}},{"njs":11.0,"offset":0.0,"notes":472,"bombs":0,"obstacles":5,"nps":2.888,"length":209.75,"characteristic":"Standard","difficulty":"Hard","events":1326,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":163.442,"paritySummary":{"errors":37,"warns":41,"resets":0}},{"njs":12.0,"offset":0.0,"notes":565,"bombs":0,"obstacles":5,"nps":3.457,"length":209.75,"characteristic":"Standard","difficulty":"Expert","events":1329,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":163.442,"paritySummary":{"errors":39,"warns":30,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/afc2a905079d1fcdc9d82fa50e83c842d4d42118.zip","coverURL":"https://cdn.beatsaver.com/afc2a905079d1fcdc9d82fa50e83c842d4d42118.jpg","previewURL":"https://cdn.beatsaver.com/afc2a905079d1fcdc9d82fa50e83c842d4d42118.mp3"}],"createdAt":"2018-11-16T17:57:55Z","updatedAt":"2018-11-16T17:57:55Z","lastPublishedAt":"2018-11-16T17:57:55Z"},{"id":"747","name":"Technologic - Daft Punk (Update)","description":"Expert / Hard / Normal","uploader":{"id":44595,"name":"awfulnaut","uniqueSet":true,"hash":"5cff0b7398cc5a672c84edac","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84edac?d=retro","type":"SIMPLE"},"metadata":{"bpm":127.0,"duration":169,"songName":"Technologic","songSubName":"Daft Punk","songAuthorName":"Awfulnaut","levelAuthorName":"awfulnaut"},"stats":{"plays":0,"downloads":26292,"upvotes":10662,"downvotes":205,"score":0.9518},"uploaded":"2018-06-30T18:30:38Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"831247d7d02e948e5d03622748bb130b5057023d","key":"747","state":"Published","createdAt":"2018-06-30T18:30:38Z","sageScore":6,"diffs":[{"njs":10.0,"offset":0.0,"notes":375,"bombs":334,"obstacles":9,"nps":2.276,"length":350.021,"characteristic":"Standard","difficulty":"Normal","events":1321,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":165.364,"paritySummary":{"errors":62,"warns":48,"resets":110}},{"njs":10.0,"offset":0.0,"notes":480,"bombs":306,"obstacles":3,"nps":2.913,"length":350.0,"characteristic":"Standard","difficulty":"Hard","events":1321,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":165.354,"paritySummary":{"errors":31,"warns":59,"resets":96}},{"njs":10.0,"offset":0.0,"notes":662,"bombs":138,"obstacles":3,"nps":4.018,"length":350.0,"characteristic":"Standard","difficulty":"Expert","events":1327,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":165.354,"paritySummary":{"errors":42,"warns":68,"resets":43}}],"downloadURL":"https://cdn.beatsaver.com/831247d7d02e948e5d03622748bb130b5057023d.zip","coverURL":"https://cdn.beatsaver.com/831247d7d02e948e5d03622748bb130b5057023d.jpg","previewURL":"https://cdn.beatsaver.com/831247d7d02e948e5d03622748bb130b5057023d.mp3"}],"createdAt":"2018-06-30T18:30:38Z","updatedAt":"2018-06-30T18:30:38Z","lastPublishedAt":"2018-06-30T18:30:38Z"},{"id":"1023","name":"I Wanna Be Like You (Sim Gretina Remix)","description":"Who doesn't love The Jungle Book? \r\nPreview: https://youtu.be/DXdo1-FlxSk","uploader":{"id":4285668,"name":"connorjc","uniqueSet":true,"hash":"5cff0b7398cc5a672c84fb89","avatar":"https://cdn.beatsaver.com/avatar/99724057217355776.png","type":"DISCORD"},"metadata":{"bpm":110.0,"duration":172,"songName":"I Wanna Be Like You (Sim Gretina Remix)","songSubName":"Jungle Book","songAuthorName":"ConnorJC","levelAuthorName":"ConnorJC"},"stats":{"plays":0,"downloads":15215,"upvotes":7020,"downvotes":108,"score":0.9513},"uploaded":"2018-08-16T13:41:07Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"638cf20187a122490b4662555e9072cd8073146b","key":"1023","state":"Published","createdAt":"2018-08-16T13:41:07Z","sageScore":4,"diffs":[{"njs":10.0,"offset":0.0,"notes":512,"bombs":0,"obstacles":52,"nps":3.276,"length":286.5,"characteristic":"Standard","difficulty":"Expert","events":486,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":156.273,"paritySummary":{"errors":81,"warns":50,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/638cf20187a122490b4662555e9072cd8073146b.zip","coverURL":"https://cdn.beatsaver.com/638cf20187a122490b4662555e9072cd8073146b.jpg","previewURL":"https://cdn.beatsaver.com/638cf20187a122490b4662555e9072cd8073146b.mp3"}],"createdAt":"2018-08-16T13:41:07Z","updatedAt":"2018-08-16T13:41:07Z","lastPublishedAt":"2018-08-16T13:41:07Z"},{"id":"18cc","name":"Du Hast by Rammstein (Kole Edit)","description":"Many has been asking, many have been waiting patiently, many have been confused as to why this hasn't been done before, but now it's here and now you can have it too; here's Du Hast by Rammstein now in Beat Saber!\r\n\r\nSong has been edited (shortened) to be tighter and not too repetitive.\r\n\r\nPreview:\r\nhttps://youtu.be/3i1mf2EGSjc\r\n\r\nBPM: 125.09\r\nDuration: 2:57\r\nEasy, Normal, Hard and Expert difficulties.\r\n\r\nEasy: 251, 0 obstacles, 0 mines\r\nNormal: 444 notes, 0 obstacles, 0 mines\r\nHard: 581 notes, 0 obstacles, 0 mines\r\nExpert: 437 notes, 0 obstacles, 0 mines\r\n\r\nThanks to VenclaireVR, Redmagi, Horseman, Saut and elliotttate for playtesting!\r\n\r\nDownload the One Saber version of this map here:\r\nhttps://beatsaver.com/browse/detail/6784-6436\r\n\r\nEnjoy!","uploader":{"id":4285318,"name":"kolezan","uniqueSet":true,"hash":"5cff0b7398cc5a672c84fcbb","avatar":"https://cdn.beatsaver.com/avatar/220513618763055106.png","type":"DISCORD"},"metadata":{"bpm":125.0,"duration":177,"songName":"Du Hast","songSubName":"Rammstein","songAuthorName":"Level by Kolezan","levelAuthorName":"Kolezan"},"stats":{"plays":0,"downloads":19197,"upvotes":9801,"downvotes":188,"score":0.9511},"uploaded":"2018-10-05T06:17:10Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"6df961680ead49e2d92de1a95b789e0ce4a026db","key":"18cc","state":"Published","createdAt":"2018-10-05T06:17:10Z","sageScore":4,"diffs":[{"njs":10.0,"offset":0.0,"notes":251,"bombs":0,"obstacles":0,"nps":1.487,"length":352.0,"characteristic":"Standard","difficulty":"Easy","events":581,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":168.96,"paritySummary":{"errors":65,"warns":24,"resets":0}},{"njs":11.0,"offset":0.0,"notes":444,"bombs":0,"obstacles":0,"nps":2.63,"length":352.0,"characteristic":"Standard","difficulty":"Normal","events":581,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":168.96,"paritySummary":{"errors":74,"warns":35,"resets":0}},{"njs":12.0,"offset":0.0,"notes":581,"bombs":0,"obstacles":0,"nps":3.441,"length":352.0,"characteristic":"Standard","difficulty":"Hard","events":581,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":168.96,"paritySummary":{"errors":83,"warns":44,"resets":0}},{"njs":12.0,"offset":0.0,"notes":723,"bombs":0,"obstacles":0,"nps":4.282,"length":352.0,"characteristic":"Standard","difficulty":"Expert","events":581,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":168.96,"paritySummary":{"errors":57,"warns":57,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/6df961680ead49e2d92de1a95b789e0ce4a026db.zip","coverURL":"https://cdn.beatsaver.com/6df961680ead49e2d92de1a95b789e0ce4a026db.jpg","previewURL":"https://cdn.beatsaver.com/6df961680ead49e2d92de1a95b789e0ce4a026db.mp3"}],"createdAt":"2018-10-05T06:17:10Z","updatedAt":"2018-10-05T06:17:10Z","lastPublishedAt":"2018-10-05T06:17:10Z"},{"id":"23c3","name":"Without Me (ILLENIUM Remix) - Halsey","description":"All 5 Difficulties\r\nBPM: 136\r\nNote Jumps Speed from E+to Easy: 14, 12, 11, 10, 10\r\n\r\nLemme know what you think!","uploader":{"id":30754,"name":"styngme","uniqueSet":false,"hash":"5cff0b7298cc5a672c84e9cd","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9cd?d=retro","type":"SIMPLE"},"metadata":{"bpm":136.0,"duration":247,"songName":"Without Me - ILLENIUM Remix","songSubName":"Halsey, ILLENIUM","songAuthorName":"StyngMe","levelAuthorName":"styngme"},"stats":{"plays":0,"downloads":23662,"upvotes":8757,"downvotes":162,"score":0.9507},"uploaded":"2018-12-04T15:46:54Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"a684cee0d634b9bb59eef234665fd28ef27876ac","key":"23c3","state":"Published","createdAt":"2018-12-04T15:46:54Z","sageScore":7,"diffs":[{"njs":10.0,"offset":0.0,"notes":571,"bombs":0,"obstacles":78,"nps":2.652,"length":488.0,"characteristic":"Standard","difficulty":"Easy","events":2901,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":215.294,"paritySummary":{"errors":5,"warns":2,"resets":0}},{"njs":10.0,"offset":0.0,"notes":747,"bombs":0,"obstacles":78,"nps":3.47,"length":488.0,"characteristic":"Standard","difficulty":"Normal","events":2901,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":215.294,"paritySummary":{"errors":51,"warns":40,"resets":0}},{"njs":11.0,"offset":0.0,"notes":788,"bombs":0,"obstacles":78,"nps":3.66,"length":488.0,"characteristic":"Standard","difficulty":"Hard","events":2901,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":215.294,"paritySummary":{"errors":58,"warns":40,"resets":0}},{"njs":12.0,"offset":0.0,"notes":850,"bombs":0,"obstacles":78,"nps":3.948,"length":488.0,"characteristic":"Standard","difficulty":"Expert","events":2901,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":215.294,"paritySummary":{"errors":72,"warns":69,"resets":0}},{"njs":14.0,"offset":0.0,"notes":872,"bombs":0,"obstacles":78,"nps":4.05,"length":488.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":2901,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":215.294,"paritySummary":{"errors":67,"warns":70,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/a684cee0d634b9bb59eef234665fd28ef27876ac.zip","coverURL":"https://cdn.beatsaver.com/a684cee0d634b9bb59eef234665fd28ef27876ac.jpg","previewURL":"https://cdn.beatsaver.com/a684cee0d634b9bb59eef234665fd28ef27876ac.mp3"}],"createdAt":"2018-12-04T15:46:54Z","updatedAt":"2018-12-04T15:46:54Z","lastPublishedAt":"2018-12-04T15:46:54Z"},{"id":"38ff","name":"Ievan Polkka","description":"","uploader":{"id":30164,"name":"fraktar","uniqueSet":true,"hash":"5cff0b7698cc5a672c8551b0","avatar":"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8551b0?d=retro","type":"SIMPLE"},"metadata":{"bpm":119.0,"duration":147,"songName":"Ievan Polkka","songSubName":"Hatsune Miku","songAuthorName":"Fraktar","levelAuthorName":"Fraktar"},"stats":{"plays":0,"downloads":17204,"upvotes":8751,"downvotes":167,"score":0.9501},"uploaded":"2019-02-23T15:58:08Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"72bf749f5df632cd103fccd734c9fd5cc7596caa","key":"38ff","state":"Published","createdAt":"2019-02-23T15:58:08Z","sageScore":5,"diffs":[{"njs":12.0,"offset":0.0,"notes":734,"bombs":0,"obstacles":16,"nps":5.09,"length":286.0,"characteristic":"Standard","difficulty":"Expert","events":1360,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":144.202,"paritySummary":{"errors":70,"warns":39,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/72bf749f5df632cd103fccd734c9fd5cc7596caa.zip","coverURL":"https://cdn.beatsaver.com/72bf749f5df632cd103fccd734c9fd5cc7596caa.jpg","previewURL":"https://cdn.beatsaver.com/72bf749f5df632cd103fccd734c9fd5cc7596caa.mp3"}],"createdAt":"2019-02-23T15:58:08Z","updatedAt":"2019-02-23T15:58:08Z","lastPublishedAt":"2019-02-23T15:58:08Z"},{"id":"8553","name":"Blinding Lights - The Weeknd","description":"This map was supposed to release last year and have a 90 degree difficulty but it got cut because life ¯\\_(ツ)_/¯ Fantastic song though.\n\nExpert Playthrough : https://youtu.be/GonnTYPmDVY","uploader":{"id":13320,"name":"novashaft","uniqueSet":true,"hash":"5cff0b7398cc5a672c84ee55","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee55?d=retro","type":"SIMPLE"},"metadata":{"bpm":171.0,"duration":199,"songName":"Blinding Lights","songSubName":"","songAuthorName":"The Weeknd","levelAuthorName":"NovaShaft"},"stats":{"plays":0,"downloads":34508,"upvotes":11999,"downvotes":269,"score":0.95},"uploaded":"2020-02-08T17:26:23.499Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"17d298f2bf78b453cd66474ce268ae9dac9fab46","key":"8553","state":"Published","createdAt":"2020-02-08T17:26:23.499Z","sageScore":7,"diffs":[{"njs":10.0,"offset":0.0,"notes":271,"bombs":0,"obstacles":15,"nps":1.482,"length":521.0,"characteristic":"Standard","difficulty":"Easy","events":3071,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":182.807,"paritySummary":{"errors":71,"warns":4,"resets":0}},{"njs":13.0,"offset":1.0,"notes":457,"bombs":16,"obstacles":25,"nps":2.5,"length":521.0,"characteristic":"Standard","difficulty":"Hard","events":3071,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":182.807,"paritySummary":{"errors":6,"warns":7,"resets":1}},{"njs":17.0,"offset":0.5,"notes":594,"bombs":44,"obstacles":33,"nps":3.249,"length":521.0,"characteristic":"Standard","difficulty":"Expert","events":3146,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":182.807,"paritySummary":{"errors":14,"warns":13,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/17d298f2bf78b453cd66474ce268ae9dac9fab46.zip","coverURL":"https://cdn.beatsaver.com/17d298f2bf78b453cd66474ce268ae9dac9fab46.jpg","previewURL":"https://cdn.beatsaver.com/17d298f2bf78b453cd66474ce268ae9dac9fab46.mp3"}],"createdAt":"2020-02-08T17:26:23.499Z","updatedAt":"2020-02-08T17:26:23.499Z","lastPublishedAt":"2020-02-08T17:26:23.499Z"},{"id":"2e9e","name":"YoiYoi Kokon - REOL","description":"Put on your yukata; lets travel back in time and enjoy ourselves! Here's REOL's probably most popular song mapped by me, YoiYoi Kokon (宵々古今)!\r\n\r\nThe audio version of the song is that of the music video (slightly edited by me) as I love the addition of the fireworks in the last part of the song. Together with the crowd in the intro this makes it feel like you're attending a festival.\r\n\r\nExpert+ is basically Expert but with no pauses and with the melody followed instead of the shouts.\r\n\r\nPreview:\r\nhttps://youtu.be/G61m6Au2foM\r\n\r\nBPM: 150\r\nDuration: 4:16\r\nEasy, Normal, Hard, Expert and Expert+ difficulties.\r\n\r\nEasy: 332, 12 obstacles, 0 mines\r\nNormal: 471 notes, 17 obstacles, 0 mines\r\nHard: 679 notes, 17 obstacles, 0 mines\r\nExpert: 954 notes, 17 obstacles, 0 mines\r\nExpert+: 1086 notes, 1 obstacles, 0 mines\r\n\r\nThanks to Redmagi, Aithke, aggrogahu, Don and Emperor of the Internet for playtesting!\r\n\r\nEnjoy!","uploader":{"id":4285318,"name":"kolezan","uniqueSet":true,"hash":"5cff0b7398cc5a672c84fcbb","avatar":"https://cdn.beatsaver.com/avatar/220513618763055106.png","type":"DISCORD"},"metadata":{"bpm":150.0,"duration":256,"songName":"YoiYoi Kokon","songSubName":"REOL","songAuthorName":"Kolezan","levelAuthorName":"Kolezan"},"stats":{"plays":0,"downloads":13836,"upvotes":6975,"downvotes":118,"score":0.9499},"uploaded":"2019-01-18T09:22:30Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"766a222b102b6522cd5d31e82ec7adc7c5ff011e","key":"2e9e","state":"Published","createdAt":"2019-01-18T09:22:30Z","sageScore":7,"diffs":[{"njs":9.0,"offset":0.0,"notes":332,"bombs":0,"obstacles":12,"nps":1.349,"length":615.203,"characteristic":"Standard","difficulty":"Easy","events":2115,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":246.081,"paritySummary":{"errors":48,"warns":24,"resets":0}},{"njs":10.0,"offset":0.0,"notes":471,"bombs":0,"obstacles":17,"nps":1.914,"length":615.203,"characteristic":"Standard","difficulty":"Normal","events":2115,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":246.081,"paritySummary":{"errors":67,"warns":38,"resets":0}},{"njs":11.0,"offset":0.0,"notes":679,"bombs":0,"obstacles":17,"nps":2.759,"length":615.203,"characteristic":"Standard","difficulty":"Hard","events":2115,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":246.081,"paritySummary":{"errors":79,"warns":71,"resets":0}},{"njs":12.5,"offset":0.0,"notes":954,"bombs":0,"obstacles":17,"nps":3.877,"length":615.203,"characteristic":"Standard","difficulty":"Expert","events":2115,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":246.081,"paritySummary":{"errors":104,"warns":144,"resets":0}},{"njs":12.5,"offset":0.0,"notes":1086,"bombs":0,"obstacles":1,"nps":4.413,"length":615.203,"characteristic":"Standard","difficulty":"ExpertPlus","events":2115,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":246.081,"paritySummary":{"errors":102,"warns":152,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/766a222b102b6522cd5d31e82ec7adc7c5ff011e.zip","coverURL":"https://cdn.beatsaver.com/766a222b102b6522cd5d31e82ec7adc7c5ff011e.jpg","previewURL":"https://cdn.beatsaver.com/766a222b102b6522cd5d31e82ec7adc7c5ff011e.mp3"}],"createdAt":"2019-01-18T09:22:30Z","updatedAt":"2019-01-18T09:22:30Z","lastPublishedAt":"2019-01-18T09:22:30Z"},{"id":"30fd","name":"Love The Way You Lie (ft. Rihanna) - Eminem, Rihanna | Charted by StyngMe","description":"I hope you enjoy!\r\nBPM: 87\r\nDifficulties: ALL\r\nNote Jump Speed for E+ through Easy: 16, 14, 12, 12, 11","uploader":{"id":30754,"name":"styngme","uniqueSet":false,"hash":"5cff0b7298cc5a672c84e9cd","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9cd?d=retro","type":"SIMPLE"},"metadata":{"bpm":87.0,"duration":265,"songName":"Love The Way You Lie (ft. Rihanna)","songSubName":"Eminem, Rihanna","songAuthorName":"StyngMe","levelAuthorName":"styngme"},"stats":{"plays":0,"downloads":24461,"upvotes":7923,"downvotes":147,"score":0.9497},"uploaded":"2019-01-25T15:48:22Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"8161daf97cab8c95aea0556549b4b8cfb29a13d3","key":"30fd","state":"Published","createdAt":"2019-01-25T15:48:22Z","sageScore":7,"diffs":[{"njs":11.0,"offset":0.0,"notes":387,"bombs":0,"obstacles":18,"nps":1.661,"length":337.75,"characteristic":"Standard","difficulty":"Easy","events":2082,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":232.931,"paritySummary":{"errors":28,"warns":28,"resets":0}},{"njs":12.0,"offset":0.0,"notes":503,"bombs":0,"obstacles":6,"nps":2.159,"length":337.75,"characteristic":"Standard","difficulty":"Normal","events":2082,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":232.931,"paritySummary":{"errors":21,"warns":36,"resets":0}},{"njs":12.0,"offset":0.0,"notes":617,"bombs":0,"obstacles":0,"nps":2.649,"length":337.75,"characteristic":"Standard","difficulty":"Hard","events":2082,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":232.931,"paritySummary":{"errors":37,"warns":38,"resets":0}},{"njs":14.0,"offset":0.0,"notes":1006,"bombs":0,"obstacles":0,"nps":4.319,"length":337.75,"characteristic":"Standard","difficulty":"Expert","events":2082,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":232.931,"paritySummary":{"errors":24,"warns":55,"resets":0}},{"njs":16.0,"offset":0.0,"notes":1207,"bombs":0,"obstacles":0,"nps":5.182,"length":337.75,"characteristic":"Standard","difficulty":"ExpertPlus","events":2085,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":232.931,"paritySummary":{"errors":39,"warns":76,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/8161daf97cab8c95aea0556549b4b8cfb29a13d3.zip","coverURL":"https://cdn.beatsaver.com/8161daf97cab8c95aea0556549b4b8cfb29a13d3.jpg","previewURL":"https://cdn.beatsaver.com/8161daf97cab8c95aea0556549b4b8cfb29a13d3.mp3"}],"createdAt":"2019-01-25T15:48:22Z","updatedAt":"2019-01-25T15:48:22Z","lastPublishedAt":"2019-01-25T15:48:22Z"},{"id":"26f6","name":"IGNITE (Ranked Version) [Sword Art Online Season 2 Opening] - Aoi Eir","description":"Trying to get this version ranked! New version with changes according to the ranking criteria: Double directional notes fixed, flow improvements, removed fast dodge walls on bridge section.","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":171.0,"duration":244,"songName":"IGNITE","songSubName":"Aoi Eir","songAuthorName":"Joetastic","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":23842,"upvotes":11061,"downvotes":245,"score":0.9495},"uploaded":"2018-12-20T01:21:47Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"125b07ebcc06fe9667e83fc2d6b9ae5ecbc72e8c","key":"26f6","state":"Published","createdAt":"2018-12-20T01:21:47Z","sageScore":6,"diffs":[{"njs":14.0,"offset":0.0,"notes":1093,"bombs":16,"obstacles":16,"nps":4.594,"length":678.0,"characteristic":"Standard","difficulty":"Expert","events":1642,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":237.895,"paritySummary":{"errors":77,"warns":79,"resets":0},"stars":3.21}],"downloadURL":"https://cdn.beatsaver.com/125b07ebcc06fe9667e83fc2d6b9ae5ecbc72e8c.zip","coverURL":"https://cdn.beatsaver.com/125b07ebcc06fe9667e83fc2d6b9ae5ecbc72e8c.jpg","previewURL":"https://cdn.beatsaver.com/125b07ebcc06fe9667e83fc2d6b9ae5ecbc72e8c.mp3"}],"createdAt":"2018-12-20T01:21:47Z","updatedAt":"2018-12-20T01:21:47Z","lastPublishedAt":"2018-12-20T01:21:47Z"},{"id":"6b55","name":"ABIS & Signal & Tasha Baxter - The Wall (Buunshin Remix)","description":"https://youtu.be/xEowRTlHvuI","uploader":{"id":12996,"name":"rustic","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e8c4","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro","type":"SIMPLE"},"metadata":{"bpm":172.0,"duration":271,"songName":"The Wall","songSubName":"(Buunshin Remix)","songAuthorName":"ABIS & Signal & Tasha Baxter","levelAuthorName":"Rustic"},"stats":{"plays":0,"downloads":8045,"upvotes":4697,"downvotes":61,"score":0.9491},"uploaded":"2019-10-21T13:30:47.405Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"e855d1a7b17904322aa3ebaf3bb002421bce568a","key":"6b55","state":"Published","createdAt":"2019-10-21T13:30:47.405Z","sageScore":6,"diffs":[{"njs":20.0,"offset":0.0,"notes":449,"bombs":0,"obstacles":9581,"nps":1.828,"length":704.0,"characteristic":"Standard","difficulty":"Hard","events":7859,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":245.581,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":20.0,"offset":0.0,"notes":606,"bombs":0,"obstacles":9589,"nps":2.468,"length":704.0,"characteristic":"Standard","difficulty":"Expert","events":7808,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":245.581,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/e855d1a7b17904322aa3ebaf3bb002421bce568a.zip","coverURL":"https://cdn.beatsaver.com/e855d1a7b17904322aa3ebaf3bb002421bce568a.jpg","previewURL":"https://cdn.beatsaver.com/e855d1a7b17904322aa3ebaf3bb002421bce568a.mp3"}],"createdAt":"2019-10-21T13:30:47.405Z","updatedAt":"2019-10-21T13:30:47.405Z","lastPublishedAt":"2019-10-21T13:30:47.405Z"},{"id":"5e81","name":"Stressed Out - Twenty One Pilots","description":"\"Stressed Out\" is a song by American musical duo Twenty One Pilots, for their fourth studio album, Blurryface. Written by Tyler Joseph and produced by Mike Elizondo, the lyrics discuss the harsh end of adolescence and the transition to adulthood.","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":170.0,"duration":203,"songName":"Stressed Out","songSubName":"","songAuthorName":"Twenty One Pilots","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":18746,"upvotes":6062,"downvotes":98,"score":0.9491},"uploaded":"2019-08-22T14:20:38.731Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"068a80d89857a6a2221f54e8a5d374584b2db77e","key":"5e81","state":"Published","createdAt":"2019-08-22T14:20:38.731Z","sageScore":6,"diffs":[{"njs":14.0,"offset":0.0,"notes":651,"bombs":0,"obstacles":42,"nps":3.282,"length":562.0,"characteristic":"Standard","difficulty":"Expert","events":1670,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":198.353,"paritySummary":{"errors":69,"warns":69,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/068a80d89857a6a2221f54e8a5d374584b2db77e.zip","coverURL":"https://cdn.beatsaver.com/068a80d89857a6a2221f54e8a5d374584b2db77e.jpg","previewURL":"https://cdn.beatsaver.com/068a80d89857a6a2221f54e8a5d374584b2db77e.mp3"}],"createdAt":"2019-08-22T14:20:38.731Z","updatedAt":"2019-08-22T14:20:38.731Z","lastPublishedAt":"2019-08-22T14:20:38.731Z"},{"id":"5552","name":"It's Tricky - Run DMC","description":"\"It's Tricky\" is the fourth and final single released from Run-DMC's third album, Raising Hell which was released early in 1987. \n\nThis is one of favorite workout songs, can't believe I haven't mapped it yet :P","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":128.0,"duration":184,"songName":"It's Tricky","songSubName":"","songAuthorName":"Run DMC","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":13372,"upvotes":4472,"downvotes":56,"score":0.9489},"uploaded":"2019-07-02T17:23:10.798Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"9027d4274febf8722078a5f70b51da58cf433322","key":"5552","state":"Published","createdAt":"2019-07-02T17:23:10.798Z","sageScore":6,"diffs":[{"njs":14.0,"offset":0.0,"notes":721,"bombs":0,"obstacles":8,"nps":3.998,"length":384.688,"characteristic":"Standard","difficulty":"Expert","events":3029,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":180.322,"paritySummary":{"errors":34,"warns":36,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/9027d4274febf8722078a5f70b51da58cf433322.zip","coverURL":"https://cdn.beatsaver.com/9027d4274febf8722078a5f70b51da58cf433322.jpg","previewURL":"https://cdn.beatsaver.com/9027d4274febf8722078a5f70b51da58cf433322.mp3"}],"createdAt":"2019-07-02T17:23:10.798Z","updatedAt":"2019-07-02T17:23:10.798Z","lastPublishedAt":"2019-07-02T17:23:10.798Z"},{"id":"3038","name":"Moves Like Jagger - Maroon 5 ft. Christina Aguilera","description":"See it in Action: https://www.youtube.com/watch?v=buZypCnR1r8","uploader":{"id":38202,"name":"fafurion","uniqueSet":false,"hash":"5cff0b7398cc5a672c84f945","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f945?d=retro","type":"SIMPLE"},"metadata":{"bpm":128.0,"duration":204,"songName":"Moves Like Jagger","songSubName":"Maroon 5 ft. Christina Aguilera","songAuthorName":"Fafurion","levelAuthorName":"fafurion"},"stats":{"plays":0,"downloads":24035,"upvotes":7173,"downvotes":137,"score":0.9482},"uploaded":"2019-01-23T00:01:22Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"6f5e229b8ec73c9e448c00a680548b0ce25918ee","key":"3038","state":"Published","createdAt":"2019-01-23T00:01:22Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":297,"bombs":0,"obstacles":88,"nps":1.547,"length":409.5,"characteristic":"Standard","difficulty":"Easy","events":2966,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":191.953,"paritySummary":{"errors":21,"warns":30,"resets":0}},{"njs":10.0,"offset":0.0,"notes":343,"bombs":0,"obstacles":88,"nps":1.787,"length":409.5,"characteristic":"Standard","difficulty":"Normal","events":2966,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":191.953,"paritySummary":{"errors":29,"warns":33,"resets":0}},{"njs":12.0,"offset":0.0,"notes":524,"bombs":0,"obstacles":125,"nps":2.73,"length":409.5,"characteristic":"Standard","difficulty":"Hard","events":2966,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":191.953,"paritySummary":{"errors":40,"warns":62,"resets":0}},{"njs":12.0,"offset":0.0,"notes":695,"bombs":0,"obstacles":100,"nps":3.621,"length":409.5,"characteristic":"Standard","difficulty":"Expert","events":2966,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":191.953,"paritySummary":{"errors":81,"warns":108,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/6f5e229b8ec73c9e448c00a680548b0ce25918ee.zip","coverURL":"https://cdn.beatsaver.com/6f5e229b8ec73c9e448c00a680548b0ce25918ee.jpg","previewURL":"https://cdn.beatsaver.com/6f5e229b8ec73c9e448c00a680548b0ce25918ee.mp3"}],"createdAt":"2019-01-23T00:01:22Z","updatedAt":"2019-01-23T00:01:22Z","lastPublishedAt":"2019-01-23T00:01:22Z"},{"id":"bd3","name":"New Rules - Dua Lipa","description":"Difficulties: Expert+, Expert, Hard, Normal\r\nYouTube Preview: https://youtu.be/Ohq6cA_1NAE\r\nLighting by Heisenberg: https://beatsaver.com/index.php/browse/byuser/1089","uploader":{"id":30311,"name":"bennydabeast","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e98d","avatar":"https://cdn.beatsaver.com/avatar/30311.jpg","type":"SIMPLE"},"metadata":{"bpm":116.0,"duration":211,"songName":"New Rules","songSubName":"Dua Lipa","songAuthorName":"BennyDaBeast (Lighting: Heisenberg)","levelAuthorName":"bennydabeast"},"stats":{"plays":0,"downloads":18879,"upvotes":7509,"downvotes":149,"score":0.948},"uploaded":"2018-07-25T20:53:52Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"674b1b540ac5851c92c8cde7dd456698f5a733c4","key":"bd3","state":"Published","createdAt":"2018-07-25T20:53:52Z","sageScore":4,"diffs":[{"njs":10.0,"offset":0.0,"notes":423,"bombs":0,"obstacles":7,"nps":2.055,"length":398.0,"characteristic":"Standard","difficulty":"Normal","events":2753,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":205.862,"paritySummary":{"errors":81,"warns":58,"resets":0}},{"njs":10.0,"offset":0.0,"notes":507,"bombs":0,"obstacles":32,"nps":2.463,"length":398.0,"characteristic":"Standard","difficulty":"Hard","events":2753,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":205.862,"paritySummary":{"errors":73,"warns":67,"resets":0}},{"njs":10.0,"offset":0.0,"notes":771,"bombs":0,"obstacles":32,"nps":3.745,"length":398.003,"characteristic":"Standard","difficulty":"Expert","events":2753,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":205.863,"paritySummary":{"errors":95,"warns":124,"resets":0}},{"njs":10.0,"offset":0.0,"notes":873,"bombs":0,"obstacles":32,"nps":4.241,"length":398.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":2753,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":205.862,"paritySummary":{"errors":103,"warns":146,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/674b1b540ac5851c92c8cde7dd456698f5a733c4.zip","coverURL":"https://cdn.beatsaver.com/674b1b540ac5851c92c8cde7dd456698f5a733c4.jpg","previewURL":"https://cdn.beatsaver.com/674b1b540ac5851c92c8cde7dd456698f5a733c4.mp3"}],"createdAt":"2018-07-25T20:53:52Z","updatedAt":"2018-07-25T20:53:52Z","lastPublishedAt":"2018-07-25T20:53:52Z"},{"id":"6d96","name":"League of Legends - Phoenix (ft. Cailin Russo and Chrissy Costanza)","description":"The Worlds 2019 theme for League of Legends.\nVideo: https://youtu.be/aUTcwyZ9LmI\nExpert+ Video: https://www.youtube.com/watch?v=-uh4WOhZmQs\n\nEasy: Notes: 245 NPS: 1.23 NJS: 12\nNormal: Notes: 307 NPS: 1.54 NJS: 14\nHard: Notes: 428 NPS: 2.15 NJS: 16\nExpert: Notes: 504 NPS: 2.53 NJS: 16\nExpert+: Notes: 664 NPS: 3.33 NJS: 17\n\nCheck out my lightshows here: https://www.youtube.com/playlist?list=PLwl6dYq72JOYu1BnKl5WATa4Dh__ZJmuN","uploader":{"id":14808,"name":"halcyon12","uniqueSet":true,"hash":"5cff0b7698cc5a672c8547ad","avatar":"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8547ad?d=retro","type":"SIMPLE"},"metadata":{"bpm":168.0,"duration":199,"songName":"Phoenix","songSubName":"ft. Cailin Russo and Chrissy Costanza","songAuthorName":"League of Legends","levelAuthorName":"Halcyon12"},"stats":{"plays":0,"downloads":15278,"upvotes":6407,"downvotes":122,"score":0.9471},"uploaded":"2019-11-02T00:52:14.279Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"1fd9078f4b357143390a8d24664736f78b4224a9","key":"6d96","state":"Published","createdAt":"2019-11-02T00:52:14.279Z","sageScore":6,"diffs":[{"njs":12.0,"offset":0.0,"notes":245,"bombs":0,"obstacles":20,"nps":1.376,"length":498.5,"characteristic":"Standard","difficulty":"Easy","events":2347,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":178.036,"paritySummary":{"errors":11,"warns":1,"resets":0}},{"njs":14.0,"offset":1.25,"notes":307,"bombs":0,"obstacles":21,"nps":1.724,"length":498.5,"characteristic":"Standard","difficulty":"Normal","events":2347,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":178.036,"paritySummary":{"errors":7,"warns":0,"resets":0}},{"njs":16.0,"offset":0.75,"notes":428,"bombs":0,"obstacles":25,"nps":2.404,"length":498.5,"characteristic":"Standard","difficulty":"Hard","events":2347,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":178.036,"paritySummary":{"errors":2,"warns":0,"resets":0}},{"njs":16.0,"offset":0.25,"notes":504,"bombs":0,"obstacles":20,"nps":2.828,"length":499.0,"characteristic":"Standard","difficulty":"Expert","events":2347,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":178.214,"paritySummary":{"errors":1,"warns":1,"resets":0}},{"njs":17.0,"offset":0.0,"notes":664,"bombs":0,"obstacles":92,"nps":3.525,"length":527.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":2347,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":188.393,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":12.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"Lightshow","difficulty":"ExpertPlus","events":2347,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/1fd9078f4b357143390a8d24664736f78b4224a9.zip","coverURL":"https://cdn.beatsaver.com/1fd9078f4b357143390a8d24664736f78b4224a9.jpg","previewURL":"https://cdn.beatsaver.com/1fd9078f4b357143390a8d24664736f78b4224a9.mp3"}],"createdAt":"2019-11-02T00:52:14.279Z","updatedAt":"2019-11-02T00:52:14.279Z","lastPublishedAt":"2019-11-02T00:52:14.279Z"},{"id":"6366","name":"Star Sky - Two Steps From Hell","description":"68\nNormal wall --- 43 walls\nHyper wall --- 6631 walls\n\ndoodle :)","uploader":{"id":4285521,"name":"ejiejidayo","uniqueSet":true,"hash":"5cff0b7398cc5a672c84fc58","avatar":"https://cdn.beatsaver.com/avatar/224894241279574016.png","type":"DISCORD"},"metadata":{"bpm":130.0,"duration":330,"songName":"Star Sky Two Steps From Hell","songSubName":"","songAuthorName":".","levelAuthorName":"ejiejidayo"},"stats":{"plays":0,"downloads":9471,"upvotes":3452,"downvotes":43,"score":0.9459},"uploaded":"2019-09-14T19:59:45.575Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"323975ef9eaec337c8208dc864e766289e3d5ef1","key":"6366","state":"Published","createdAt":"2019-09-14T19:59:45.575Z","sageScore":5,"diffs":[{"njs":16.0,"offset":0.0,"notes":1218,"bombs":0,"obstacles":43,"nps":3.754,"length":703.0,"characteristic":"Standard","difficulty":"Hard","events":1044,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":324.462,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":16.0,"offset":0.0,"notes":1218,"bombs":0,"obstacles":6631,"nps":3.754,"length":703.0,"characteristic":"Standard","difficulty":"Expert","events":1044,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":324.462,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/323975ef9eaec337c8208dc864e766289e3d5ef1.zip","coverURL":"https://cdn.beatsaver.com/323975ef9eaec337c8208dc864e766289e3d5ef1.jpg","previewURL":"https://cdn.beatsaver.com/323975ef9eaec337c8208dc864e766289e3d5ef1.mp3"}],"createdAt":"2019-09-14T19:59:45.575Z","updatedAt":"2019-09-14T19:59:45.575Z","lastPublishedAt":"2019-09-14T19:59:45.575Z"},{"id":"2005","name":"New Divide - Linkin Park - 100k Contest","description":"This is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes. Go to https://bsaber.com/100k-contest/ to register!\nhttps://www.youtube.com/watch?v=deWMNAw03QI&t=28s\n\nhttps://twitter.com/TheDownyCat\nhttps://www.twitch.tv/downycat\nhttps://streamlabs.com/downycat/tip","uploader":{"id":4285982,"name":"downycat","uniqueSet":true,"hash":"5cff0b7398cc5a672c84ede5","avatar":"https://cdn.beatsaver.com/avatar/173538829888782336.png","type":"DISCORD"},"metadata":{"bpm":118.0,"duration":268,"songName":"New Divide","songSubName":"Linkin Park","songAuthorName":"DownyCat","levelAuthorName":"downycat"},"stats":{"plays":0,"downloads":16063,"upvotes":4873,"downvotes":83,"score":0.9459},"uploaded":"2018-11-13T00:58:32Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"be4a33ad1b1caef9f1f42b680ca1a9087db19ffe","key":"2005","state":"Published","createdAt":"2018-11-13T00:58:32Z","sageScore":6,"diffs":[{"njs":13.0,"offset":0.0,"notes":353,"bombs":0,"obstacles":78,"nps":1.363,"length":509.5,"characteristic":"Standard","difficulty":"Easy","events":2605,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":259.068,"paritySummary":{"errors":29,"warns":1,"resets":0}},{"njs":13.0,"offset":0.0,"notes":589,"bombs":0,"obstacles":18,"nps":2.269,"length":510.5,"characteristic":"Standard","difficulty":"Normal","events":2605,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":259.576,"paritySummary":{"errors":12,"warns":6,"resets":0}},{"njs":13.0,"offset":0.0,"notes":893,"bombs":0,"obstacles":13,"nps":3.44,"length":510.5,"characteristic":"Standard","difficulty":"Hard","events":2605,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":259.576,"paritySummary":{"errors":16,"warns":24,"resets":0}},{"njs":13.0,"offset":0.0,"notes":1167,"bombs":0,"obstacles":25,"nps":4.496,"length":510.5,"characteristic":"Standard","difficulty":"Expert","events":2605,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":259.576,"paritySummary":{"errors":38,"warns":48,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/be4a33ad1b1caef9f1f42b680ca1a9087db19ffe.zip","coverURL":"https://cdn.beatsaver.com/be4a33ad1b1caef9f1f42b680ca1a9087db19ffe.jpg","previewURL":"https://cdn.beatsaver.com/be4a33ad1b1caef9f1f42b680ca1a9087db19ffe.mp3"}],"createdAt":"2018-11-13T00:58:32Z","updatedAt":"2018-11-13T00:58:32Z","lastPublishedAt":"2018-11-13T00:58:32Z"},{"id":"d7fa","name":"Geoxor - Gloom [Wallmap]","description":"REUPLOAD due to last minute mapping error\n\nSpecial thanks to:\nNyri0 - For providing scripts that were crucial to making this map possible, and for helping me along the way.\nLayanmeta - For giving me so much encouragement throughout the final stages and making a brilliant YouTube video on this map.\nBSMG discord - For the continued support throughout the development process\nAll you people/birds - For playing my map :D\n\nBRIAN HAS BECOME SENTIENT. ALL HAIL BRIAN","uploader":{"id":18761,"name":"minething","uniqueSet":true,"hash":"5e9b4ead16c9680006287387","avatar":"https://www.gravatar.com/avatar/5e9b4ead16c9680006287387?d=retro","type":"SIMPLE"},"metadata":{"bpm":93.0,"duration":167,"songName":"Gloom","songSubName":"","songAuthorName":"Geoxor","levelAuthorName":"Mine Thing"},"stats":{"plays":0,"downloads":8341,"upvotes":2314,"downvotes":15,"score":0.9457},"uploaded":"2020-08-16T19:13:40.774Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"823b4e880baac024728ae96a7c20e28026c4585d","key":"d7fa","state":"Published","createdAt":"2020-08-16T19:13:40.774Z","sageScore":3,"diffs":[{"njs":12.0,"offset":6.0,"notes":0,"bombs":0,"obstacles":15605,"nps":0.0,"length":0.0,"characteristic":"Standard","difficulty":"Easy","events":144,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":12.0,"offset":6.0,"notes":202,"bombs":0,"obstacles":15605,"nps":1.309,"length":239.125,"characteristic":"Standard","difficulty":"Hard","events":144,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":154.274,"paritySummary":{"errors":48,"warns":6,"resets":0}},{"njs":12.0,"offset":6.0,"notes":411,"bombs":4,"obstacles":15605,"nps":2.665,"length":239.0,"characteristic":"Standard","difficulty":"Expert","events":144,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":154.194,"paritySummary":{"errors":0,"warns":0,"resets":1}},{"njs":12.0,"offset":3.0,"notes":411,"bombs":4,"obstacles":12340,"nps":2.665,"length":239.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":144,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":154.194,"paritySummary":{"errors":0,"warns":0,"resets":1}}],"downloadURL":"https://cdn.beatsaver.com/823b4e880baac024728ae96a7c20e28026c4585d.zip","coverURL":"https://cdn.beatsaver.com/823b4e880baac024728ae96a7c20e28026c4585d.jpg","previewURL":"https://cdn.beatsaver.com/823b4e880baac024728ae96a7c20e28026c4585d.mp3"}],"createdAt":"2020-08-16T19:13:40.774Z","updatedAt":"2020-08-16T19:13:40.774Z","lastPublishedAt":"2020-08-16T19:13:40.774Z"},{"id":"116b0","name":"Sakuzyo - Lost Memory[Wall Map]","description":"https://www.youtube.com/watch?v=Ha0199UiDUQ\nMy first noodle extensions map\nMay cause performance issue :)\nRequirements:Noodle Extensions,Chroma","uploader":{"id":4289114,"name":"waika","uniqueSet":true,"hash":"5cff0b7698cc5a672c85464f","avatar":"https://cdn.beatsaver.com/avatar/530663167244894220.png","type":"DISCORD"},"metadata":{"bpm":95.0,"duration":255,"songName":"Lost Memory","songSubName":"","songAuthorName":"Sakuzyo","levelAuthorName":"waika"},"stats":{"plays":0,"downloads":9091,"upvotes":3250,"downvotes":39,"score":0.9455},"uploaded":"2020-11-28T11:08:12.961Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"1a88eee7cb1962157cc2439741fb06f7f78180d4","key":"116b0","state":"Published","createdAt":"2020-11-28T11:08:12.961Z","sageScore":3,"diffs":[{"njs":17.0,"offset":0.5,"notes":0,"bombs":0,"obstacles":57070,"nps":0.0,"length":0.0,"characteristic":"Standard","difficulty":"Normal","events":230,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":17.0,"offset":0.5,"notes":506,"bombs":0,"obstacles":57070,"nps":2.36,"length":339.5,"characteristic":"Standard","difficulty":"Expert","events":230,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":214.421,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/1a88eee7cb1962157cc2439741fb06f7f78180d4.zip","coverURL":"https://cdn.beatsaver.com/1a88eee7cb1962157cc2439741fb06f7f78180d4.jpg","previewURL":"https://cdn.beatsaver.com/1a88eee7cb1962157cc2439741fb06f7f78180d4.mp3"}],"createdAt":"2020-11-28T11:08:12.961Z","updatedAt":"2020-11-28T11:08:12.961Z","lastPublishedAt":"2020-11-28T11:08:12.961Z"},{"id":"9a0c","name":"Thnks fr th Mmrs - Fall Out Boy","description":"Thnks fr th Mmrs (or Thanks for the Memories) from Fall Out Boy.\nSo far the map that I have put the most work into (and which probably made me age by 3 years). Hope you enjoy it!\n\nThe map has Chroma lighting but can also be played without the Chroma mod.\nExpert+ contains single saber sections and polyrhythm parts. Just so you are warned ;)\n\nBig thanks to Sorukun for playtesting this map and especially to Timeweaver for pointing out all issues it had during its creation!","uploader":{"id":21367,"name":"hamsta","uniqueSet":true,"hash":"5de27451fffaa600066f2842","avatar":"https://www.gravatar.com/avatar/5de27451fffaa600066f2842?d=retro","type":"SIMPLE"},"metadata":{"bpm":155.0,"duration":197,"songName":"Thnks fr th Mmrs","songSubName":"","songAuthorName":"Fall Out Boy","levelAuthorName":"Hamsta"},"stats":{"plays":0,"downloads":14444,"upvotes":4054,"downvotes":62,"score":0.9453},"uploaded":"2020-04-12T09:50:46.516Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"0e8ef3006db854c67f04fe72322bccea410f69ee","key":"9a0c","state":"Published","createdAt":"2020-04-12T09:50:46.516Z","sageScore":5,"diffs":[{"njs":14.0,"offset":0.0,"notes":580,"bombs":0,"obstacles":51,"nps":3.092,"length":484.0,"characteristic":"Standard","difficulty":"Hard","events":2597,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":187.355,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":14.0,"offset":0.0,"notes":637,"bombs":0,"obstacles":51,"nps":3.395,"length":484.0,"characteristic":"Standard","difficulty":"Expert","events":2597,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":187.355,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":16.0,"offset":0.0,"notes":844,"bombs":0,"obstacles":39,"nps":4.499,"length":484.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":2597,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":187.355,"paritySummary":{"errors":1,"warns":2,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/0e8ef3006db854c67f04fe72322bccea410f69ee.zip","coverURL":"https://cdn.beatsaver.com/0e8ef3006db854c67f04fe72322bccea410f69ee.jpg","previewURL":"https://cdn.beatsaver.com/0e8ef3006db854c67f04fe72322bccea410f69ee.mp3"}],"createdAt":"2020-04-12T09:50:46.516Z","updatedAt":"2020-04-12T09:50:46.516Z","lastPublishedAt":"2020-04-12T09:50:46.516Z"},{"id":"4980","name":"Paradise - Coldplay","description":"\"Paradise\" is a song by the British rock band Coldplay. The song was released on 12 September 2011. I kinda like this song for relaxing on long car rides and I don't know how it will feel as a beat saber map but I'ma try mapping it anyways. So here it is :)","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":70.0,"duration":278,"songName":"Paradise","songSubName":"Coldplay","songAuthorName":"Joetastic","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":12627,"upvotes":2893,"downvotes":31,"score":0.9451},"uploaded":"2019-04-30T05:45:51Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"b14639af36673a43fe32bc7563619deff438d438","key":"4980","state":"Published","createdAt":"2019-04-30T05:45:51Z","sageScore":6,"diffs":[{"njs":13.0,"offset":0.0,"notes":1023,"bombs":0,"obstacles":35,"nps":3.816,"length":312.75,"characteristic":"Standard","difficulty":"Expert","events":4651,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":268.071,"paritySummary":{"errors":28,"warns":29,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/b14639af36673a43fe32bc7563619deff438d438.zip","coverURL":"https://cdn.beatsaver.com/b14639af36673a43fe32bc7563619deff438d438.jpg","previewURL":"https://cdn.beatsaver.com/b14639af36673a43fe32bc7563619deff438d438.mp3"}],"createdAt":"2019-04-30T05:45:51Z","updatedAt":"2019-04-30T05:45:51Z","lastPublishedAt":"2019-04-30T05:45:51Z"},{"id":"efe","name":"Some Nights - Fun.","description":"Difficulties: Expert+, Expert, Hard, Normal\r\nYouTube Preview: https://youtu.be/X4R7VIZPffk","uploader":{"id":30311,"name":"bennydabeast","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e98d","avatar":"https://cdn.beatsaver.com/avatar/30311.jpg","type":"SIMPLE"},"metadata":{"bpm":108.0,"duration":255,"songName":"Some Nights","songSubName":"Fun.","songAuthorName":"BennyDaBeast","levelAuthorName":"bennydabeast"},"stats":{"plays":0,"downloads":15367,"upvotes":7399,"downvotes":170,"score":0.9451},"uploaded":"2018-08-10T20:34:09Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"e64d6b7c5527d36005ae1801268798dd21ccf605","key":"efe","state":"Published","createdAt":"2018-08-10T20:34:09Z","sageScore":4,"diffs":[{"njs":10.0,"offset":0.0,"notes":321,"bombs":0,"obstacles":14,"nps":1.382,"length":418.0,"characteristic":"Standard","difficulty":"Normal","events":1864,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":232.222,"paritySummary":{"errors":73,"warns":36,"resets":0}},{"njs":10.0,"offset":0.0,"notes":432,"bombs":0,"obstacles":14,"nps":1.86,"length":418.0,"characteristic":"Standard","difficulty":"Hard","events":1864,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":232.222,"paritySummary":{"errors":82,"warns":51,"resets":0}},{"njs":10.0,"offset":0.0,"notes":680,"bombs":0,"obstacles":14,"nps":2.928,"length":418.0,"characteristic":"Standard","difficulty":"Expert","events":1864,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":232.222,"paritySummary":{"errors":86,"warns":82,"resets":0}},{"njs":10.0,"offset":0.0,"notes":810,"bombs":0,"obstacles":14,"nps":3.488,"length":418.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":1864,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":232.222,"paritySummary":{"errors":108,"warns":106,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/e64d6b7c5527d36005ae1801268798dd21ccf605.zip","coverURL":"https://cdn.beatsaver.com/e64d6b7c5527d36005ae1801268798dd21ccf605.jpg","previewURL":"https://cdn.beatsaver.com/e64d6b7c5527d36005ae1801268798dd21ccf605.mp3"}],"createdAt":"2018-08-10T20:34:09Z","updatedAt":"2018-08-10T20:34:09Z","lastPublishedAt":"2018-08-10T20:34:09Z"},{"id":"14d64","name":"Try - MitiS Feat. RORY","description":"Twenty-Sixth Upload\n\nThis map means the whole world to me, so I hope everyone enjoys this map. My father passed away on Jan. 23, 2021, in the middle of making this map. I am dedicating this map for him because of how much this songs means to me now. \nPouring my heart and soul into this map took a lot out of me, making it as perfect to my little abilities I have for mapping.\n\nBig shout outs to Lonely and Jamman for lighting this beautiful song and for agreeing to light it, it means the world to me.\nBig shout outs to thelightdesigner for making such amazing and beautiful walls. Thank you for taking the time to make this, it means the world to me.\nBig shout outs to Mawntee for giving me advice on how to make this map feel and shout outs to thelitlewiseowl for modding it, showing me what I can improve in this map. \nBiggest shout outs to everyone that play tested it multiple times. I am sorry for bugging them for multiple play test. \n\nAnd Biggest shoutout to my favorite chillstep/melodic dubstep artist, MitiS and Rory for making this beautiful song. \nYou have no idea how much this song means to me, I thank you so much. Keep up the good work MitiS.\n\n**NOODLES AND CHROMA REQUIRED**\n\nI hope this map can show you the feeling in this song, as well as what it portrays. I tried my best, I hope it turns out great and everyone enjoys it. \nThank you everyone for taking the time to download and play this map. I appreciate it everyone.\n\nFeedback is always welcome!","uploader":{"id":4285346,"name":"remie","uniqueSet":true,"hash":"5f6efd989824150006d740ac","avatar":"https://cdn.beatsaver.com/avatar/144275927466115073.png","type":"DISCORD"},"metadata":{"bpm":132.0,"duration":273,"songName":"Try","songSubName":"","songAuthorName":"MitiS Feat. RORY","levelAuthorName":"Remie & Lone"},"stats":{"plays":0,"downloads":7511,"upvotes":2884,"downvotes":31,"score":0.945},"uploaded":"2021-03-01T13:29:26.471Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"6db3d9da217b41607d250aa7a28c5dc26a082188","key":"14d64","state":"Published","createdAt":"2021-03-01T13:29:26.471Z","sageScore":3,"diffs":[{"njs":17.0,"offset":-0.7,"notes":1447,"bombs":21,"obstacles":17451,"nps":6.217,"length":512.083,"characteristic":"Standard","difficulty":"ExpertPlus","events":36825,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":232.765,"paritySummary":{"errors":0,"warns":0,"resets":2}}],"downloadURL":"https://cdn.beatsaver.com/6db3d9da217b41607d250aa7a28c5dc26a082188.zip","coverURL":"https://cdn.beatsaver.com/6db3d9da217b41607d250aa7a28c5dc26a082188.jpg","previewURL":"https://cdn.beatsaver.com/6db3d9da217b41607d250aa7a28c5dc26a082188.mp3"}],"createdAt":"2021-03-01T13:29:26.471Z","updatedAt":"2021-03-01T13:29:26.471Z","lastPublishedAt":"2021-03-01T13:29:26.471Z"},{"id":"3b84","name":"Revenge [DJ Got Us Fallin In Love Minecraft Parody] - CaptainSparklez ft. TryHardNinja","description":"Revenge is a Minecraft parody song of DJ Got Us Fallin In Love by CaptainSparklez featuring vocals from TryHardNinja. Slight remap of DJ Got Us Fallin In Love.\r\n\r\nDamn, this song brings me back memories of the golden age of Minecraft.","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":120.0,"duration":222,"songName":"Revenge","songSubName":"CaptainSparklez ft. TryHardNinja","songAuthorName":"Joetastic","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":13421,"upvotes":7001,"downvotes":157,"score":0.945},"uploaded":"2019-03-04T17:01:53Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"7ac4d99cee16e8d0437d7e8feecdb12488cc27d3","key":"3b84","state":"Published","createdAt":"2019-03-04T17:01:53Z","sageScore":5,"diffs":[{"njs":14.0,"offset":0.0,"notes":858,"bombs":0,"obstacles":1,"nps":3.972,"length":432.0,"characteristic":"Standard","difficulty":"Expert","events":1675,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":216.0,"paritySummary":{"errors":80,"warns":85,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/7ac4d99cee16e8d0437d7e8feecdb12488cc27d3.zip","coverURL":"https://cdn.beatsaver.com/7ac4d99cee16e8d0437d7e8feecdb12488cc27d3.jpg","previewURL":"https://cdn.beatsaver.com/7ac4d99cee16e8d0437d7e8feecdb12488cc27d3.mp3"}],"createdAt":"2019-03-04T17:01:53Z","updatedAt":"2019-03-04T17:01:53Z","lastPublishedAt":"2019-03-04T17:01:53Z"},{"id":"b7aa","name":"Powerwolf - Venom of Venus","description":"Back to my more regular style, Powerwolf is a power-metal band that perform around the themes of werewolves and religion, a strange but interesting mixture.\r\n\r\nEx+ has a no-colours mode for those who wish to play without the custom block colours, but unfortunately I can't fit such an option for all difficulties.\r\n\r\nNormal 1.85 NPS\r\nHard 3.15 NPS\r\nExpert 4.43 NPS\r\nExpert+ 5.11 NPS\r\n\r\nThere is no easy difficulty, as that I needed the slot for the no-colour mode.","uploader":{"id":4285369,"name":"Cyrix","uniqueSet":true,"hash":"5eb6eb9a7abb000006c85add","avatar":"https://cdn.beatsaver.com/avatar/167730807929044992.png","type":"DISCORD"},"metadata":{"bpm":164.0,"duration":210,"songName":"Venom of Venus","songSubName":"","songAuthorName":"Powerwolf","levelAuthorName":"Cyrix"},"stats":{"plays":0,"downloads":8465,"upvotes":2864,"downvotes":31,"score":0.9449},"uploaded":"2020-06-29T18:24:10.081Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"f88b43c770dcd85a4ba18368853fbf062d41a09c","key":"b7aa","state":"Published","createdAt":"2020-06-29T18:24:10.081Z","sageScore":7,"diffs":[{"njs":12.0,"offset":0.5,"notes":392,"bombs":0,"obstacles":63,"nps":1.948,"length":549.938,"characteristic":"Standard","difficulty":"Easy","events":4188,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":201.197,"paritySummary":{"errors":44,"warns":15,"resets":0}},{"njs":13.0,"offset":1.0,"notes":666,"bombs":8,"obstacles":36,"nps":3.31,"length":549.938,"characteristic":"Standard","difficulty":"Normal","events":4188,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":201.197,"paritySummary":{"errors":1,"warns":0,"resets":1}},{"njs":17.0,"offset":0.0,"notes":934,"bombs":9,"obstacles":7,"nps":4.642,"length":549.938,"characteristic":"Standard","difficulty":"Hard","events":4188,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":201.197,"paritySummary":{"errors":0,"warns":0,"resets":2}},{"njs":20.0,"offset":-0.25,"notes":1079,"bombs":4,"obstacles":7,"nps":5.353,"length":551.0,"characteristic":"Standard","difficulty":"Expert","events":4192,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":201.585,"paritySummary":{"errors":1,"warns":0,"resets":2}},{"njs":20.0,"offset":-0.25,"notes":1079,"bombs":4,"obstacles":7,"nps":5.353,"length":551.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":4192,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":201.585,"paritySummary":{"errors":1,"warns":0,"resets":2}}],"downloadURL":"https://cdn.beatsaver.com/f88b43c770dcd85a4ba18368853fbf062d41a09c.zip","coverURL":"https://cdn.beatsaver.com/f88b43c770dcd85a4ba18368853fbf062d41a09c.jpg","previewURL":"https://cdn.beatsaver.com/f88b43c770dcd85a4ba18368853fbf062d41a09c.mp3"}],"createdAt":"2020-06-29T18:24:10.081Z","updatedAt":"2020-06-29T18:24:10.081Z","lastPublishedAt":"2020-06-29T18:24:10.081Z"},{"id":"fd","name":"Rasputin - Boney M","description":"Expert\r\n127 bpm","uploader":{"id":48512,"name":"jobas","uniqueSet":false,"hash":"5cff0b7298cc5a672c84e9a2","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9a2?d=retro","type":"SIMPLE"},"metadata":{"bpm":127.0,"duration":266,"songName":"Rasputin-Boney M","songSubName":"","songAuthorName":"Jobas","levelAuthorName":"jobas"},"stats":{"plays":0,"downloads":22705,"upvotes":8696,"downvotes":218,"score":0.9448},"uploaded":"2018-05-18T23:27:59Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"bf2f5afaeae0767c9bd6944ce74a23f6b24f4098","key":"fd","state":"Published","createdAt":"2018-05-18T23:27:59Z","sageScore":4,"diffs":[{"njs":10.0,"offset":0.0,"notes":701,"bombs":0,"obstacles":124,"nps":2.699,"length":549.844,"characteristic":"Standard","difficulty":"Hard","events":0,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":259.769,"paritySummary":{"errors":29,"warns":158,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/bf2f5afaeae0767c9bd6944ce74a23f6b24f4098.zip","coverURL":"https://cdn.beatsaver.com/bf2f5afaeae0767c9bd6944ce74a23f6b24f4098.jpg","previewURL":"https://cdn.beatsaver.com/bf2f5afaeae0767c9bd6944ce74a23f6b24f4098.mp3"}],"createdAt":"2018-05-18T23:27:59Z","updatedAt":"2018-05-18T23:27:59Z","lastPublishedAt":"2018-05-18T23:27:59Z"},{"id":"74d5","name":"What's New, Scooby-Doo? - Simple Plan","description":"Just practicing my mapping with this song\n\nalso, my childhood nostalgia\nEDIT: forgot to set NJS","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":158.03,"duration":67,"songName":"What's New, Scooby-Doo?","songSubName":"","songAuthorName":"Simple Plan","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":10991,"upvotes":3468,"downvotes":48,"score":0.9447},"uploaded":"2019-12-08T18:41:10.652Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"e004f84ffebded94e761d667db6aaa44f000a8a8","key":"74d5","state":"Published","createdAt":"2019-12-08T18:41:10.652Z","sageScore":2,"diffs":[{"njs":15.0,"offset":0.0,"notes":330,"bombs":2,"obstacles":0,"nps":5.226,"length":166.313,"characteristic":"Standard","difficulty":"Expert","events":382,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":63.145,"paritySummary":{"errors":9,"warns":7,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/e004f84ffebded94e761d667db6aaa44f000a8a8.zip","coverURL":"https://cdn.beatsaver.com/e004f84ffebded94e761d667db6aaa44f000a8a8.jpg","previewURL":"https://cdn.beatsaver.com/e004f84ffebded94e761d667db6aaa44f000a8a8.mp3"}],"createdAt":"2019-12-08T18:41:10.652Z","updatedAt":"2019-12-08T18:41:10.652Z","lastPublishedAt":"2019-12-08T18:41:10.652Z"},{"id":"a438","name":"Wait - M83 (wall map)","description":"I wanted to do something special for this great song, and also see the potential of Noodle Extensions. A few tips for a better experience:\r\n- disable the mirror effect in the game settings\r\n- turn the SFX volume down in the player settings\r\n- hide the HUD in the player settings\r\n\r\nVideo: https://youtu.be/oe6ThhijPy0\r\n\r\nThe map has a lot of walls, so you might not be able to run it on the lower-end hardware. I've included a version with less walls in case it helps.","uploader":{"id":4288814,"name":"nyri0","uniqueSet":true,"hash":"5e792df416c9680006086a78","avatar":"https://cdn.beatsaver.com/avatar/396715033125584907.png","type":"DISCORD"},"metadata":{"bpm":148.0,"duration":336,"songName":"Wait","songSubName":"","songAuthorName":"M83","levelAuthorName":"nyri0"},"stats":{"plays":0,"downloads":6655,"upvotes":2103,"downvotes":14,"score":0.9442},"uploaded":"2020-05-08T23:53:02.030Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"0d8921ef06a889cbd9db13afcc43f09a1619b173","key":"a438","state":"Published","createdAt":"2020-05-08T23:53:02.030Z","sageScore":6,"diffs":[{"njs":8.0,"offset":6.0,"notes":735,"bombs":0,"obstacles":6684,"nps":2.225,"length":815.0,"characteristic":"Standard","difficulty":"Easy","events":5,"chroma":false,"me":false,"ne":true,"cinema":false,"seconds":330.405,"paritySummary":{"errors":94,"warns":27,"resets":0}},{"njs":8.0,"offset":6.0,"notes":735,"bombs":0,"obstacles":10499,"nps":2.225,"length":815.0,"characteristic":"Standard","difficulty":"Hard","events":5,"chroma":false,"me":false,"ne":true,"cinema":false,"seconds":330.405,"paritySummary":{"errors":94,"warns":27,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/0d8921ef06a889cbd9db13afcc43f09a1619b173.zip","coverURL":"https://cdn.beatsaver.com/0d8921ef06a889cbd9db13afcc43f09a1619b173.jpg","previewURL":"https://cdn.beatsaver.com/0d8921ef06a889cbd9db13afcc43f09a1619b173.mp3"}],"createdAt":"2020-05-08T23:53:02.030Z","updatedAt":"2020-05-08T23:53:02.030Z","lastPublishedAt":"2020-05-08T23:53:02.030Z"},{"id":"4a35","name":"[Anniversary] Animals (Radio Edit) - Martin Garrix [Joetastic & StyngMe]","description":"Part of the Anniversary Song Pack","uploader":{"id":37070,"name":"anniversaryteam","uniqueSet":true,"hash":"5cff0b7798cc5a672c8565a3","avatar":"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro","type":"SIMPLE"},"metadata":{"bpm":128.0,"duration":176,"songName":"Animals (Radio Edit)","songSubName":"Martin Garrix","songAuthorName":"Joetastic & StyngMe","levelAuthorName":"AnniversaryTeam"},"stats":{"plays":0,"downloads":14718,"upvotes":7734,"downvotes":189,"score":0.9442},"uploaded":"2019-05-03T14:08:02Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"1a1737caba0f049a69369e328622e06b2a32b634","key":"4a35","state":"Published","createdAt":"2019-05-03T14:08:02Z","sageScore":8,"diffs":[{"njs":10.0,"offset":0.0,"notes":272,"bombs":0,"obstacles":19,"nps":1.612,"length":360.0,"characteristic":"Standard","difficulty":"Easy","events":2074,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":168.75,"paritySummary":{"errors":32,"warns":22,"resets":0}},{"njs":12.0,"offset":0.0,"notes":350,"bombs":0,"obstacles":22,"nps":2.08,"length":359.0,"characteristic":"Standard","difficulty":"Normal","events":2074,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":168.281,"paritySummary":{"errors":34,"warns":27,"resets":0}},{"njs":14.0,"offset":0.0,"notes":436,"bombs":6,"obstacles":22,"nps":2.584,"length":360.0,"characteristic":"Standard","difficulty":"Hard","events":2074,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":168.75,"paritySummary":{"errors":29,"warns":31,"resets":4}},{"njs":15.0,"offset":0.0,"notes":675,"bombs":4,"obstacles":22,"nps":4.0,"length":360.0,"characteristic":"Standard","difficulty":"Expert","events":2074,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":168.75,"paritySummary":{"errors":26,"warns":34,"resets":1}},{"njs":16.0,"offset":0.0,"notes":738,"bombs":0,"obstacles":21,"nps":4.373,"length":360.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":2038,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":168.75,"paritySummary":{"errors":46,"warns":40,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/1a1737caba0f049a69369e328622e06b2a32b634.zip","coverURL":"https://cdn.beatsaver.com/1a1737caba0f049a69369e328622e06b2a32b634.jpg","previewURL":"https://cdn.beatsaver.com/1a1737caba0f049a69369e328622e06b2a32b634.mp3"}],"createdAt":"2019-05-03T14:08:02Z","updatedAt":"2019-05-03T14:08:02Z","lastPublishedAt":"2019-05-03T14:08:02Z"},{"id":"5038","name":"Uptown Funk - Mark Ronson","description":"5/31: This version now works for the Oculus Quest.\r\n\r\nDifficulties: Expert and Hard\r\nYouTube Link: https://youtu.be/6TYji_Klr9I","uploader":{"id":30311,"name":"bennydabeast","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e98d","avatar":"https://cdn.beatsaver.com/avatar/30311.jpg","type":"SIMPLE"},"metadata":{"bpm":115.0,"duration":271,"songName":"Uptown Funk","songSubName":"Mark Ronson","songAuthorName":"BennyDaBeast","levelAuthorName":"bennydabeast"},"stats":{"plays":0,"downloads":21925,"upvotes":9390,"downvotes":251,"score":0.944},"uploaded":"2019-05-31T17:58:39Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"d110e413fb7fb462b692f1f17b835cf8b7280884","key":"5038","state":"Published","createdAt":"2019-05-31T17:58:39Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":639,"bombs":0,"obstacles":24,"nps":2.397,"length":511.0,"characteristic":"Standard","difficulty":"Hard","events":786,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":266.609,"paritySummary":{"errors":115,"warns":89,"resets":0}},{"njs":10.0,"offset":0.0,"notes":776,"bombs":0,"obstacles":24,"nps":2.911,"length":511.0,"characteristic":"Standard","difficulty":"Expert","events":786,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":266.609,"paritySummary":{"errors":98,"warns":111,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/d110e413fb7fb462b692f1f17b835cf8b7280884.zip","coverURL":"https://cdn.beatsaver.com/d110e413fb7fb462b692f1f17b835cf8b7280884.jpg","previewURL":"https://cdn.beatsaver.com/d110e413fb7fb462b692f1f17b835cf8b7280884.mp3"}],"createdAt":"2019-05-31T17:58:39Z","updatedAt":"2019-05-31T17:58:39Z","lastPublishedAt":"2019-05-31T17:58:39Z"},{"id":"1c1","name":"Shia LaBeouf (Rob Cantor)","description":"Shia LaBeouf - Rob Cantor\r\nFinished Lighting\r\nDifficulties: Expert, Hard, Normal, Easy\r\nBPM: 96","uploader":{"id":53184,"name":"kleid","uniqueSet":true,"hash":"5cff0b7398cc5a672c84ecd9","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ecd9?d=retro","type":"SIMPLE"},"metadata":{"bpm":96.0,"duration":154,"songName":"Shia LaBeouf","songSubName":"Rob Cantor","songAuthorName":"Kleid","levelAuthorName":"kleid"},"stats":{"plays":0,"downloads":12103,"upvotes":6574,"downvotes":151,"score":0.9439},"uploaded":"2018-05-23T00:42:28Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"1279a3fcaff31e767e5dd7d7c016ec08733cf566","key":"1c1","state":"Published","createdAt":"2018-05-23T00:42:28Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":266,"bombs":0,"obstacles":39,"nps":1.891,"length":225.0,"characteristic":"Standard","difficulty":"Easy","events":379,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":140.625,"paritySummary":{"errors":36,"warns":49,"resets":0},"stars":1.36},{"njs":10.0,"offset":0.0,"notes":323,"bombs":0,"obstacles":44,"nps":2.296,"length":225.0,"characteristic":"Standard","difficulty":"Normal","events":379,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":140.625,"paritySummary":{"errors":59,"warns":46,"resets":0},"stars":1.65},{"njs":10.0,"offset":0.0,"notes":344,"bombs":24,"obstacles":44,"nps":2.445,"length":225.0,"characteristic":"Standard","difficulty":"Hard","events":379,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":140.625,"paritySummary":{"errors":61,"warns":48,"resets":3},"stars":1.73},{"njs":10.0,"offset":0.0,"notes":378,"bombs":28,"obstacles":64,"nps":2.687,"length":225.0,"characteristic":"Standard","difficulty":"Expert","events":379,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":140.625,"paritySummary":{"errors":69,"warns":54,"resets":3}}],"downloadURL":"https://cdn.beatsaver.com/1279a3fcaff31e767e5dd7d7c016ec08733cf566.zip","coverURL":"https://cdn.beatsaver.com/1279a3fcaff31e767e5dd7d7c016ec08733cf566.jpg","previewURL":"https://cdn.beatsaver.com/1279a3fcaff31e767e5dd7d7c016ec08733cf566.mp3"}],"createdAt":"2018-05-23T00:42:28Z","updatedAt":"2018-05-23T00:42:28Z","lastPublishedAt":"2018-05-23T00:42:28Z"},{"id":"7a64","name":"Joey Batey - Toss A Coin To Your Witcher","description":"Expert+ Preview https://www.youtube.com/watch?v=AjfABhvswrI\n\nToss a Coin to Beat Saber!\n\nNetflix's The Witcher OST.\nOriginal Music by Sonya Belousova & Giona Ostinelli.\nLyrics by Jenny Klein, Sonya Belousova & Giona Ostinelli.\nPerformed by Joey Batey.\n\nThanks Sorukun for playtesting.","uploader":{"id":4286200,"name":"holair","uniqueSet":true,"hash":"5cff0b7698cc5a672c853af4","avatar":"https://cdn.beatsaver.com/avatar/176034748571844608.png","type":"DISCORD"},"metadata":{"bpm":105.0,"duration":180,"songName":"Toss A Coin To Your Witcher","songSubName":"Netflix's The Witcher","songAuthorName":"Joey Batey","levelAuthorName":"Holair"},"stats":{"plays":0,"downloads":16196,"upvotes":9958,"downvotes":275,"score":0.9438},"uploaded":"2019-12-28T20:11:35.767Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"19a733cf9202ef25725966d78f465bf87b26254d","key":"7a64","state":"Published","createdAt":"2019-12-28T20:11:35.767Z","sageScore":7,"diffs":[{"njs":10.0,"offset":0.0,"notes":175,"bombs":0,"obstacles":1,"nps":1.008,"length":303.743,"characteristic":"Standard","difficulty":"Easy","events":814,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":173.567,"paritySummary":{"errors":55,"warns":12,"resets":0}},{"njs":10.0,"offset":0.0,"notes":322,"bombs":0,"obstacles":2,"nps":1.855,"length":303.743,"characteristic":"Standard","difficulty":"Normal","events":814,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":173.567,"paritySummary":{"errors":37,"warns":21,"resets":0}},{"njs":12.0,"offset":0.0,"notes":459,"bombs":0,"obstacles":10,"nps":2.645,"length":303.743,"characteristic":"Standard","difficulty":"Hard","events":814,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":173.567,"paritySummary":{"errors":38,"warns":16,"resets":0}},{"njs":14.0,"offset":0.0,"notes":578,"bombs":0,"obstacles":15,"nps":3.33,"length":303.743,"characteristic":"Standard","difficulty":"Expert","events":1310,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":173.567,"paritySummary":{"errors":37,"warns":40,"resets":0}},{"njs":14.0,"offset":0.0,"notes":580,"bombs":0,"obstacles":14,"nps":3.342,"length":303.74,"characteristic":"Standard","difficulty":"ExpertPlus","events":1310,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":173.566,"paritySummary":{"errors":41,"warns":34,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/19a733cf9202ef25725966d78f465bf87b26254d.zip","coverURL":"https://cdn.beatsaver.com/19a733cf9202ef25725966d78f465bf87b26254d.jpg","previewURL":"https://cdn.beatsaver.com/19a733cf9202ef25725966d78f465bf87b26254d.mp3"}],"createdAt":"2019-12-28T20:11:35.767Z","updatedAt":"2019-12-28T20:11:35.767Z","lastPublishedAt":"2019-12-28T20:11:35.767Z"},{"id":"49f2","name":"It's My Life - Bon Jovi","description":"I might be a huge weeb but I still enjoy listening to 80s band: Bon Jovi. Here's one of their more modern songs from the 2000s: It's My Life! Mapping on this isn't too difficult, it's an slow rock song so not much I can map to anyways","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":120.0,"duration":226,"songName":"It's My Life","songSubName":"Bon Jovi","songAuthorName":"Joetastic","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":11924,"upvotes":3179,"downvotes":44,"score":0.9436},"uploaded":"2019-05-02T14:08:00Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"172b9d6d206a3fb679426b2934daad3191b10ec7","key":"49f2","state":"Published","createdAt":"2019-05-02T14:08:00Z","sageScore":5,"diffs":[{"njs":12.0,"offset":0.0,"notes":684,"bombs":0,"obstacles":4,"nps":3.081,"length":444.0,"characteristic":"Standard","difficulty":"Hard","events":1968,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":222.0,"paritySummary":{"errors":13,"warns":15,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/172b9d6d206a3fb679426b2934daad3191b10ec7.zip","coverURL":"https://cdn.beatsaver.com/172b9d6d206a3fb679426b2934daad3191b10ec7.jpg","previewURL":"https://cdn.beatsaver.com/172b9d6d206a3fb679426b2934daad3191b10ec7.mp3"}],"createdAt":"2019-05-02T14:08:00Z","updatedAt":"2019-05-02T14:08:00Z","lastPublishedAt":"2019-05-02T14:08:00Z"},{"id":"5616","name":"Sanctuary - Joji (All Difficulties, Single Saber, & No Arrows)","description":"A tribute to our boy Joji. Lots of love for him in this, 10 difficulties for players of all skill to enjoy.\n\n168 BPM - 2:56 Runtime\nEasy - 268 Notes\nNormal - 327 Notes\nHard - 409 Notes\nExpert - 465 Notes\nExpert+ - 542 Notes\n\nHard (Single Saber) - 306 Notes\nExpert (Single Saber) - 375 Notes\nExpert+ (Single Saber) - 444 Notes\n\nSincerity Difficulty (Reversed No Arrow) - 465 Notes\nSanctuary Difficulty (Reversed No Arrow) - 542 Notes\n\nGameplay:  https://youtu.be/u2AYPs94t7o\n\n**Little easter egg. Wall counts on maps correspond to milestones for George Miller. 162 videos on FilthyFrank YT channel, 105 videos on TooDamnFilthy YT channel, 95 videos on Dizastamusic YT channel, 38 songs on Pink Guy album, 35 songs on Pink Season album.","uploader":{"id":4284981,"name":"skylerwallace","uniqueSet":true,"hash":"5cff0b7298cc5a672c84ea67","avatar":"https://cdn.beatsaver.com/avatar/398344856868487168.png","type":"DISCORD"},"metadata":{"bpm":168.0,"duration":176,"songName":"Sanctuary","songSubName":"","songAuthorName":"Joji","levelAuthorName":"Skyler Wallace"},"stats":{"plays":0,"downloads":12792,"upvotes":3919,"downvotes":67,"score":0.9434},"uploaded":"2019-07-09T02:56:20.454Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"76bc9c795600df8c663dea4927f470d0a7700ab3","key":"5616","state":"Published","createdAt":"2019-07-09T02:56:20.454Z","sageScore":8,"diffs":[{"njs":10.0,"offset":0.0,"notes":268,"bombs":0,"obstacles":35,"nps":1.737,"length":432.0,"characteristic":"Standard","difficulty":"Easy","events":3623,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":154.286,"paritySummary":{"errors":94,"warns":18,"resets":0}},{"njs":10.0,"offset":0.0,"notes":327,"bombs":0,"obstacles":38,"nps":2.119,"length":432.0,"characteristic":"Standard","difficulty":"Normal","events":3623,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":154.286,"paritySummary":{"errors":61,"warns":12,"resets":0}},{"njs":12.0,"offset":0.0,"notes":409,"bombs":0,"obstacles":92,"nps":2.651,"length":432.0,"characteristic":"Standard","difficulty":"Hard","events":3623,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":154.286,"paritySummary":{"errors":29,"warns":10,"resets":0}},{"njs":14.0,"offset":1.0,"notes":465,"bombs":0,"obstacles":105,"nps":3.014,"length":432.0,"characteristic":"Standard","difficulty":"Expert","events":3623,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":154.286,"paritySummary":{"errors":37,"warns":26,"resets":0}},{"njs":14.0,"offset":1.0,"notes":542,"bombs":0,"obstacles":162,"nps":3.513,"length":432.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":3623,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":154.286,"paritySummary":{"errors":24,"warns":29,"resets":0}},{"njs":12.0,"offset":0.0,"notes":306,"bombs":0,"obstacles":92,"nps":1.983,"length":432.0,"characteristic":"OneSaber","difficulty":"Hard","events":3623,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":154.286,"paritySummary":{"errors":23,"warns":28,"resets":0}},{"njs":14.0,"offset":1.0,"notes":375,"bombs":0,"obstacles":105,"nps":2.431,"length":432.0,"characteristic":"OneSaber","difficulty":"Expert","events":3623,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":154.286,"paritySummary":{"errors":26,"warns":29,"resets":0}},{"njs":14.0,"offset":1.0,"notes":444,"bombs":0,"obstacles":162,"nps":2.878,"length":432.0,"characteristic":"OneSaber","difficulty":"ExpertPlus","events":3623,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":154.286,"paritySummary":{"errors":25,"warns":57,"resets":0}},{"njs":-14.0,"offset":1.0,"notes":465,"bombs":0,"obstacles":105,"nps":3.014,"length":432.0,"characteristic":"NoArrows","difficulty":"Expert","events":3623,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":154.286,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":-14.0,"offset":1.0,"notes":542,"bombs":0,"obstacles":162,"nps":3.513,"length":432.0,"characteristic":"NoArrows","difficulty":"ExpertPlus","events":3623,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":154.286,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/76bc9c795600df8c663dea4927f470d0a7700ab3.zip","coverURL":"https://cdn.beatsaver.com/76bc9c795600df8c663dea4927f470d0a7700ab3.jpg","previewURL":"https://cdn.beatsaver.com/76bc9c795600df8c663dea4927f470d0a7700ab3.mp3"}],"createdAt":"2019-07-09T02:56:20.454Z","updatedAt":"2019-07-09T02:56:20.454Z","lastPublishedAt":"2019-07-09T02:56:20.454Z"},{"id":"9b35","name":"Ready To [BNA: Brand New Animal Opening]","description":"use CHROMA mod for some cool ring prop effects\n\nTrigger greatness with a fire opening\nI'm not a furry\nI think\n\n\"Ready To\" was sung by main girl, Michiru Kagemori (CV: Sumire Morohoshi)\n\nBPM 147 |\nExpert+\nExpert\nHard\nNormal\nEasy\n\ntyhf\n\npreview: https://www.youtube.com/watch?v=x6Q0y8Y8g0U\n\nDM any feedback on Discord\nETAN#8341","uploader":{"id":4235140,"name":"etan","uniqueSet":true,"hash":"5cff0b7798cc5a672c855775","avatar":"https://cdn.beatsaver.com/avatar/136373107559497728.png","type":"DISCORD"},"metadata":{"bpm":147.0,"duration":199,"songName":"Ready To","songSubName":"","songAuthorName":"Michiru (CV: Sumire Morohoshi)","levelAuthorName":"ETAN"},"stats":{"plays":0,"downloads":12461,"upvotes":4254,"downvotes":78,"score":0.9432},"uploaded":"2020-04-15T05:30:10.784Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"c5de287d4406906d4ad3ddebc18e18446bb3a578","key":"9b35","state":"Published","createdAt":"2020-04-15T05:30:10.784Z","sageScore":7,"diffs":[{"njs":11.0,"offset":0.0,"notes":264,"bombs":0,"obstacles":2,"nps":1.356,"length":477.0,"characteristic":"Standard","difficulty":"Easy","events":11962,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":194.694,"paritySummary":{"errors":2,"warns":4,"resets":0}},{"njs":11.0,"offset":0.0,"notes":336,"bombs":0,"obstacles":2,"nps":1.726,"length":477.0,"characteristic":"Standard","difficulty":"Normal","events":11962,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":194.694,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":13.0,"offset":1.0,"notes":500,"bombs":32,"obstacles":2,"nps":2.568,"length":477.0,"characteristic":"Standard","difficulty":"Hard","events":11962,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":194.694,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":16.0,"offset":0.3,"notes":734,"bombs":32,"obstacles":2,"nps":3.77,"length":477.0,"characteristic":"Standard","difficulty":"Expert","events":11962,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":194.694,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":21.0,"offset":-0.3,"notes":900,"bombs":32,"obstacles":2,"nps":4.623,"length":477.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":11962,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":194.694,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":16.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"Lightshow","difficulty":"Easy","events":11962,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/c5de287d4406906d4ad3ddebc18e18446bb3a578.zip","coverURL":"https://cdn.beatsaver.com/c5de287d4406906d4ad3ddebc18e18446bb3a578.jpg","previewURL":"https://cdn.beatsaver.com/c5de287d4406906d4ad3ddebc18e18446bb3a578.mp3"}],"createdAt":"2020-04-15T05:30:10.784Z","updatedAt":"2020-04-15T05:30:10.784Z","lastPublishedAt":"2020-04-15T05:30:10.784Z"},{"id":"56cb","name":"Onegai Muscle [Dumbbell Nan Kilo Moteru? Opening]","description":"SAIDO CHESTO\n\nSung by \nHibiki Sakura (CV: Ai Fairouz)\nNaruzou Machio (CV: Kaito Ishikawa)\n\nBPM 132 | Length 1:32\nMuscle!+ (Expert+)\nExpert\nHard\n\nThanks to Helen Carnate and Kival Evan for playtesting\n\ntyhf\n\ndm me on discord with feedback\nETAN#8341","uploader":{"id":4235140,"name":"etan","uniqueSet":true,"hash":"5cff0b7798cc5a672c855775","avatar":"https://cdn.beatsaver.com/avatar/136373107559497728.png","type":"DISCORD"},"metadata":{"bpm":132.0,"duration":92,"songName":"Onegai Muscle","songSubName":"","songAuthorName":"Ai Fairouz, Kaito Ishikawa","levelAuthorName":"ETAN"},"stats":{"plays":0,"downloads":12485,"upvotes":5772,"downvotes":131,"score":0.9428},"uploaded":"2019-07-13T16:48:46.669Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"7aa8bd16a692b8c8769d96cf96b9b259bea2e862","key":"56cb","state":"Published","createdAt":"2019-07-13T16:48:46.669Z","sageScore":5,"diffs":[{"njs":13.0,"offset":0.0,"notes":223,"bombs":32,"obstacles":37,"nps":2.544,"length":192.875,"characteristic":"Standard","difficulty":"Hard","events":5023,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":87.67,"paritySummary":{"errors":4,"warns":5,"resets":0}},{"njs":16.0,"offset":0.0,"notes":304,"bombs":32,"obstacles":37,"nps":3.468,"length":192.875,"characteristic":"Standard","difficulty":"Expert","events":5023,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":87.67,"paritySummary":{"errors":8,"warns":4,"resets":0}},{"njs":19.0,"offset":0.0,"notes":402,"bombs":32,"obstacles":38,"nps":4.585,"length":192.875,"characteristic":"Standard","difficulty":"ExpertPlus","events":5023,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":87.67,"paritySummary":{"errors":12,"warns":6,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/7aa8bd16a692b8c8769d96cf96b9b259bea2e862.zip","coverURL":"https://cdn.beatsaver.com/7aa8bd16a692b8c8769d96cf96b9b259bea2e862.jpg","previewURL":"https://cdn.beatsaver.com/7aa8bd16a692b8c8769d96cf96b9b259bea2e862.mp3"}],"createdAt":"2019-07-13T16:48:46.669Z","updatedAt":"2019-07-13T16:48:46.669Z","lastPublishedAt":"2019-07-13T16:48:46.669Z"},{"id":"3b76","name":"Caravan Palace - Miracle","description":"==================================================\r\nSong: Caravan Palace - Miracle\r\nBPM: 120\r\nNote jump speed: 10 - 16\r\nVersions: Expert+, Expert, Hard, Normal\r\n=============================\r\nLove this new track from Caravan Palace","uploader":{"id":4287543,"name":"therealzeroz","uniqueSet":true,"hash":"5cff0b7498cc5a672c85037b","avatar":"https://cdn.beatsaver.com/avatar/182672808961114112.png","type":"DISCORD"},"metadata":{"bpm":100.0,"duration":221,"songName":"Caravan Palace - Miracle","songSubName":"","songAuthorName":"TheRealZeroz","levelAuthorName":"TheRealZeroz"},"stats":{"plays":0,"downloads":8954,"upvotes":5074,"downvotes":107,"score":0.9428},"uploaded":"2019-03-04T12:15:10Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"29e5877ec735378b8ba3751dc8896bf63a43c525","key":"3b76","state":"Published","createdAt":"2019-03-04T12:15:10Z","sageScore":3,"diffs":[{"njs":10.0,"offset":0.0,"notes":326,"bombs":0,"obstacles":4,"nps":1.793,"length":303.0,"characteristic":"Standard","difficulty":"Normal","events":4399,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":181.8,"paritySummary":{"errors":38,"warns":2,"resets":0}},{"njs":13.0,"offset":0.0,"notes":562,"bombs":0,"obstacles":0,"nps":3.081,"length":304.0,"characteristic":"Standard","difficulty":"Hard","events":4399,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":182.4,"paritySummary":{"errors":12,"warns":13,"resets":0}},{"njs":14.0,"offset":0.0,"notes":1034,"bombs":0,"obstacles":8,"nps":5.669,"length":304.0,"characteristic":"Standard","difficulty":"Expert","events":4399,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":182.4,"paritySummary":{"errors":20,"warns":2,"resets":0}},{"njs":16.0,"offset":0.0,"notes":1156,"bombs":0,"obstacles":9,"nps":6.348,"length":303.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":4399,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":182.1,"paritySummary":{"errors":36,"warns":13,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/29e5877ec735378b8ba3751dc8896bf63a43c525.zip","coverURL":"https://cdn.beatsaver.com/29e5877ec735378b8ba3751dc8896bf63a43c525.jpg","previewURL":"https://cdn.beatsaver.com/29e5877ec735378b8ba3751dc8896bf63a43c525.mp3"}],"createdAt":"2019-03-04T12:15:10Z","updatedAt":"2019-03-04T12:15:10Z","lastPublishedAt":"2019-03-04T12:15:10Z"},{"id":"5062","name":"Witchcraft - Pendulum","description":"I have been working on this chart for a while now, finally able to finish it off. :) Enjoy!\r\nhttps://www.youtube.com/watch?v=mlaH4Dqjv1U","uploader":{"id":4285982,"name":"downycat","uniqueSet":true,"hash":"5cff0b7398cc5a672c84ede5","avatar":"https://cdn.beatsaver.com/avatar/173538829888782336.png","type":"DISCORD"},"metadata":{"bpm":174.0,"duration":254,"songName":"Witchcraft","songSubName":"Pendulum","songAuthorName":"DownyCat","levelAuthorName":"downycat"},"stats":{"plays":0,"downloads":9888,"upvotes":4287,"downvotes":83,"score":0.9424},"uploaded":"2019-06-01T07:59:40Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"015170851544c832ee4ac858ca6b3425677b1696","key":"5062","state":"Published","createdAt":"2019-06-01T07:59:40Z","sageScore":4,"diffs":[{"njs":10.0,"offset":0.0,"notes":372,"bombs":0,"obstacles":33,"nps":1.515,"length":712.0,"characteristic":"Standard","difficulty":"Normal","events":8298,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":245.517,"paritySummary":{"errors":13,"warns":21,"resets":0}},{"njs":12.0,"offset":0.0,"notes":750,"bombs":0,"obstacles":53,"nps":3.055,"length":712.0,"characteristic":"Standard","difficulty":"Hard","events":8298,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":245.517,"paritySummary":{"errors":8,"warns":7,"resets":0}},{"njs":14.0,"offset":0.0,"notes":1213,"bombs":0,"obstacles":36,"nps":4.941,"length":712.0,"characteristic":"Standard","difficulty":"Expert","events":8298,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":245.517,"paritySummary":{"errors":10,"warns":5,"resets":0}},{"njs":18.0,"offset":0.0,"notes":1401,"bombs":0,"obstacles":28,"nps":5.706,"length":712.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":8298,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":245.517,"paritySummary":{"errors":7,"warns":8,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/015170851544c832ee4ac858ca6b3425677b1696.zip","coverURL":"https://cdn.beatsaver.com/015170851544c832ee4ac858ca6b3425677b1696.jpg","previewURL":"https://cdn.beatsaver.com/015170851544c832ee4ac858ca6b3425677b1696.mp3"}],"createdAt":"2019-06-01T07:59:40Z","updatedAt":"2019-06-01T07:59:40Z","lastPublishedAt":"2019-06-01T07:59:40Z"},{"id":"6891","name":"Panic! At The Disco - I Write Sins Not Tragedies","description":"PepeJamJam \nAll Difficulties","uploader":{"id":4285107,"name":"kikaeaeon","uniqueSet":true,"hash":"5cff0b7498cc5a672c85109b","avatar":"https://cdn.beatsaver.com/avatar/103715469822816256.png","type":"DISCORD"},"metadata":{"bpm":170.0,"duration":188,"songName":"I Write Sins Not Tragedies","songSubName":"","songAuthorName":"Panic! At the Disco","levelAuthorName":"KikaeAeon"},"stats":{"plays":0,"downloads":17370,"upvotes":5712,"downvotes":132,"score":0.9423},"uploaded":"2019-10-08T04:14:47.579Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"7ec6ee195a2d577d5b924dad8b1a25b881aa2d27","key":"6891","state":"Published","createdAt":"2019-10-08T04:14:47.579Z","sageScore":8,"diffs":[{"njs":10.0,"offset":0.0,"notes":271,"bombs":0,"obstacles":21,"nps":1.519,"length":505.5,"characteristic":"Standard","difficulty":"Easy","events":1193,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":178.412,"paritySummary":{"errors":15,"warns":9,"resets":0}},{"njs":10.0,"offset":0.0,"notes":312,"bombs":0,"obstacles":21,"nps":1.749,"length":505.5,"characteristic":"Standard","difficulty":"Normal","events":1193,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":178.412,"paritySummary":{"errors":18,"warns":10,"resets":0}},{"njs":10.0,"offset":0.0,"notes":487,"bombs":0,"obstacles":41,"nps":2.73,"length":505.5,"characteristic":"Standard","difficulty":"Hard","events":1193,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":178.412,"paritySummary":{"errors":32,"warns":34,"resets":0}},{"njs":12.0,"offset":0.0,"notes":690,"bombs":80,"obstacles":29,"nps":3.867,"length":505.5,"characteristic":"Standard","difficulty":"Expert","events":1193,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":178.412,"paritySummary":{"errors":11,"warns":6,"resets":2}},{"njs":15.0,"offset":0.0,"notes":969,"bombs":0,"obstacles":17,"nps":5.431,"length":505.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":1193,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":178.412,"paritySummary":{"errors":9,"warns":20,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/7ec6ee195a2d577d5b924dad8b1a25b881aa2d27.zip","coverURL":"https://cdn.beatsaver.com/7ec6ee195a2d577d5b924dad8b1a25b881aa2d27.jpg","previewURL":"https://cdn.beatsaver.com/7ec6ee195a2d577d5b924dad8b1a25b881aa2d27.mp3"}],"createdAt":"2019-10-08T04:14:47.579Z","updatedAt":"2019-10-08T04:14:47.579Z","lastPublishedAt":"2019-10-08T04:14:47.579Z"},{"id":"1eb2","name":"Pumped Up Kicks - Foster the People","description":"128 BPM / 3:27 Runtime\r\nNormal / 381 Notes\r\nHard / 492 Notes\r\nExpert / 714 Notes\r\n\r\nGameplay:\r\nhttps://youtu.be/oo1EgLAOB1s\r\n\r\nListen to the song:\r\nhttps://www.youtube.com/watch?v=SDTZ7iX4vTQ","uploader":{"id":4284981,"name":"skylerwallace","uniqueSet":true,"hash":"5cff0b7298cc5a672c84ea67","avatar":"https://cdn.beatsaver.com/avatar/398344856868487168.png","type":"DISCORD"},"metadata":{"bpm":128.0,"duration":207,"songName":"Pumped Up Kicks","songSubName":"Foster The People","songAuthorName":"Skyler Wallace","levelAuthorName":"skylerwallace"},"stats":{"plays":0,"downloads":17347,"upvotes":6240,"downvotes":151,"score":0.9423},"uploaded":"2018-11-07T04:34:04Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"b0f6224a2717b97a4538790a32eb618acae1f57a","key":"1eb2","state":"Published","createdAt":"2018-11-07T04:34:04Z","sageScore":6,"diffs":[{"njs":10.0,"offset":0.0,"notes":381,"bombs":0,"obstacles":41,"nps":1.926,"length":422.0,"characteristic":"Standard","difficulty":"Normal","events":1994,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":197.813,"paritySummary":{"errors":82,"warns":64,"resets":0}},{"njs":10.0,"offset":0.0,"notes":492,"bombs":23,"obstacles":16,"nps":2.481,"length":423.0,"characteristic":"Standard","difficulty":"Hard","events":1994,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":198.281,"paritySummary":{"errors":58,"warns":62,"resets":4}},{"njs":12.0,"offset":0.0,"notes":714,"bombs":8,"obstacles":34,"nps":3.601,"length":423.0,"characteristic":"Standard","difficulty":"Expert","events":1994,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":198.281,"paritySummary":{"errors":69,"warns":63,"resets":1}}],"downloadURL":"https://cdn.beatsaver.com/b0f6224a2717b97a4538790a32eb618acae1f57a.zip","coverURL":"https://cdn.beatsaver.com/b0f6224a2717b97a4538790a32eb618acae1f57a.jpg","previewURL":"https://cdn.beatsaver.com/b0f6224a2717b97a4538790a32eb618acae1f57a.mp3"}],"createdAt":"2018-11-07T04:34:04Z","updatedAt":"2018-11-07T04:34:04Z","lastPublishedAt":"2018-11-07T04:34:04Z"},{"id":"368c","name":"Harajuku Iyahoi - Kyary Pamyu Pamyu","description":"All difficulties relatively close to OST standards.\n\nThanks to n3tman, Sehria, OmniOmega, CyanSnow, Aeroluna, and Expo for their help.\n\nhttps://youtu.be/YqptqS0vIIA\nFollow me on Twitter u won't\nhttps://twitter.com/aggrogahu","uploader":{"id":4284613,"name":"aggrogahu","uniqueSet":true,"hash":"5cff0b7398cc5a672c84fdad","avatar":"https://cdn.beatsaver.com/avatar/158363872649150464.png","type":"DISCORD"},"metadata":{"bpm":128.0,"duration":218,"songName":"Harajuku Iyahoi","songSubName":"Kyary Pamyu Pamyu","songAuthorName":"aggrogahu","levelAuthorName":"aggrogahu"},"stats":{"plays":0,"downloads":4783,"upvotes":2027,"downvotes":17,"score":0.9421},"uploaded":"2019-02-15T23:55:37Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"8c392c31aeadb55eebeb978c09fa79857380f15c","key":"368c","state":"Published","createdAt":"2019-02-15T23:55:37Z","sageScore":4,"diffs":[{"njs":9.0,"offset":0.0,"notes":214,"bombs":0,"obstacles":15,"nps":1.057,"length":432.0,"characteristic":"Standard","difficulty":"Easy","events":969,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":202.5,"paritySummary":{"errors":59,"warns":16,"resets":0}},{"njs":9.0,"offset":0.0,"notes":306,"bombs":0,"obstacles":15,"nps":1.511,"length":432.0,"characteristic":"Standard","difficulty":"Normal","events":969,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":202.5,"paritySummary":{"errors":68,"warns":44,"resets":0}},{"njs":11.0,"offset":0.0,"notes":469,"bombs":0,"obstacles":21,"nps":2.316,"length":432.0,"characteristic":"Standard","difficulty":"Hard","events":969,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":202.5,"paritySummary":{"errors":68,"warns":98,"resets":0}},{"njs":12.0,"offset":0.0,"notes":685,"bombs":6,"obstacles":25,"nps":3.383,"length":432.0,"characteristic":"Standard","difficulty":"Expert","events":969,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":202.5,"paritySummary":{"errors":85,"warns":76,"resets":2}}],"downloadURL":"https://cdn.beatsaver.com/8c392c31aeadb55eebeb978c09fa79857380f15c.zip","coverURL":"https://cdn.beatsaver.com/8c392c31aeadb55eebeb978c09fa79857380f15c.jpg","previewURL":"https://cdn.beatsaver.com/8c392c31aeadb55eebeb978c09fa79857380f15c.mp3"}],"createdAt":"2019-02-15T23:55:37Z","updatedAt":"2019-02-15T23:55:37Z","lastPublishedAt":"2019-02-15T23:55:37Z"},{"id":"141","name":"GANGNAM STYLE","description":"Expert, Hard, and Normal tracks. I tried my best to setup the chorus charts to allow you to mimic the classic dance moves. I think it matches up quite nicely. I hope you have as much fun playing as I did making this! Enjoy!","uploader":{"id":41378,"name":"greatyazer","uniqueSet":true,"hash":"5cff0b7298cc5a672c84ea71","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ea71?d=retro","type":"SIMPLE"},"metadata":{"bpm":132.0,"duration":219,"songName":"Gangnam Style","songSubName":"PSY","songAuthorName":"GreatYazer","levelAuthorName":"greatyazer"},"stats":{"plays":0,"downloads":35740,"upvotes":21669,"downvotes":788,"score":0.9421},"uploaded":"2018-05-20T09:59:02Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"8e7e553099436af31564adf1977a5ec42a61cfff","key":"141","state":"Published","createdAt":"2018-05-20T09:59:02Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":415,"bombs":4,"obstacles":42,"nps":2.02,"length":452.0,"characteristic":"Standard","difficulty":"Normal","events":735,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":205.455,"paritySummary":{"errors":191,"warns":17,"resets":0},"stars":1.15},{"njs":10.0,"offset":0.0,"notes":695,"bombs":40,"obstacles":94,"nps":3.383,"length":452.0,"characteristic":"Standard","difficulty":"Hard","events":735,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":205.455,"paritySummary":{"errors":275,"warns":23,"resets":0}},{"njs":10.0,"offset":0.0,"notes":932,"bombs":50,"obstacles":103,"nps":4.536,"length":452.0,"characteristic":"Standard","difficulty":"Expert","events":735,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":205.455,"paritySummary":{"errors":332,"warns":34,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/8e7e553099436af31564adf1977a5ec42a61cfff.zip","coverURL":"https://cdn.beatsaver.com/8e7e553099436af31564adf1977a5ec42a61cfff.jpg","previewURL":"https://cdn.beatsaver.com/8e7e553099436af31564adf1977a5ec42a61cfff.mp3"}],"createdAt":"2018-05-20T09:59:02Z","updatedAt":"2018-05-20T09:59:02Z","lastPublishedAt":"2018-05-20T09:59:02Z"},{"id":"319f","name":"Fall Out Boy - My songs know what you did in the dark (Light 'em up)","description":"Had a bit of time off lately so I went and made a other map. This time it's Fall Out Boy!\r\nI realise a map had been made for this track already, but I thought I'd give my take on it too seeing as its such a good song ;)\r\nAll difficulties are included from Easy to Expert so enjoy! :)\r\n\r\nUpdate: \r\nDecided to bite the bullet here and do an update. Big thanks for Heisenbergirl for pointing out the NJS felt off. Playing around with it I've now raised it to 13 (from 12) and learnt a valuable skill when it comes to mapping. Basically the NJS spaces out the notes a bit more so makes it easier to read.\r\nI also adjusted a couple of the opening notes on Hard because I didn't really like the way that they flowed.\r\nFinally just want to apologise to everyone who's worked hard on a score or left a review. It sucks to have to reset it like this but it did need the update.\r\n\r\nVideo: https://www.youtube.com/watch?v=iZMvCvyarYA","uploader":{"id":4785,"name":"stumi","uniqueSet":false,"hash":"5cff0b7398cc5a672c84f720","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro","type":"SIMPLE"},"metadata":{"bpm":152.0,"duration":188,"songName":"My songs know what you did in the dark","songSubName":"Fall Out Boy","songAuthorName":"Stumi","levelAuthorName":"stumi"},"stats":{"plays":0,"downloads":15797,"upvotes":5260,"downvotes":119,"score":0.9419},"uploaded":"2019-01-27T13:00:05Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"5b53a3bede4fd8ee0950d0c5ba2dbbff73b6d127","key":"319f","state":"Published","createdAt":"2019-01-27T13:00:05Z","sageScore":6,"diffs":[{"njs":10.0,"offset":0.0,"notes":243,"bombs":4,"obstacles":93,"nps":1.362,"length":452.0,"characteristic":"Standard","difficulty":"Easy","events":1723,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":178.421,"paritySummary":{"errors":23,"warns":13,"resets":0}},{"njs":10.0,"offset":0.0,"notes":328,"bombs":4,"obstacles":95,"nps":1.838,"length":452.0,"characteristic":"Standard","difficulty":"Normal","events":1723,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":178.421,"paritySummary":{"errors":28,"warns":28,"resets":2}},{"njs":11.0,"offset":0.0,"notes":514,"bombs":4,"obstacles":75,"nps":2.881,"length":452.0,"characteristic":"Standard","difficulty":"Hard","events":1725,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":178.421,"paritySummary":{"errors":25,"warns":18,"resets":1}},{"njs":13.0,"offset":0.0,"notes":693,"bombs":8,"obstacles":58,"nps":3.884,"length":452.0,"characteristic":"Standard","difficulty":"Expert","events":1726,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":178.421,"paritySummary":{"errors":27,"warns":21,"resets":4}}],"downloadURL":"https://cdn.beatsaver.com/5b53a3bede4fd8ee0950d0c5ba2dbbff73b6d127.zip","coverURL":"https://cdn.beatsaver.com/5b53a3bede4fd8ee0950d0c5ba2dbbff73b6d127.jpg","previewURL":"https://cdn.beatsaver.com/5b53a3bede4fd8ee0950d0c5ba2dbbff73b6d127.mp3"}],"createdAt":"2019-01-27T13:00:05Z","updatedAt":"2019-01-27T13:00:05Z","lastPublishedAt":"2019-01-27T13:00:05Z"},{"id":"ac0a","name":"Hornet (Hollow Knight OST)","description":"This song really loses something without Hornet's war cries of \"SHAA\" and \"HEGAALE\" every three seconds. It also really gains something, because without that you can actually hear the music for once.","uploader":{"id":4285065,"name":"skaiamechanic","uniqueSet":true,"hash":"5e455654470a8200067c9bf9","avatar":"https://cdn.beatsaver.com/avatar/274999097361170432.png","type":"DISCORD"},"metadata":{"bpm":145.0,"duration":168,"songName":"Hornet","songSubName":"Hollow Knight","songAuthorName":"Christopher Larkin","levelAuthorName":"SkaiaMechanic"},"stats":{"plays":0,"downloads":6639,"upvotes":2339,"downvotes":26,"score":0.9418},"uploaded":"2020-05-29T18:41:14.740Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"48f5d0ddc8c6a006b5633c828039912744393877","key":"ac0a","state":"Published","createdAt":"2020-05-29T18:41:14.740Z","sageScore":5,"diffs":[{"njs":15.0,"offset":0.0,"notes":695,"bombs":0,"obstacles":12,"nps":4.266,"length":393.75,"characteristic":"Standard","difficulty":"Hard","events":2513,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":162.931,"paritySummary":{"errors":43,"warns":55,"resets":0}},{"njs":18.0,"offset":0.0,"notes":720,"bombs":0,"obstacles":33,"nps":4.419,"length":393.75,"characteristic":"Standard","difficulty":"Expert","events":2513,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":162.931,"paritySummary":{"errors":27,"warns":35,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/48f5d0ddc8c6a006b5633c828039912744393877.zip","coverURL":"https://cdn.beatsaver.com/48f5d0ddc8c6a006b5633c828039912744393877.jpg","previewURL":"https://cdn.beatsaver.com/48f5d0ddc8c6a006b5633c828039912744393877.mp3"}],"createdAt":"2020-05-29T18:41:14.740Z","updatedAt":"2020-05-29T18:41:14.740Z","lastPublishedAt":"2020-05-29T18:41:14.740Z"},{"id":"176c","name":"24K Magic - Bruno Mars","description":"We're taking it back old school... It's time to DANCE, baby!\r\nDifficulties: Expert, Hard, Normal\r\nYouTube Preview: https://youtu.be/IA4W-Z7KXSo","uploader":{"id":30311,"name":"bennydabeast","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e98d","avatar":"https://cdn.beatsaver.com/avatar/30311.jpg","type":"SIMPLE"},"metadata":{"bpm":107.0,"duration":228,"songName":"24K Magic","songSubName":"Bruno Mars","songAuthorName":"BennyDaBeast","levelAuthorName":"bennydabeast"},"stats":{"plays":0,"downloads":13810,"upvotes":6648,"downvotes":174,"score":0.9412},"uploaded":"2018-09-27T01:05:07Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"b9e05baa59f3ea5c97c5ae82766783d895249c61","key":"176c","state":"Published","createdAt":"2018-09-27T01:05:07Z","sageScore":6,"diffs":[{"njs":10.0,"offset":0.0,"notes":215,"bombs":0,"obstacles":38,"nps":1.08,"length":355.0,"characteristic":"Standard","difficulty":"Normal","events":1484,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":199.065,"paritySummary":{"errors":49,"warns":40,"resets":0}},{"njs":10.0,"offset":0.0,"notes":439,"bombs":0,"obstacles":40,"nps":2.205,"length":355.0,"characteristic":"Standard","difficulty":"Hard","events":1480,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":199.065,"paritySummary":{"errors":44,"warns":84,"resets":0}},{"njs":10.0,"offset":0.0,"notes":592,"bombs":0,"obstacles":52,"nps":2.974,"length":355.0,"characteristic":"Standard","difficulty":"Expert","events":1480,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":199.065,"paritySummary":{"errors":70,"warns":116,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/b9e05baa59f3ea5c97c5ae82766783d895249c61.zip","coverURL":"https://cdn.beatsaver.com/b9e05baa59f3ea5c97c5ae82766783d895249c61.jpg","previewURL":"https://cdn.beatsaver.com/b9e05baa59f3ea5c97c5ae82766783d895249c61.mp3"}],"createdAt":"2018-09-27T01:05:07Z","updatedAt":"2018-09-27T01:05:07Z","lastPublishedAt":"2018-09-27T01:05:07Z"},{"id":"6ea9","name":"Down Under - Men At Work","description":"Here's another great 80's anthem - Down Under, by Men At Work. I really enjoyed mapping this song. So much so, that I decided to do a full spread from Expert Plus to Easy. This is a really fun map to play whatever your skill level. I hope you enjoy it as much as I do!\n\nhttps://youtu.be/G0gTegU32ng","uploader":{"id":78593,"name":"techbutterfly","uniqueSet":true,"hash":"5cff0b7798cc5a672c8566f7","avatar":"https://cdn.beatsaver.com/avatar/527111497617506304.png","type":"DISCORD"},"metadata":{"bpm":107.0,"duration":210,"songName":"Down Under","songSubName":"","songAuthorName":"Men At Work","levelAuthorName":"TechButterfly"},"stats":{"plays":0,"downloads":12452,"upvotes":3609,"downvotes":67,"score":0.9411},"uploaded":"2019-11-07T20:34:53.687Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"c9ceaf7a8a7cea8381d08618c66110abbc4844f9","key":"6ea9","state":"Published","createdAt":"2019-11-07T20:34:53.687Z","sageScore":6,"diffs":[{"njs":12.0,"offset":0.0,"notes":249,"bombs":0,"obstacles":0,"nps":1.22,"length":364.0,"characteristic":"Standard","difficulty":"Easy","events":1970,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":204.112,"paritySummary":{"errors":59,"warns":52,"resets":0}},{"njs":12.0,"offset":0.0,"notes":416,"bombs":0,"obstacles":0,"nps":2.038,"length":364.0,"characteristic":"Standard","difficulty":"Normal","events":1970,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":204.112,"paritySummary":{"errors":85,"warns":84,"resets":0}},{"njs":15.0,"offset":0.0,"notes":613,"bombs":0,"obstacles":0,"nps":3.003,"length":364.0,"characteristic":"Standard","difficulty":"Hard","events":1970,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":204.112,"paritySummary":{"errors":54,"warns":97,"resets":0}},{"njs":16.0,"offset":0.0,"notes":753,"bombs":0,"obstacles":0,"nps":3.689,"length":364.0,"characteristic":"Standard","difficulty":"Expert","events":1970,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":204.112,"paritySummary":{"errors":47,"warns":56,"resets":0}},{"njs":17.0,"offset":0.8,"notes":938,"bombs":0,"obstacles":0,"nps":4.596,"length":364.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":1970,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":204.112,"paritySummary":{"errors":60,"warns":36,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/c9ceaf7a8a7cea8381d08618c66110abbc4844f9.zip","coverURL":"https://cdn.beatsaver.com/c9ceaf7a8a7cea8381d08618c66110abbc4844f9.jpg","previewURL":"https://cdn.beatsaver.com/c9ceaf7a8a7cea8381d08618c66110abbc4844f9.mp3"}],"createdAt":"2019-11-07T20:34:53.687Z","updatedAt":"2019-11-07T20:34:53.687Z","lastPublishedAt":"2019-11-07T20:34:53.687Z"},{"id":"195f","name":"Under The Sea (Little Mermaid) - Samuel E. Wright","description":"\"What do they got? A lot of sand. We got a hot crustacean band! Each little clam here know how to jam here, under the sea!\"\r\nDifficulties: Expert+, Expert, Hard, Normal\r\nYouTube Preview: https://youtu.be/h6eMPlGUZsw","uploader":{"id":30311,"name":"bennydabeast","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e98d","avatar":"https://cdn.beatsaver.com/avatar/30311.jpg","type":"SIMPLE"},"metadata":{"bpm":200.0,"duration":194,"songName":"Under The Sea","songSubName":"Samuel E. Wright","songAuthorName":"BennyDaBeast","levelAuthorName":"bennydabeast"},"stats":{"plays":0,"downloads":15120,"upvotes":6093,"downvotes":156,"score":0.9408},"uploaded":"2018-10-08T23:44:34Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"f745bac45c618fa2c49a0ee0c383f2a6cb356a78","key":"195f","state":"Published","createdAt":"2018-10-08T23:44:34Z","sageScore":4,"diffs":[{"njs":10.0,"offset":0.0,"notes":277,"bombs":0,"obstacles":9,"nps":1.464,"length":630.0,"characteristic":"Standard","difficulty":"Normal","events":1406,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":189.0,"paritySummary":{"errors":31,"warns":31,"resets":0}},{"njs":10.0,"offset":0.0,"notes":317,"bombs":0,"obstacles":9,"nps":1.673,"length":631.0,"characteristic":"Standard","difficulty":"Hard","events":1406,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":189.3,"paritySummary":{"errors":47,"warns":28,"resets":0}},{"njs":10.0,"offset":0.0,"notes":541,"bombs":0,"obstacles":9,"nps":2.855,"length":631.0,"characteristic":"Standard","difficulty":"Expert","events":1406,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":189.3,"paritySummary":{"errors":61,"warns":89,"resets":0}},{"njs":10.0,"offset":0.0,"notes":848,"bombs":0,"obstacles":9,"nps":4.475,"length":631.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":1406,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":189.3,"paritySummary":{"errors":86,"warns":112,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/f745bac45c618fa2c49a0ee0c383f2a6cb356a78.zip","coverURL":"https://cdn.beatsaver.com/f745bac45c618fa2c49a0ee0c383f2a6cb356a78.jpg","previewURL":"https://cdn.beatsaver.com/f745bac45c618fa2c49a0ee0c383f2a6cb356a78.mp3"}],"createdAt":"2018-10-08T23:44:34Z","updatedAt":"2018-10-08T23:44:34Z","lastPublishedAt":"2018-10-08T23:44:34Z"},{"id":"849a","name":"Darude Sandstorm","description":"du du du du du\nI originally mapped this back in May 2018, and then again in June 2018. The Beatsaver site migration yeeted the map, so I've restored the two original maps as well as 5 new standard difficulties, 5 one saber difficulties, and one 360 level. Fun Fact: Freeek originally got the idea to create Lightmap because he hated the lighting in the original Sandstorm map...so I created a new version of Lightmap and used that to light the new difficulties.\n\nStandard\nEasy - 307 notes (1.37 NPS)\nNormal - 505 notes (2.25 NPS)\nHard - 756 notes (3.38 NPS)\nExpert - 1120 notes (5.00 NPS)\nExpert+ - 1358 notes (6.06 NPS)\n\nOne Saber\nEasy - 192 notes (0.86 NPS)\nNormal - 302 notes (1.35 NPS)\nHard - 508 notes (2.27 NPS)\nExpert - 734 notes (3.28 NPS)\nExpert+ - 1112 notes (4.96 NPS)\n\nNo Arrows\nOriginal Expert - 1151 notes (5.14 NPS)\nOriginal Expert+ - 1141 notes (5.09 NPS)\n\n360\nExpert+ - 1359 notes (6.07 NPS)\n\nGameplay: Coming Soon\nSong: https://youtu.be/y6120QOlsfU","uploader":{"id":4284981,"name":"skylerwallace","uniqueSet":true,"hash":"5cff0b7298cc5a672c84ea67","avatar":"https://cdn.beatsaver.com/avatar/398344856868487168.png","type":"DISCORD"},"metadata":{"bpm":136.0,"duration":224,"songName":"Sandstorm","songSubName":"","songAuthorName":"Darude","levelAuthorName":"Skyler Wallace"},"stats":{"plays":0,"downloads":29265,"upvotes":10584,"downvotes":337,"score":0.9406},"uploaded":"2020-02-06T04:55:40.715Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"580eb7d1614a35d192722f748400c9896ac9527d","key":"849a","state":"Published","createdAt":"2020-02-06T04:55:40.715Z","sageScore":6,"diffs":[{"njs":10.0,"offset":-1.0,"notes":307,"bombs":0,"obstacles":15,"nps":1.407,"length":496.0,"characteristic":"Standard","difficulty":"Easy","events":13998,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":218.824,"paritySummary":{"errors":154,"warns":44,"resets":0},"stars":0.89},{"njs":10.0,"offset":-1.0,"notes":505,"bombs":0,"obstacles":15,"nps":2.314,"length":496.0,"characteristic":"Standard","difficulty":"Normal","events":13998,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":218.824,"paritySummary":{"errors":143,"warns":46,"resets":0},"stars":1.42},{"njs":12.0,"offset":0.5,"notes":756,"bombs":0,"obstacles":27,"nps":3.464,"length":496.0,"characteristic":"Standard","difficulty":"Hard","events":13998,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":218.824,"paritySummary":{"errors":26,"warns":18,"resets":0},"stars":2.01},{"njs":15.0,"offset":0.0,"notes":1120,"bombs":0,"obstacles":43,"nps":5.133,"length":496.0,"characteristic":"Standard","difficulty":"Expert","events":13998,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":218.824,"paritySummary":{"errors":12,"warns":6,"resets":0},"stars":4.2},{"njs":17.0,"offset":-0.25,"notes":1358,"bombs":18,"obstacles":23,"nps":6.223,"length":496.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":13969,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":218.824,"paritySummary":{"errors":4,"warns":6,"resets":0},"stars":5.95},{"njs":10.0,"offset":-1.0,"notes":192,"bombs":0,"obstacles":13,"nps":0.88,"length":496.0,"characteristic":"OneSaber","difficulty":"Easy","events":13998,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":218.824,"paritySummary":{"errors":88,"warns":26,"resets":0}},{"njs":10.0,"offset":-1.0,"notes":302,"bombs":0,"obstacles":15,"nps":1.384,"length":496.0,"characteristic":"OneSaber","difficulty":"Normal","events":13998,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":218.824,"paritySummary":{"errors":65,"warns":74,"resets":0}},{"njs":12.0,"offset":0.5,"notes":508,"bombs":0,"obstacles":15,"nps":2.328,"length":496.0,"characteristic":"OneSaber","difficulty":"Hard","events":13998,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":218.824,"paritySummary":{"errors":53,"warns":64,"resets":0}},{"njs":15.0,"offset":0.0,"notes":734,"bombs":0,"obstacles":24,"nps":3.364,"length":496.0,"characteristic":"OneSaber","difficulty":"Expert","events":13998,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":218.824,"paritySummary":{"errors":4,"warns":5,"resets":0}},{"njs":17.0,"offset":-0.25,"notes":1112,"bombs":0,"obstacles":41,"nps":5.096,"length":496.0,"characteristic":"OneSaber","difficulty":"ExpertPlus","events":13998,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":218.824,"paritySummary":{"errors":5,"warns":9,"resets":0}},{"njs":12.0,"offset":0.5,"notes":1151,"bombs":0,"obstacles":19,"nps":4.089,"length":639.75,"characteristic":"NoArrows","difficulty":"Expert","events":1080,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":282.243,"paritySummary":{"errors":87,"warns":41,"resets":0}},{"njs":15.0,"offset":0.0,"notes":1141,"bombs":0,"obstacles":31,"nps":4.054,"length":639.75,"characteristic":"NoArrows","difficulty":"ExpertPlus","events":2315,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":282.243,"paritySummary":{"errors":129,"warns":34,"resets":0}},{"njs":17.0,"offset":0.0,"notes":1359,"bombs":0,"obstacles":27,"nps":6.228,"length":496.0,"characteristic":"360Degree","difficulty":"ExpertPlus","events":14547,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":218.824,"paritySummary":{"errors":4,"warns":6,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/580eb7d1614a35d192722f748400c9896ac9527d.zip","coverURL":"https://cdn.beatsaver.com/580eb7d1614a35d192722f748400c9896ac9527d.jpg","previewURL":"https://cdn.beatsaver.com/580eb7d1614a35d192722f748400c9896ac9527d.mp3"}],"createdAt":"2020-02-06T04:55:40.715Z","updatedAt":"2020-02-06T04:55:40.715Z","lastPublishedAt":"2020-02-06T04:55:40.715Z"},{"id":"4858","name":"Papercut - Linkin Park","description":"YouTube:\r\nhttps://www.youtube.com/watch?v=vjVkXlxsO8Q","uploader":{"id":27983,"name":"heisenbergirl","uniqueSet":true,"hash":"5cff0b7298cc5a672c84ec30","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ec30?d=retro","type":"SIMPLE"},"metadata":{"bpm":150.0,"duration":187,"songName":"Papercut","songSubName":"Linkin Park","songAuthorName":"Heisenberg","levelAuthorName":"heisenbergirl"},"stats":{"plays":0,"downloads":9559,"upvotes":4539,"downvotes":101,"score":0.9406},"uploaded":"2019-04-25T17:52:09Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"431ffaa53a1e45ffab6c81a895e456f6aad1e038","key":"4858","state":"Published","createdAt":"2019-04-25T17:52:09Z","sageScore":6,"diffs":[{"njs":12.0,"offset":0.0,"notes":634,"bombs":0,"obstacles":96,"nps":3.534,"length":449.0,"characteristic":"Standard","difficulty":"Hard","events":2316,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":179.6,"paritySummary":{"errors":40,"warns":45,"resets":0}},{"njs":15.0,"offset":0.0,"notes":842,"bombs":0,"obstacles":90,"nps":4.694,"length":449.0,"characteristic":"Standard","difficulty":"Expert","events":2316,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":179.6,"paritySummary":{"errors":16,"warns":22,"resets":0}},{"njs":18.0,"offset":0.0,"notes":993,"bombs":0,"obstacles":66,"nps":5.535,"length":449.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":2327,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":179.6,"paritySummary":{"errors":31,"warns":63,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/431ffaa53a1e45ffab6c81a895e456f6aad1e038.zip","coverURL":"https://cdn.beatsaver.com/431ffaa53a1e45ffab6c81a895e456f6aad1e038.jpg","previewURL":"https://cdn.beatsaver.com/431ffaa53a1e45ffab6c81a895e456f6aad1e038.mp3"}],"createdAt":"2019-04-25T17:52:09Z","updatedAt":"2019-04-25T17:52:09Z","lastPublishedAt":"2019-04-25T17:52:09Z"},{"id":"5d8d","name":"New Game - Nitro Fun","description":"Dancey E+, not very challenging.\n\nSee it in action: https://www.youtube.com/watch?v=IddrPmb4poA\n\nThank you to my playtesters:\n\nQTpop (https://www.twitch.tv/qtpop)\nTheRainbowGamerGirl (https://www.twitch.tv/therainbowgamergirl)","uploader":{"id":38202,"name":"fafurion","uniqueSet":false,"hash":"5cff0b7398cc5a672c84f945","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f945?d=retro","type":"SIMPLE"},"metadata":{"bpm":128.0,"duration":261,"songName":"New Game","songSubName":"","songAuthorName":"Nitro Fun","levelAuthorName":"Fafurion"},"stats":{"plays":0,"downloads":4880,"upvotes":2873,"downvotes":46,"score":0.9404},"uploaded":"2019-08-17T15:26:08.685Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"310694f2ff8d129d4e64192251653caffdc65b62","key":"5d8d","state":"Published","createdAt":"2019-08-17T15:26:08.685Z","sageScore":5,"diffs":[{"njs":16.0,"offset":0.0,"notes":1229,"bombs":0,"obstacles":37,"nps":4.824,"length":543.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":7711,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":254.766,"paritySummary":{"errors":45,"warns":81,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/310694f2ff8d129d4e64192251653caffdc65b62.zip","coverURL":"https://cdn.beatsaver.com/310694f2ff8d129d4e64192251653caffdc65b62.jpg","previewURL":"https://cdn.beatsaver.com/310694f2ff8d129d4e64192251653caffdc65b62.mp3"}],"createdAt":"2019-08-17T15:26:08.685Z","updatedAt":"2019-08-17T15:26:08.685Z","lastPublishedAt":"2019-08-17T15:26:08.685Z"},{"id":"2b1a","name":"Fallen Kingdom [Viva la Vida Minecraft Parody] - CaptainSparklez ft. TryHardNinja","description":"As requested by @ScrewBedtime and @Anonymous_Food: Fallen Kingdom, CaptainSparklez's minecraft parody of Viva la Vida. The parody's song arrangement is slightly different than the original so I had to remap some parts. This map goes out to all the 12 year olds that will listen to this instead of the original all because it has Minecraft lol. For the full experience play this with a minecraft saber and platform.","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":138.0,"duration":255,"songName":"Fallen Kingdom","songSubName":"CaptainSparklez ft. TryHardNinja","songAuthorName":"Joetastic","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":8390,"upvotes":4332,"downvotes":95,"score":0.9403},"uploaded":"2019-01-05T10:20:33Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"06150c7c34af95f53f5ed8fac5659c70649a07f0","key":"2b1a","state":"Published","createdAt":"2019-01-05T10:20:33Z","sageScore":4,"diffs":[{"njs":14.0,"offset":0.0,"notes":925,"bombs":0,"obstacles":43,"nps":4.037,"length":527.0,"characteristic":"Standard","difficulty":"Hard","events":727,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":229.13,"paritySummary":{"errors":40,"warns":37,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/06150c7c34af95f53f5ed8fac5659c70649a07f0.zip","coverURL":"https://cdn.beatsaver.com/06150c7c34af95f53f5ed8fac5659c70649a07f0.jpg","previewURL":"https://cdn.beatsaver.com/06150c7c34af95f53f5ed8fac5659c70649a07f0.mp3"}],"createdAt":"2019-01-05T10:20:33Z","updatedAt":"2019-01-05T10:20:33Z","lastPublishedAt":"2019-01-05T10:20:33Z"},{"id":"4adb","name":"Deja Vu - Dave Rodgers (Initial D)","description":"Was requested to get this Ranked, so some minor changes to fit updates in Ranking criteria!\r\n\r\nNotes Per Second:\r\nEasy / 1.6\r\nNormal / 2\r\nHard / 2.6\r\nExpert / 3.6\r\nExpert+ / 4.2\r\n\r\nExpert+ Playthrough:\r\nhttps://streamable.com/pk918","uploader":{"id":11373,"name":"redmagi","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e9d2","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9d2?d=retro","type":"SIMPLE"},"metadata":{"bpm":154.0,"duration":105,"songName":"Deja Vu (Short Ver.)","songSubName":"Dave Rodgers","songAuthorName":"Redmagi","levelAuthorName":"redmagi"},"stats":{"plays":0,"downloads":24353,"upvotes":10971,"downvotes":358,"score":0.9402},"uploaded":"2019-05-05T18:37:01Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"c9c15d3f3109a8f732b41b299ce84556bebf73ac","key":"4adb","state":"Published","createdAt":"2019-05-05T18:37:01Z","sageScore":8,"diffs":[{"njs":10.0,"offset":1.0,"notes":171,"bombs":0,"obstacles":11,"nps":1.669,"length":263.0,"characteristic":"Standard","difficulty":"Easy","events":1439,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":102.468,"paritySummary":{"errors":9,"warns":6,"resets":0},"stars":0.95},{"njs":12.0,"offset":1.0,"notes":211,"bombs":45,"obstacles":8,"nps":2.059,"length":263.0,"characteristic":"Standard","difficulty":"Normal","events":1439,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":102.468,"paritySummary":{"errors":27,"warns":26,"resets":2},"stars":1.29},{"njs":14.0,"offset":1.0,"notes":281,"bombs":56,"obstacles":8,"nps":2.742,"length":263.0,"characteristic":"Standard","difficulty":"Hard","events":1439,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":102.468,"paritySummary":{"errors":18,"warns":28,"resets":6},"stars":1.92},{"njs":15.0,"offset":1.0,"notes":382,"bombs":24,"obstacles":0,"nps":3.728,"length":263.0,"characteristic":"Standard","difficulty":"Expert","events":1439,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":102.468,"paritySummary":{"errors":19,"warns":36,"resets":4},"stars":2.68},{"njs":18.0,"offset":0.0,"notes":446,"bombs":32,"obstacles":0,"nps":4.353,"length":263.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":1439,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":102.468,"paritySummary":{"errors":19,"warns":56,"resets":0},"stars":4.46}],"downloadURL":"https://cdn.beatsaver.com/c9c15d3f3109a8f732b41b299ce84556bebf73ac.zip","coverURL":"https://cdn.beatsaver.com/c9c15d3f3109a8f732b41b299ce84556bebf73ac.jpg","previewURL":"https://cdn.beatsaver.com/c9c15d3f3109a8f732b41b299ce84556bebf73ac.mp3"}],"createdAt":"2019-05-05T18:37:01Z","updatedAt":"2019-05-05T18:37:01Z","lastPublishedAt":"2019-05-05T18:37:01Z"},{"id":"4a47","name":"[Anniversary] Supernova - Laszlo [DownyCat]","description":"Part of the Anniversary Song Pack","uploader":{"id":37070,"name":"anniversaryteam","uniqueSet":true,"hash":"5cff0b7798cc5a672c8565a3","avatar":"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro","type":"SIMPLE"},"metadata":{"bpm":128.0,"duration":196,"songName":"Supernova","songSubName":"Laszlo","songAuthorName":"DownyCat","levelAuthorName":"AnniversaryTeam"},"stats":{"plays":0,"downloads":7974,"upvotes":4371,"downvotes":97,"score":0.9402},"uploaded":"2019-05-03T14:10:59Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"17ad188a8dea7cff81f5f7c6720099a1e395b168","key":"4a47","state":"Published","createdAt":"2019-05-03T14:10:59Z","sageScore":8,"diffs":[{"njs":12.0,"offset":0.0,"notes":260,"bombs":0,"obstacles":18,"nps":1.387,"length":400.0,"characteristic":"Standard","difficulty":"Easy","events":4926,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":187.5,"paritySummary":{"errors":21,"warns":17,"resets":0}},{"njs":12.0,"offset":0.0,"notes":375,"bombs":0,"obstacles":22,"nps":2.0,"length":400.0,"characteristic":"Standard","difficulty":"Normal","events":4926,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":187.5,"paritySummary":{"errors":18,"warns":14,"resets":0}},{"njs":12.0,"offset":0.0,"notes":491,"bombs":0,"obstacles":22,"nps":2.619,"length":400.0,"characteristic":"Standard","difficulty":"Hard","events":4926,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":187.5,"paritySummary":{"errors":16,"warns":19,"resets":0}},{"njs":16.0,"offset":0.0,"notes":832,"bombs":0,"obstacles":22,"nps":4.437,"length":400.0,"characteristic":"Standard","difficulty":"Expert","events":4926,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":187.5,"paritySummary":{"errors":12,"warns":8,"resets":0}},{"njs":18.0,"offset":0.0,"notes":959,"bombs":0,"obstacles":22,"nps":5.115,"length":400.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":4926,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":187.5,"paritySummary":{"errors":18,"warns":15,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/17ad188a8dea7cff81f5f7c6720099a1e395b168.zip","coverURL":"https://cdn.beatsaver.com/17ad188a8dea7cff81f5f7c6720099a1e395b168.jpg","previewURL":"https://cdn.beatsaver.com/17ad188a8dea7cff81f5f7c6720099a1e395b168.mp3"}],"createdAt":"2019-05-03T14:10:59Z","updatedAt":"2019-05-03T14:10:59Z","lastPublishedAt":"2019-05-03T14:10:59Z"},{"id":"36d5","name":"TheFatRat - MAYDAY feat. Laura Brehm","description":"reuploaded for ranked\n","uploader":{"id":4284400,"name":"oddloop","uniqueSet":true,"hash":"5cff0b7398cc5a672c84fd45","avatar":"https://cdn.beatsaver.com/avatar/173241614192476161.png","type":"DISCORD"},"metadata":{"bpm":150.0,"duration":247,"songName":"MAYDAY","songSubName":"TheFatRat & Laura Brehm","songAuthorName":"Oddloop","levelAuthorName":"oddloop"},"stats":{"plays":0,"downloads":12226,"upvotes":4840,"downvotes":114,"score":0.9402},"uploaded":"2019-02-16T21:37:31Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"6a9042eb11d4da0938bbdaa0f584131def762f4a","key":"36d5","state":"Published","createdAt":"2019-02-16T21:37:31Z","sageScore":6,"diffs":[{"njs":16.0,"offset":0.0,"notes":887,"bombs":0,"obstacles":20,"nps":3.807,"length":582.5,"characteristic":"Standard","difficulty":"Expert","events":1307,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":233.0,"paritySummary":{"errors":23,"warns":24,"resets":0},"stars":2.85}],"downloadURL":"https://cdn.beatsaver.com/6a9042eb11d4da0938bbdaa0f584131def762f4a.zip","coverURL":"https://cdn.beatsaver.com/6a9042eb11d4da0938bbdaa0f584131def762f4a.jpg","previewURL":"https://cdn.beatsaver.com/6a9042eb11d4da0938bbdaa0f584131def762f4a.mp3"}],"createdAt":"2019-02-16T21:37:31Z","updatedAt":"2019-02-16T21:37:31Z","lastPublishedAt":"2019-02-16T21:37:31Z"},{"id":"49ae","name":"Lindsey Stirling - Shatter Me","description":"Feedback on Discord: nitronik.exe#7974\nNote: if you dont like flashy lights, turn on static lights! (also epilepsy warning lol)\npreview: https://www.youtube.com/watch?v=0JGEh4lPVpA\n\nEasy (lightshow): 0 notes, 0 nps, 0 bombs, 0 walls, njs 10\nNormal: 692 notes, 2.37 nps, 0 bombs, 25 walls, njs 10\nHard: 912 notes, 3.13 nps, 8 bombs, 29 walls, njs 13\nExpert: 1166 notes, 4 nps, 38 bombs, 29 walls, njs 16\nExpertPlus: 1462 Notes, 5.02 nps, 64 bombs, 33 walls, njs 19","uploader":{"id":4284201,"name":"nitronikexe","uniqueSet":true,"hash":"5cff0b7798cc5a672c855d84","avatar":"https://cdn.beatsaver.com/avatar/428230049704181760.png","type":"DISCORD"},"metadata":{"bpm":145.0,"duration":291,"songName":"Shatter Me","songSubName":"Lindsey Stirling","songAuthorName":"nitronik.exe","levelAuthorName":"nitronikexe"},"stats":{"plays":0,"downloads":10457,"upvotes":5571,"downvotes":144,"score":0.9397},"uploaded":"2019-05-01T10:07:45Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"0c02558f26e46d94c33728885a10ea8a4e2a9fd5","key":"49ae","state":"Published","createdAt":"2019-05-01T10:07:45Z","sageScore":8,"diffs":[{"njs":10.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"Standard","difficulty":"Easy","events":7862,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":10.0,"offset":0.0,"notes":692,"bombs":0,"obstacles":25,"nps":2.57,"length":650.667,"characteristic":"Standard","difficulty":"Normal","events":7862,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":269.241,"paritySummary":{"errors":0,"warns":18,"resets":0}},{"njs":13.0,"offset":0.0,"notes":912,"bombs":8,"obstacles":29,"nps":3.386,"length":651.0,"characteristic":"Standard","difficulty":"Hard","events":7862,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":269.379,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":16.0,"offset":0.0,"notes":1166,"bombs":38,"obstacles":29,"nps":4.305,"length":654.5,"characteristic":"Standard","difficulty":"Expert","events":7862,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":270.828,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":19.0,"offset":0.0,"notes":1462,"bombs":64,"obstacles":33,"nps":5.427,"length":651.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":7862,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":269.379,"paritySummary":{"errors":8,"warns":4,"resets":20}}],"downloadURL":"https://cdn.beatsaver.com/0c02558f26e46d94c33728885a10ea8a4e2a9fd5.zip","coverURL":"https://cdn.beatsaver.com/0c02558f26e46d94c33728885a10ea8a4e2a9fd5.jpg","previewURL":"https://cdn.beatsaver.com/0c02558f26e46d94c33728885a10ea8a4e2a9fd5.mp3"}],"createdAt":"2019-05-01T10:07:45Z","updatedAt":"2019-05-01T10:07:45Z","lastPublishedAt":"2019-05-01T10:07:45Z"},{"id":"45e","name":"CAN'T STOP THE FEELING! - Justin Timberlake","description":"Difficulties: Expert Only Lighting by GreatYazer\r\nWatch Me on Twitch: http://www.twitch.tv/bennydabeastlive\r\n\r\nIf you like this, check out my other beat maps:\r\nMidnight City by M83: https://beatsaver.com/details.php?id=542\r\nKids by MGMT: https://beatsaver.com/details.php?id=421\r\nWhat You Know by Two Door Cinema Club: https://beatsaver.com/details.php?id=1107\r\nPolish Girl by Neon Indian: https://beatsaver.com/details.php?id=694","uploader":{"id":30311,"name":"bennydabeast","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e98d","avatar":"https://cdn.beatsaver.com/avatar/30311.jpg","type":"SIMPLE"},"metadata":{"bpm":113.0,"duration":238,"songName":"CAN'T STOP THE FEELING!","songSubName":"Justin Timberlake","songAuthorName":"BennyDaBeast","levelAuthorName":"bennydabeast"},"stats":{"plays":0,"downloads":18524,"upvotes":6933,"downvotes":197,"score":0.9397},"uploaded":"2018-06-08T21:44:40Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"91ba25c089d50e93154e2c7920c46d4730f22569","key":"45e","state":"Published","createdAt":"2018-06-08T21:44:40Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":579,"bombs":0,"obstacles":38,"nps":2.507,"length":435.0,"characteristic":"Standard","difficulty":"Expert","events":709,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":230.973,"paritySummary":{"errors":110,"warns":65,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/91ba25c089d50e93154e2c7920c46d4730f22569.zip","coverURL":"https://cdn.beatsaver.com/91ba25c089d50e93154e2c7920c46d4730f22569.jpg","previewURL":"https://cdn.beatsaver.com/91ba25c089d50e93154e2c7920c46d4730f22569.mp3"}],"createdAt":"2018-06-08T21:44:40Z","updatedAt":"2018-06-08T21:44:40Z","lastPublishedAt":"2018-06-08T21:44:40Z"},{"id":"80da","name":"chelmico - Easy Breezy [Keep Your Hands Off Eizouken! Opening]","description":"stan sayaka\n\nAlso please check out chelmico's other songs. I've just recently become addicted to their songs\n\nBPM 186 |\nExpert+\nExpert\nHard\nBreezy (Normal)\nEasy\n\nthanks as always\n\nDM any feedback on Discord\nETAN#8341","uploader":{"id":4235140,"name":"etan","uniqueSet":true,"hash":"5cff0b7798cc5a672c855775","avatar":"https://cdn.beatsaver.com/avatar/136373107559497728.png","type":"DISCORD"},"metadata":{"bpm":186.0,"duration":109,"songName":"Easy Breezy","songSubName":"","songAuthorName":"chelmico","levelAuthorName":"ETAN"},"stats":{"plays":0,"downloads":7380,"upvotes":2370,"downvotes":33,"score":0.9396},"uploaded":"2020-01-24T11:15:41.867Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"070007ff180423aa0abf3f2ba5584b0846788ee8","key":"80da","state":"Published","createdAt":"2020-01-24T11:15:41.867Z","sageScore":6,"diffs":[{"njs":10.0,"offset":0.5,"notes":117,"bombs":8,"obstacles":11,"nps":1.242,"length":292.0,"characteristic":"Standard","difficulty":"Easy","events":4738,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":94.194,"paritySummary":{"errors":7,"warns":7,"resets":2}},{"njs":12.0,"offset":0.0,"notes":181,"bombs":17,"obstacles":11,"nps":1.909,"length":294.0,"characteristic":"Standard","difficulty":"Normal","events":4738,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":94.839,"paritySummary":{"errors":1,"warns":1,"resets":2}},{"njs":13.0,"offset":0.0,"notes":272,"bombs":17,"obstacles":11,"nps":2.858,"length":295.0,"characteristic":"Standard","difficulty":"Hard","events":4738,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":95.161,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":14.0,"offset":1.0,"notes":368,"bombs":17,"obstacles":11,"nps":3.765,"length":303.0,"characteristic":"Standard","difficulty":"Expert","events":4738,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":97.742,"paritySummary":{"errors":0,"warns":0,"resets":2}},{"njs":21.0,"offset":0.0,"notes":467,"bombs":17,"obstacles":11,"nps":4.778,"length":303.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":4687,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":97.742,"paritySummary":{"errors":0,"warns":0,"resets":2}},{"njs":10.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"Lightshow","difficulty":"Easy","events":4687,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/070007ff180423aa0abf3f2ba5584b0846788ee8.zip","coverURL":"https://cdn.beatsaver.com/070007ff180423aa0abf3f2ba5584b0846788ee8.jpg","previewURL":"https://cdn.beatsaver.com/070007ff180423aa0abf3f2ba5584b0846788ee8.mp3"}],"createdAt":"2020-01-24T11:15:41.867Z","updatedAt":"2020-01-24T11:15:41.867Z","lastPublishedAt":"2020-01-24T11:15:41.867Z"},{"id":"68f4","name":"Ehrling - Palm Trees","description":"Expert / Hard / Normal\r\nMade for HeyFalcon","uploader":{"id":12996,"name":"rustic","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e8c4","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro","type":"SIMPLE"},"metadata":{"bpm":122.0,"duration":167,"songName":"Palm Trees","songSubName":"","songAuthorName":"Ehrling","levelAuthorName":"Rustic"},"stats":{"plays":0,"downloads":3862,"upvotes":2336,"downvotes":32,"score":0.9396},"uploaded":"2019-10-10T18:18:18.093Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"6eef9850cfeb43d14c66323cfbae50d8532c9c43","key":"68f4","state":"Published","createdAt":"2019-10-10T18:18:18.093Z","sageScore":6,"diffs":[{"njs":12.0,"offset":0.0,"notes":257,"bombs":0,"obstacles":4876,"nps":1.574,"length":332.0,"characteristic":"Standard","difficulty":"Normal","events":1638,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":163.279,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":14.0,"offset":0.0,"notes":336,"bombs":0,"obstacles":4876,"nps":2.058,"length":332.0,"characteristic":"Standard","difficulty":"Hard","events":1638,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":163.279,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":17.0,"offset":0.0,"notes":337,"bombs":0,"obstacles":4876,"nps":2.064,"length":332.0,"characteristic":"Standard","difficulty":"Expert","events":1694,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":163.279,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/6eef9850cfeb43d14c66323cfbae50d8532c9c43.zip","coverURL":"https://cdn.beatsaver.com/6eef9850cfeb43d14c66323cfbae50d8532c9c43.jpg","previewURL":"https://cdn.beatsaver.com/6eef9850cfeb43d14c66323cfbae50d8532c9c43.mp3"}],"createdAt":"2019-10-10T18:18:18.093Z","updatedAt":"2019-10-10T18:18:18.093Z","lastPublishedAt":"2019-10-10T18:18:18.093Z"},{"id":"1311","name":"Restart","description":"Finally!\r\n\r\nAnother map for you all to enjoy!\r\n\r\nThis cheerful song will get anyones spirits up! \r\nAnd with the song being part dancey part flow your gonna wish you played it!\r\n\r\nExpert+ is HyperSpeed mode for those who want to play fast!\r\n\r\nAll lighting was done by me!\r\nI do say that ive got a talent for lighting hmm? ;P","uploader":{"id":4289111,"name":"blackblazon","uniqueSet":true,"hash":"5cff0b7398cc5a672c84ef34","avatar":"https://cdn.beatsaver.com/avatar/127162370538733568.png","type":"DISCORD"},"metadata":{"bpm":155.0,"duration":252,"songName":"Restart","songSubName":"Subtact","songAuthorName":"BlackBlazon","levelAuthorName":"blackblazon"},"stats":{"plays":0,"downloads":5574,"upvotes":2795,"downvotes":46,"score":0.9396},"uploaded":"2018-09-02T01:56:36Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"c7a915c5315591f5a0e31f89dbbad4e69992f353","key":"1311","state":"Published","createdAt":"2018-09-02T01:56:36Z","sageScore":5,"diffs":[{"njs":12.0,"offset":0.0,"notes":1116,"bombs":0,"obstacles":0,"nps":4.512,"length":639.0,"characteristic":"Standard","difficulty":"Expert","events":1785,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":247.355,"paritySummary":{"errors":66,"warns":23,"resets":0}},{"njs":15.0,"offset":0.0,"notes":1116,"bombs":0,"obstacles":0,"nps":4.512,"length":639.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":1785,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":247.355,"paritySummary":{"errors":66,"warns":23,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/c7a915c5315591f5a0e31f89dbbad4e69992f353.zip","coverURL":"https://cdn.beatsaver.com/c7a915c5315591f5a0e31f89dbbad4e69992f353.jpg","previewURL":"https://cdn.beatsaver.com/c7a915c5315591f5a0e31f89dbbad4e69992f353.mp3"}],"createdAt":"2018-09-02T01:56:36Z","updatedAt":"2018-09-02T01:56:36Z","lastPublishedAt":"2018-09-02T01:56:36Z"},{"id":"3fd3","name":"Cowboy Bebop - Tank! (Ben Briggs Remix)","description":"New lights, Expert now E+, an actual Expert added.","uploader":{"id":4285169,"name":"ryger","uniqueSet":true,"hash":"5cff0b7798cc5a672c855a42","avatar":"https://cdn.beatsaver.com/avatar/169266024502263808.png","type":"DISCORD"},"metadata":{"bpm":128.0,"duration":173,"songName":"Tank! (Ben Briggs Remix)","songSubName":"Cowboy Bebop","songAuthorName":"Ryger","levelAuthorName":"Ryger"},"stats":{"plays":0,"downloads":10556,"upvotes":4579,"downvotes":108,"score":0.9395},"uploaded":"2019-03-22T19:27:47Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"8a19fa1812254b7b610e667039af155cee68606a","key":"3fd3","state":"Published","createdAt":"2019-03-22T19:27:47Z","sageScore":6,"diffs":[{"njs":14.0,"offset":0.0,"notes":703,"bombs":0,"obstacles":5,"nps":4.173,"length":359.375,"characteristic":"Standard","difficulty":"Expert","events":3940,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":168.457,"paritySummary":{"errors":41,"warns":24,"resets":0}},{"njs":14.0,"offset":0.0,"notes":780,"bombs":0,"obstacles":5,"nps":4.63,"length":359.375,"characteristic":"Standard","difficulty":"ExpertPlus","events":3940,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":168.457,"paritySummary":{"errors":68,"warns":46,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/8a19fa1812254b7b610e667039af155cee68606a.zip","coverURL":"https://cdn.beatsaver.com/8a19fa1812254b7b610e667039af155cee68606a.jpg","previewURL":"https://cdn.beatsaver.com/8a19fa1812254b7b610e667039af155cee68606a.mp3"}],"createdAt":"2019-03-22T19:27:47Z","updatedAt":"2019-03-22T19:27:47Z","lastPublishedAt":"2019-03-22T19:27:47Z"},{"id":"6484","name":"Poison - Nightcore","description":"Youtube Preview: https://youtu.be/dzbdbXJWKMQ","uploader":{"id":23751,"name":"monteblanco","uniqueSet":true,"hash":"5cff0b7798cc5a672c855ef5","avatar":"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855ef5?d=retro","type":"SIMPLE"},"metadata":{"bpm":169.0,"duration":150,"songName":"Poison - Nightcore","songSubName":"","songAuthorName":"Groove Coverage","levelAuthorName":"Monteblanco"},"stats":{"plays":0,"downloads":6746,"upvotes":3401,"downvotes":67,"score":0.9394},"uploaded":"2019-09-19T13:15:08.715Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"e570d226c15ad3f5c4b84cfffe3542e61facc502","key":"6484","state":"Published","createdAt":"2019-09-19T13:15:08.715Z","sageScore":5,"diffs":[{"njs":15.0,"offset":0.0,"notes":504,"bombs":4,"obstacles":24,"nps":3.518,"length":403.5,"characteristic":"Standard","difficulty":"Expert","events":616,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":143.254,"paritySummary":{"errors":0,"warns":0,"resets":2}}],"downloadURL":"https://cdn.beatsaver.com/e570d226c15ad3f5c4b84cfffe3542e61facc502.zip","coverURL":"https://cdn.beatsaver.com/e570d226c15ad3f5c4b84cfffe3542e61facc502.jpg","previewURL":"https://cdn.beatsaver.com/e570d226c15ad3f5c4b84cfffe3542e61facc502.mp3"}],"createdAt":"2019-09-19T13:15:08.715Z","updatedAt":"2019-09-19T13:15:08.715Z","lastPublishedAt":"2019-09-19T13:15:08.715Z"},{"id":"2c4f","name":"POP/STARS vs MEGALOVANIA - Dj CUTMAN","description":"As requested by @Gravemind1. POP/STARS vs MEGALOVANIA by Dj CUTMAN! I had fun mapping this (especially since it gives me a reason to lightmap the KDA environment!) and I hope you'll have fun playing it too! \r\n\r\nAll credit goes to Dj CUTMAN for the mashup: https://www.youtube.com/watch?v=Wan2REH1x9g","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":185.0,"duration":176,"songName":"POP/STARS vs MEGALOVANIA","songSubName":"Dj CUTMAN","songAuthorName":"Joetastic","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":9567,"upvotes":4373,"downvotes":101,"score":0.9394},"uploaded":"2019-01-09T15:56:43Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"5ede52db98f5cde3a4d54b4f96d7f9b6fe227fe7","key":"2c4f","state":"Published","createdAt":"2019-01-09T15:56:43Z","sageScore":5,"diffs":[{"njs":15.0,"offset":0.0,"notes":995,"bombs":0,"obstacles":27,"nps":5.821,"length":527.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":3164,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":170.919,"paritySummary":{"errors":43,"warns":50,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/5ede52db98f5cde3a4d54b4f96d7f9b6fe227fe7.zip","coverURL":"https://cdn.beatsaver.com/5ede52db98f5cde3a4d54b4f96d7f9b6fe227fe7.jpg","previewURL":"https://cdn.beatsaver.com/5ede52db98f5cde3a4d54b4f96d7f9b6fe227fe7.mp3"}],"createdAt":"2019-01-09T15:56:43Z","updatedAt":"2019-01-09T15:56:43Z","lastPublishedAt":"2019-01-09T15:56:43Z"},{"id":"3694","name":"Centipede","description":"A full remake of the original Centipede map!\r\n\r\nEnjoy at your hearts content!\r\n\r\np.s i lied about the hiatus","uploader":{"id":4289111,"name":"blackblazon","uniqueSet":true,"hash":"5cff0b7398cc5a672c84ef34","avatar":"https://cdn.beatsaver.com/avatar/127162370538733568.png","type":"DISCORD"},"metadata":{"bpm":140.0,"duration":249,"songName":"Centipede","songSubName":"Knife Party","songAuthorName":"BlackBlazon & EpicEwok","levelAuthorName":"blackblazon"},"stats":{"plays":0,"downloads":8169,"upvotes":4979,"downvotes":125,"score":0.9391},"uploaded":"2019-02-16T00:35:23Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"e59f717e08b56c8693b14f42a94832cacd4bbca4","key":"3694","state":"Published","createdAt":"2019-02-16T00:35:23Z","sageScore":5,"diffs":[{"njs":14.0,"offset":0.0,"notes":1004,"bombs":56,"obstacles":25,"nps":4.371,"length":536.0,"characteristic":"Standard","difficulty":"Expert","events":11574,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":229.714,"paritySummary":{"errors":22,"warns":22,"resets":0}},{"njs":18.0,"offset":0.0,"notes":1004,"bombs":56,"obstacles":25,"nps":4.371,"length":536.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":11574,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":229.714,"paritySummary":{"errors":22,"warns":22,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/e59f717e08b56c8693b14f42a94832cacd4bbca4.zip","coverURL":"https://cdn.beatsaver.com/e59f717e08b56c8693b14f42a94832cacd4bbca4.jpg","previewURL":"https://cdn.beatsaver.com/e59f717e08b56c8693b14f42a94832cacd4bbca4.mp3"}],"createdAt":"2019-02-16T00:35:23Z","updatedAt":"2019-02-16T00:35:23Z","lastPublishedAt":"2019-02-16T00:35:23Z"},{"id":"1716","name":"Empty Threat - CHVRCHES","description":"Difficulties: Expert+, Expert, Hard, Normal\r\nYouTube Preview: https://youtu.be/5fp_4qs7RvA","uploader":{"id":30311,"name":"bennydabeast","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e98d","avatar":"https://cdn.beatsaver.com/avatar/30311.jpg","type":"SIMPLE"},"metadata":{"bpm":132.0,"duration":246,"songName":"Empty Threat","songSubName":"CHVRCHES","songAuthorName":"Benny","levelAuthorName":"bennydabeast"},"stats":{"plays":0,"downloads":7003,"upvotes":3875,"downvotes":85,"score":0.939},"uploaded":"2018-09-25T02:11:16Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"f08cad7d3b663caa6f8c23aa04664273f532f74a","key":"1716","state":"Published","createdAt":"2018-09-25T02:11:16Z","sageScore":4,"diffs":[{"njs":10.0,"offset":0.0,"notes":405,"bombs":0,"obstacles":16,"nps":1.697,"length":527.0,"characteristic":"Standard","difficulty":"Normal","events":1241,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":239.545,"paritySummary":{"errors":55,"warns":38,"resets":0}},{"njs":10.0,"offset":0.0,"notes":621,"bombs":0,"obstacles":24,"nps":2.6,"length":527.5,"characteristic":"Standard","difficulty":"Hard","events":1241,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":239.773,"paritySummary":{"errors":70,"warns":69,"resets":0}},{"njs":10.0,"offset":0.0,"notes":930,"bombs":0,"obstacles":24,"nps":3.893,"length":527.5,"characteristic":"Standard","difficulty":"Expert","events":1241,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":239.773,"paritySummary":{"errors":97,"warns":109,"resets":0}},{"njs":11.0,"offset":0.0,"notes":1255,"bombs":0,"obstacles":22,"nps":5.251,"length":527.75,"characteristic":"Standard","difficulty":"ExpertPlus","events":1241,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":239.886,"paritySummary":{"errors":116,"warns":208,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/f08cad7d3b663caa6f8c23aa04664273f532f74a.zip","coverURL":"https://cdn.beatsaver.com/f08cad7d3b663caa6f8c23aa04664273f532f74a.jpg","previewURL":"https://cdn.beatsaver.com/f08cad7d3b663caa6f8c23aa04664273f532f74a.mp3"}],"createdAt":"2018-09-25T02:11:16Z","updatedAt":"2018-09-25T02:11:16Z","lastPublishedAt":"2018-09-25T02:11:16Z"},{"id":"9d7","name":"Back in Black - AC/DC","description":"CAUSE I'M BACK IN BLAAAAAAACK! All difficulties, full lights.\r\n\r\nWas charted form start to finish on my twitch, come watch me stream other chart creations!!!! https://www.twitch.tv/freeek\r\n\r\nExpert FC Video: https://www.youtube.com/watch?v=ZxLxbSfSEPA","uploader":{"id":47581,"name":"freeek","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e8ad","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8ad?d=retro","type":"SIMPLE"},"metadata":{"bpm":95.0,"duration":241,"songName":"Back in Black","songSubName":"AC/DC","songAuthorName":"Freeek","levelAuthorName":"freeek"},"stats":{"plays":0,"downloads":20588,"upvotes":8804,"downvotes":280,"score":0.939},"uploaded":"2018-07-16T11:58:36Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"8af82a87167070a08ec63dba0459c829c2954067","key":"9d7","state":"Published","createdAt":"2018-07-16T11:58:36Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":450,"bombs":0,"obstacles":31,"nps":1.947,"length":366.0,"characteristic":"Standard","difficulty":"Easy","events":1258,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":231.158,"paritySummary":{"errors":19,"warns":2,"resets":0},"stars":0.51},{"njs":10.0,"offset":0.0,"notes":563,"bombs":0,"obstacles":47,"nps":2.436,"length":366.0,"characteristic":"Standard","difficulty":"Normal","events":1258,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":231.158,"paritySummary":{"errors":87,"warns":21,"resets":0},"stars":1.12},{"njs":10.0,"offset":0.0,"notes":683,"bombs":0,"obstacles":47,"nps":2.955,"length":366.0,"characteristic":"Standard","difficulty":"Hard","events":1258,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":231.158,"paritySummary":{"errors":81,"warns":89,"resets":0},"stars":1.73},{"njs":10.0,"offset":0.0,"notes":824,"bombs":0,"obstacles":47,"nps":3.565,"length":366.0,"characteristic":"Standard","difficulty":"Expert","events":1258,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":231.158,"paritySummary":{"errors":79,"warns":95,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/8af82a87167070a08ec63dba0459c829c2954067.zip","coverURL":"https://cdn.beatsaver.com/8af82a87167070a08ec63dba0459c829c2954067.jpg","previewURL":"https://cdn.beatsaver.com/8af82a87167070a08ec63dba0459c829c2954067.mp3"}],"createdAt":"2018-07-16T11:58:36Z","updatedAt":"2018-07-16T11:58:36Z","lastPublishedAt":"2018-07-16T11:58:36Z"},{"id":"198f3","name":"Spider Dance - Toby Fox (Undertale modchart)","description":"There are countless Undertale maps on Beat Saber, but what if you could actually experience a real boss fight? It's now possible thanks to Noodle Extensions, and I'm proud to present to you the first Undertale modchart: Spider Dance, where you will confront Muffet.\r\n\r\nTips for a better experience:\r\n- Don't use static lights; there shouldn't be any lights\r\n- Hide the HUD in player settings\r\n- Enable \"bloom post-processing\"\r\n- Enable \"screen distortion effects\"\r\n\r\nInstallation instructions:\r\n- You will need Noodle Extensions and Chroma and their dependencies. All are now available on ModAssistant.\r\n- If you read this in a future where the update broke the mods and they haven't been approved on ModAssistant yet, install the basic mods from ModAssistant and get the latest releases of Noodle Extensions, Heck, and Chroma from Aeroluna's GitHub: https://github.com/Aeroluna\r\n\r\nVideo: https://youtu.be/fy8KmUor6fI\r\n\r\nI started this a while ago before Ghost Choir and then abandoned the project. But I finally decided to finish the work, so I hope you'll enjoy it :)\r\nThanks to Reaxt and Cyansnow, who testplayed and made detailed suggestions that helped me improve the quality of this map. I really appreciate it.\r\n\r\nMy social media links (please follow/subscribe): https://linktr.ee/nyri0","uploader":{"id":4288814,"name":"nyri0","uniqueSet":true,"hash":"5e792df416c9680006086a78","avatar":"https://cdn.beatsaver.com/avatar/396715033125584907.png","type":"DISCORD"},"metadata":{"bpm":115.0,"duration":114,"songName":"Spider Dance","songSubName":"","songAuthorName":"Toby Fox","levelAuthorName":"nyri0"},"stats":{"plays":0,"downloads":15821,"upvotes":1257,"downvotes":4,"score":0.9389},"uploaded":"2021-06-25T17:47:40.296Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"09246637fa63ac55aa518718fd1eb4b876960480","key":"198f3","state":"Published","createdAt":"2021-06-25T17:47:40.296Z","sageScore":2,"diffs":[{"njs":16.0,"offset":0.0,"notes":434,"bombs":88,"obstacles":1153,"nps":4.377,"length":190.063,"characteristic":"Standard","difficulty":"ExpertPlus","events":5,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":99.163,"paritySummary":{"errors":13,"warns":13,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/09246637fa63ac55aa518718fd1eb4b876960480.zip","coverURL":"https://cdn.beatsaver.com/09246637fa63ac55aa518718fd1eb4b876960480.jpg","previewURL":"https://cdn.beatsaver.com/09246637fa63ac55aa518718fd1eb4b876960480.mp3"}],"createdAt":"2021-06-25T17:47:40.296Z","updatedAt":"2021-06-25T17:47:40.296Z","lastPublishedAt":"2021-06-25T17:47:40.296Z"},{"id":"860","name":"Wake Me Up When September Ends - Green Day","description":"Expert - Hard - Normal Charts\nCustom Lighting\nhttps://www.youtube.com/watch?v=QPiD-n4W6s0\n\nhttps://twitter.com/TheDownyCat\nhttps://www.twitch.tv/downycat\nhttps://streamlabs.com/downycat/tip","uploader":{"id":4285982,"name":"downycat","uniqueSet":true,"hash":"5cff0b7398cc5a672c84ede5","avatar":"https://cdn.beatsaver.com/avatar/173538829888782336.png","type":"DISCORD"},"metadata":{"bpm":105.0,"duration":271,"songName":"Wake Me Up When September Ends","songSubName":"Green Day","songAuthorName":"DownyCat","levelAuthorName":"downycat"},"stats":{"plays":0,"downloads":11787,"upvotes":3264,"downvotes":64,"score":0.9389},"uploaded":"2018-07-07T14:38:17Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"d0457c1dee4a78f5496c3b282f8b834ec45f75a8","key":"860","state":"Published","createdAt":"2018-07-07T14:38:17Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":461,"bombs":34,"obstacles":97,"nps":1.801,"length":448.0,"characteristic":"Standard","difficulty":"Normal","events":1579,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":256.0,"paritySummary":{"errors":59,"warns":13,"resets":2},"stars":0.95},{"njs":10.0,"offset":0.0,"notes":862,"bombs":0,"obstacles":85,"nps":3.367,"length":448.0,"characteristic":"Standard","difficulty":"Hard","events":1579,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":256.0,"paritySummary":{"errors":52,"warns":1,"resets":0}},{"njs":10.0,"offset":0.0,"notes":1179,"bombs":0,"obstacles":86,"nps":4.605,"length":448.0,"characteristic":"Standard","difficulty":"Expert","events":1579,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":256.0,"paritySummary":{"errors":19,"warns":20,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/d0457c1dee4a78f5496c3b282f8b834ec45f75a8.zip","coverURL":"https://cdn.beatsaver.com/d0457c1dee4a78f5496c3b282f8b834ec45f75a8.jpg","previewURL":"https://cdn.beatsaver.com/d0457c1dee4a78f5496c3b282f8b834ec45f75a8.mp3"}],"createdAt":"2018-07-07T14:38:17Z","updatedAt":"2018-07-07T14:38:17Z","lastPublishedAt":"2018-07-07T14:38:17Z"},{"id":"3fc","name":"The White Stripes - Seven Nation Army","description":"UPDATED! @BlueASIS#4095 on Discord let me know what you think","uploader":{"id":52648,"name":"blueasis","uniqueSet":false,"hash":"5cff0b7298cc5a672c84eb5d","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84eb5d?d=retro","type":"SIMPLE"},"metadata":{"bpm":124.0,"duration":232,"songName":"Seven Nation Army","songSubName":"The White Stripes","songAuthorName":"BlueASIS","levelAuthorName":"blueasis"},"stats":{"plays":0,"downloads":20649,"upvotes":14458,"downvotes":530,"score":0.9389},"uploaded":"2018-06-06T18:51:03Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"0b0ad0f34b2d0687a9794bcf5019100fda06971e","key":"3fc","state":"Published","createdAt":"2018-06-06T18:51:03Z","sageScore":4,"diffs":[{"njs":10.0,"offset":0.0,"notes":399,"bombs":0,"obstacles":0,"nps":1.817,"length":453.875,"characteristic":"Standard","difficulty":"Normal","events":812,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":219.617,"paritySummary":{"errors":90,"warns":6,"resets":0}},{"njs":10.0,"offset":0.0,"notes":496,"bombs":0,"obstacles":0,"nps":2.258,"length":453.875,"characteristic":"Standard","difficulty":"Hard","events":812,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":219.617,"paritySummary":{"errors":113,"warns":12,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/0b0ad0f34b2d0687a9794bcf5019100fda06971e.zip","coverURL":"https://cdn.beatsaver.com/0b0ad0f34b2d0687a9794bcf5019100fda06971e.jpg","previewURL":"https://cdn.beatsaver.com/0b0ad0f34b2d0687a9794bcf5019100fda06971e.mp3"}],"createdAt":"2018-06-06T18:51:03Z","updatedAt":"2018-06-06T18:51:03Z","lastPublishedAt":"2018-06-06T18:51:03Z"},{"id":"5925","name":"Hardware Store - \"Weird Al\" Yankovic","description":"Hardware Store is a song by \"Weird Al\" Yankovic. \"Hardware Store\", which, as the title suggests, is about a new neighborhood hardware store and the things that can be purchased therein. The song was originally supposed to be a style parody of another (unspecified) artist, but it eventually evolved into its own, original composition.\n\nThere's a rapid-fire list of 61 products that he sings at the bridge of the song so prepare for that :P","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":126.14,"duration":226,"songName":"Hardware Store","songSubName":"","songAuthorName":"\"Weird Al\" Yankovic","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":3028,"upvotes":1490,"downvotes":10,"score":0.9388},"uploaded":"2019-07-27T16:27:18.223Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"2c677458db9ca04a7d0b64f47b443661d0e487d8","key":"5925","state":"Published","createdAt":"2019-07-27T16:27:18.223Z","sageScore":6,"diffs":[{"njs":15.0,"offset":0.0,"notes":1223,"bombs":0,"obstacles":24,"nps":5.529,"length":465.063,"characteristic":"Standard","difficulty":"ExpertPlus","events":1571,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":221.213,"paritySummary":{"errors":45,"warns":36,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/2c677458db9ca04a7d0b64f47b443661d0e487d8.zip","coverURL":"https://cdn.beatsaver.com/2c677458db9ca04a7d0b64f47b443661d0e487d8.jpg","previewURL":"https://cdn.beatsaver.com/2c677458db9ca04a7d0b64f47b443661d0e487d8.mp3"}],"createdAt":"2019-07-27T16:27:18.223Z","updatedAt":"2019-07-27T16:27:18.223Z","lastPublishedAt":"2019-07-27T16:27:18.223Z"},{"id":"3e4","name":"I'll Make A Man Out Of You - Mulan","description":"Expert+/Expert/Hard/Normal all with Lighting Events\r\n114 BMP\r\nSee reddit for video of Expert+ (https://www.reddit.com/r/beatsaber/comments/8owz4t/ill_make_a_man_out_of_you_mulan_expert_video/?ref=share&ref_source=link)","uploader":{"id":52670,"name":"glacialdrift","uniqueSet":false,"hash":"5cff0b7398cc5a672c84f176","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f176?d=retro","type":"SIMPLE"},"metadata":{"bpm":114.0,"duration":202,"songName":"I'll Make A Man Out Of You","songSubName":"Mulan","songAuthorName":"Glacial Drift","levelAuthorName":"glacialdrift"},"stats":{"plays":0,"downloads":7958,"upvotes":4393,"downvotes":106,"score":0.9386},"uploaded":"2018-06-06T01:30:06Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"d8088b0ab3d9e5b3e62a2daf7cdc8204e0c67256","key":"3e4","state":"Published","createdAt":"2018-06-06T01:30:06Z","sageScore":3,"diffs":[{"njs":10.0,"offset":0.0,"notes":285,"bombs":0,"obstacles":2,"nps":1.47,"length":368.9,"characteristic":"Standard","difficulty":"Normal","events":898,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":194.158,"paritySummary":{"errors":109,"warns":26,"resets":0}},{"njs":10.0,"offset":0.0,"notes":449,"bombs":0,"obstacles":2,"nps":2.317,"length":368.9,"characteristic":"Standard","difficulty":"Hard","events":898,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":194.158,"paritySummary":{"errors":99,"warns":49,"resets":0}},{"njs":10.0,"offset":0.0,"notes":607,"bombs":0,"obstacles":2,"nps":3.132,"length":368.9,"characteristic":"Standard","difficulty":"Expert","events":1025,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":194.158,"paritySummary":{"errors":91,"warns":74,"resets":0}},{"njs":10.0,"offset":0.0,"notes":712,"bombs":0,"obstacles":2,"nps":3.674,"length":368.9,"characteristic":"Standard","difficulty":"ExpertPlus","events":1025,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":194.158,"paritySummary":{"errors":87,"warns":86,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/d8088b0ab3d9e5b3e62a2daf7cdc8204e0c67256.zip","coverURL":"https://cdn.beatsaver.com/d8088b0ab3d9e5b3e62a2daf7cdc8204e0c67256.jpg","previewURL":"https://cdn.beatsaver.com/d8088b0ab3d9e5b3e62a2daf7cdc8204e0c67256.mp3"}],"createdAt":"2018-06-06T01:30:06Z","updatedAt":"2018-06-06T01:30:06Z","lastPublishedAt":"2018-06-06T01:30:06Z"},{"id":"11cf8","name":"Up & Down","description":"I had fun. Liked the song.\nThis map uses Noodle Extensions by the way.\nAlso, please disable any custom note models you might have, and don’t use the BTS environment.\n\nMap video: https://youtu.be/vueyLFN6Azg\n\n-= NOT MY AUDIO =-\n\nOriginal: https://youtu.be/oJa7Kr7_9dw\n\nNotes: 522\nNPS: 3.18\nNJS: 17\nBPM: 138\nBombs: 0\nWalls: 8\nLights: 2,790\nErrors: 5\n\nThanks to:\n@JohnnyDee\n@DefDoof\nfor testing!\n\nThis map does not work for the Quest/Quest 2","uploader":{"id":4284638,"name":"thegoodboi","uniqueSet":true,"hash":"5cff0b7698cc5a672c85433c","avatar":"https://cdn.beatsaver.com/avatar/515025828736794654.png","type":"DISCORD"},"metadata":{"bpm":138.0,"duration":164,"songName":"Up & Down","songSubName":"","songAuthorName":"Marnik","levelAuthorName":"The Good Boi"},"stats":{"plays":0,"downloads":12995,"upvotes":5828,"downvotes":162,"score":0.9385},"uploaded":"2020-12-20T21:25:04.106Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"2aa85aad10e124eb674d18d49251bc94ee1a4283","key":"11cf8","state":"Published","createdAt":"2020-12-20T21:25:04.106Z","sageScore":7,"diffs":[{"njs":17.0,"offset":0.0,"notes":535,"bombs":0,"obstacles":8,"nps":3.418,"length":360.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":2790,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":156.522,"paritySummary":{"errors":27,"warns":14,"resets":0}},{"njs":17.0,"offset":0.0,"notes":535,"bombs":0,"obstacles":8,"nps":3.418,"length":360.0,"characteristic":"Lawless","difficulty":"ExpertPlus","events":2790,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":156.522,"paritySummary":{"errors":26,"warns":13,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/2aa85aad10e124eb674d18d49251bc94ee1a4283.zip","coverURL":"https://cdn.beatsaver.com/2aa85aad10e124eb674d18d49251bc94ee1a4283.jpg","previewURL":"https://cdn.beatsaver.com/2aa85aad10e124eb674d18d49251bc94ee1a4283.mp3"}],"createdAt":"2020-12-20T21:25:04.106Z","updatedAt":"2020-12-20T21:25:04.106Z","lastPublishedAt":"2020-12-20T21:25:04.106Z"},{"id":"47f3","name":"TWICE - FANCY","description":"Aggrogahu: Lights, Hard, and Normal.\r\n Here are his awesome maps that you should download: https://beatsaver.com/browse/byuser/5760\r\n\r\nKikae: Expert/Expert+","uploader":{"id":4285107,"name":"kikaeaeon","uniqueSet":true,"hash":"5cff0b7498cc5a672c85109b","avatar":"https://cdn.beatsaver.com/avatar/103715469822816256.png","type":"DISCORD"},"metadata":{"bpm":132.0,"duration":218,"songName":"FANCY","songSubName":"TWICE","songAuthorName":"KikaeAeon & Aggrogahu","levelAuthorName":"kikaeaeon"},"stats":{"plays":0,"downloads":11038,"upvotes":2829,"downvotes":52,"score":0.9381},"uploaded":"2019-04-23T09:46:04Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"c63d899018f131d3aed03816c5074350aaa700a7","key":"47f3","state":"Published","createdAt":"2019-04-23T09:46:04Z","sageScore":4,"diffs":[{"njs":9.0,"offset":0.0,"notes":380,"bombs":12,"obstacles":12,"nps":1.802,"length":464.0,"characteristic":"Standard","difficulty":"Normal","events":1003,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":210.909,"paritySummary":{"errors":41,"warns":61,"resets":18}},{"njs":10.0,"offset":0.0,"notes":587,"bombs":6,"obstacles":14,"nps":2.777,"length":465.0,"characteristic":"Standard","difficulty":"Hard","events":972,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":211.364,"paritySummary":{"errors":54,"warns":54,"resets":3}},{"njs":12.0,"offset":0.0,"notes":817,"bombs":0,"obstacles":5,"nps":3.865,"length":465.0,"characteristic":"Standard","difficulty":"Expert","events":1001,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":211.364,"paritySummary":{"errors":11,"warns":1,"resets":0}},{"njs":15.0,"offset":0.0,"notes":1048,"bombs":0,"obstacles":5,"nps":4.958,"length":465.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":1003,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":211.364,"paritySummary":{"errors":12,"warns":14,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/c63d899018f131d3aed03816c5074350aaa700a7.zip","coverURL":"https://cdn.beatsaver.com/c63d899018f131d3aed03816c5074350aaa700a7.jpg","previewURL":"https://cdn.beatsaver.com/c63d899018f131d3aed03816c5074350aaa700a7.mp3"}],"createdAt":"2019-04-23T09:46:04Z","updatedAt":"2019-04-23T09:46:04Z","lastPublishedAt":"2019-04-23T09:46:04Z"},{"id":"1421c","name":"Look At The Sky - Porter Robinson","description":"MAKE SURE TO HAVE BLOOM POST PROCESS ON AND SCREEN DISTORTION EFFECTS ON!!!!\n\n\nThis was super fun to work on! And its finally out! Please enjoy!\nPlease make sure to have noodle extensions and chroma,\nSpecial thanks to MakeUMove, and Dack!\n\nIf you cant play it, heres the video! https://youtu.be/VWSubdP0WcQ","uploader":{"id":4235136,"name":"reaxt","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e8ab","avatar":"https://cdn.beatsaver.com/avatar/163052863038291970.png","type":"DISCORD"},"metadata":{"bpm":115.0,"duration":164,"songName":"look at the sky","songSubName":"","songAuthorName":"porter robinson","levelAuthorName":"Reaxt & CyanSnow"},"stats":{"plays":0,"downloads":5472,"upvotes":1623,"downvotes":15,"score":0.938},"uploaded":"2021-02-16T19:10:35.911Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"825dbd980eadceaba54c8e9d8e68f93a1b4cb029","key":"1421c","state":"Published","createdAt":"2021-02-16T19:10:35.911Z","sageScore":2,"diffs":[{"njs":14.0,"offset":0.0,"notes":505,"bombs":0,"obstacles":5343,"nps":3.552,"length":272.5,"characteristic":"Lawless","difficulty":"ExpertPlus","events":1247,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":142.174,"paritySummary":{"errors":2,"warns":1,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/825dbd980eadceaba54c8e9d8e68f93a1b4cb029.zip","coverURL":"https://cdn.beatsaver.com/825dbd980eadceaba54c8e9d8e68f93a1b4cb029.jpg","previewURL":"https://cdn.beatsaver.com/825dbd980eadceaba54c8e9d8e68f93a1b4cb029.mp3"}],"createdAt":"2021-02-16T19:10:35.911Z","updatedAt":"2021-02-16T19:10:35.911Z","lastPublishedAt":"2021-02-16T19:10:35.911Z"},{"id":"2da4","name":"Ghosts n Stuff (feat. Rob Swire) - deadmau5","description":"128 BPM / 3:17 Runtime\r\nEasy / 208 Notes\r\nNormal / 345 Notes\r\nHard / 458 Notes\r\nExpert / 595 Notes\r\n\r\nThis one comes with custom colors similar to the KDA Popstars OST track.\r\n\r\nGameplay:\r\nhttps://youtu.be/vxqyTGuO910","uploader":{"id":4284981,"name":"skylerwallace","uniqueSet":true,"hash":"5cff0b7298cc5a672c84ea67","avatar":"https://cdn.beatsaver.com/avatar/398344856868487168.png","type":"DISCORD"},"metadata":{"bpm":128.0,"duration":197,"songName":"Ghosts n Stuff (feat. Rob Swire)","songSubName":"deadmau5","songAuthorName":"Skyler Wallace","levelAuthorName":"skylerwallace"},"stats":{"plays":0,"downloads":13432,"upvotes":6655,"downvotes":199,"score":0.938},"uploaded":"2019-01-14T13:48:11Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"712ee0801ae2e65e4cd7ea5377bcf272981b57c6","key":"2da4","state":"Published","createdAt":"2019-01-14T13:48:11Z","sageScore":6,"diffs":[{"njs":10.0,"offset":1.0,"notes":208,"bombs":0,"obstacles":16,"nps":1.072,"length":414.0,"characteristic":"Standard","difficulty":"Easy","events":1827,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":194.063,"paritySummary":{"errors":46,"warns":21,"resets":0}},{"njs":10.0,"offset":1.0,"notes":345,"bombs":0,"obstacles":19,"nps":1.773,"length":415.0,"characteristic":"Standard","difficulty":"Normal","events":1827,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":194.531,"paritySummary":{"errors":37,"warns":12,"resets":0}},{"njs":12.0,"offset":1.0,"notes":458,"bombs":0,"obstacles":15,"nps":2.352,"length":415.5,"characteristic":"Standard","difficulty":"Hard","events":1827,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":194.766,"paritySummary":{"errors":32,"warns":19,"resets":0}},{"njs":14.0,"offset":0.0,"notes":595,"bombs":22,"obstacles":29,"nps":3.055,"length":415.5,"characteristic":"Standard","difficulty":"Expert","events":1827,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":194.766,"paritySummary":{"errors":41,"warns":34,"resets":1}}],"downloadURL":"https://cdn.beatsaver.com/712ee0801ae2e65e4cd7ea5377bcf272981b57c6.zip","coverURL":"https://cdn.beatsaver.com/712ee0801ae2e65e4cd7ea5377bcf272981b57c6.jpg","previewURL":"https://cdn.beatsaver.com/712ee0801ae2e65e4cd7ea5377bcf272981b57c6.mp3"}],"createdAt":"2019-01-14T13:48:11Z","updatedAt":"2019-01-14T13:48:11Z","lastPublishedAt":"2019-01-14T13:48:11Z"},{"id":"49fc","name":"You Give Love A Bad Name - Bon Jovi","description":"Another classic from Bon Jovi :D This one has more beats than it’s my life so it's slightly harder too. Thus the expert difficulty, but it's still on the easy side of expert. Also Gotta love 80s songs lol, no computer mastering means BPM was inconsistent and there are over 20 bpm changes lol","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":123.0,"duration":220,"songName":"You Give Love A Bad Name","songSubName":"Bon Jovi","songAuthorName":"Joetastic","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":8360,"upvotes":2027,"downvotes":27,"score":0.9379},"uploaded":"2019-05-02T18:03:13Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"9465922b3962dca2b4c6d3b312fe61bec255c1e4","key":"49fc","state":"Published","createdAt":"2019-05-02T18:03:13Z","sageScore":6,"diffs":[{"njs":13.0,"offset":0.0,"notes":731,"bombs":2,"obstacles":3,"nps":3.551,"length":422.0,"characteristic":"Standard","difficulty":"Expert","events":2246,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":205.854,"paritySummary":{"errors":28,"warns":38,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/9465922b3962dca2b4c6d3b312fe61bec255c1e4.zip","coverURL":"https://cdn.beatsaver.com/9465922b3962dca2b4c6d3b312fe61bec255c1e4.jpg","previewURL":"https://cdn.beatsaver.com/9465922b3962dca2b4c6d3b312fe61bec255c1e4.mp3"}],"createdAt":"2019-05-02T18:03:13Z","updatedAt":"2019-05-02T18:03:13Z","lastPublishedAt":"2019-05-02T18:03:13Z"},{"id":"b514","name":"[[Wall Show + Chroma]] GAS GAS GAS | Manuel","description":"This wall map is a bit more intense than my others, you will need a very hefty pc to run and record this. Have Fun!\n\nHere's a playthrough: https://www.youtube.com/watch?v=hlS6r-Usnro\nHere's a playthrough by Nico (HQ Version): https://youtu.be/F_3qRxDdQc0\n\nREQUIREMENTS: \n -Noodle Extensions\n -Chroma/ChromaLite\n(fixed formatting + removed stupid metadata ;)","uploader":{"id":73008,"name":"thelightdesigner","uniqueSet":true,"hash":"5cff0b7798cc5a672c85627a","avatar":"https://cdn.beatsaver.com/avatar/480555157952659489.png","type":"DISCORD"},"metadata":{"bpm":154.0,"duration":108,"songName":"GAS GAS GAS","songSubName":"(Short Ver.)","songAuthorName":"Manuel","levelAuthorName":"KyleT"},"stats":{"plays":0,"downloads":9291,"upvotes":2453,"downvotes":41,"score":0.9377},"uploaded":"2020-06-22T20:02:06.271Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"95e11f39b2898a38e3b5e61d2156ef5f5835f40f","key":"b514","state":"Published","createdAt":"2020-06-22T20:02:06.271Z","sageScore":3,"diffs":[{"njs":16.5,"offset":0.0,"notes":390,"bombs":13,"obstacles":13898,"nps":3.832,"length":261.25,"characteristic":"Standard","difficulty":"Expert","events":1462,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":101.786,"paritySummary":{"errors":0,"warns":0,"resets":2}}],"downloadURL":"https://cdn.beatsaver.com/95e11f39b2898a38e3b5e61d2156ef5f5835f40f.zip","coverURL":"https://cdn.beatsaver.com/95e11f39b2898a38e3b5e61d2156ef5f5835f40f.jpg","previewURL":"https://cdn.beatsaver.com/95e11f39b2898a38e3b5e61d2156ef5f5835f40f.mp3"}],"createdAt":"2020-06-22T20:02:06.271Z","updatedAt":"2020-06-22T20:02:06.271Z","lastPublishedAt":"2020-06-22T20:02:06.271Z"},{"id":"774e","name":"Sad Machine - Porter Robinson","description":"77","uploader":{"id":4285521,"name":"ejiejidayo","uniqueSet":true,"hash":"5cff0b7398cc5a672c84fc58","avatar":"https://cdn.beatsaver.com/avatar/224894241279574016.png","type":"DISCORD"},"metadata":{"bpm":89.0,"duration":257,"songName":"Sad Machine","songSubName":"","songAuthorName":"Porter Robinson","levelAuthorName":"ejiejidayo"},"stats":{"plays":0,"downloads":7096,"upvotes":2724,"downvotes":50,"score":0.9377},"uploaded":"2019-12-18T21:56:31.549Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"7f6ab5de98ac1970e734ea6e26a539fa11cc4f66","key":"774e","state":"Published","createdAt":"2019-12-18T21:56:31.549Z","sageScore":4,"diffs":[{"njs":10.0,"offset":-0.4,"notes":647,"bombs":0,"obstacles":237,"nps":2.583,"length":369.5,"characteristic":"Standard","difficulty":"Hard","events":1973,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":249.101,"paritySummary":{"errors":1,"warns":2,"resets":0}},{"njs":12.0,"offset":-0.6,"notes":1025,"bombs":0,"obstacles":237,"nps":4.092,"length":369.5,"characteristic":"Standard","difficulty":"Expert","events":1973,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":249.101,"paritySummary":{"errors":22,"warns":20,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/7f6ab5de98ac1970e734ea6e26a539fa11cc4f66.zip","coverURL":"https://cdn.beatsaver.com/7f6ab5de98ac1970e734ea6e26a539fa11cc4f66.jpg","previewURL":"https://cdn.beatsaver.com/7f6ab5de98ac1970e734ea6e26a539fa11cc4f66.mp3"}],"createdAt":"2019-12-18T21:56:31.549Z","updatedAt":"2019-12-18T21:56:31.549Z","lastPublishedAt":"2019-12-18T21:56:31.549Z"},{"id":"1fe5","name":"I Just Can't Wait To Be King - Lion King OST - 100k Contest","description":"Unleash your inner beast with the song \"I Just Can't Wait to be King\" from the official Lion King Soundtrack! This map has difficulties from Easy to Expert, for everyone to enjoy! \r\nThis is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes. Go to https://bsaber.com/100k-contest/ to register!\r\n\r\nPreview: https://youtu.be/YDAkqZR9Hs0","uploader":{"id":47059,"name":"rocket","uniqueSet":true,"hash":"5cff0b7398cc5a672c84f1c0","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f1c0?d=retro","type":"SIMPLE"},"metadata":{"bpm":99.0,"duration":168,"songName":"I Just Can't Wait To Be King","songSubName":"Rowan Atkinson, Jason Weaver, Laura Williams","songAuthorName":"Rocket","levelAuthorName":"rocket"},"stats":{"plays":0,"downloads":11682,"upvotes":3499,"downvotes":77,"score":0.9377},"uploaded":"2018-11-12T16:50:07Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"1a3237630cd17aaa2af3f728621dcfdcce38edf1","key":"1fe5","state":"Published","createdAt":"2018-11-12T16:50:07Z","sageScore":5,"diffs":[{"njs":11.0,"offset":0.0,"notes":144,"bombs":0,"obstacles":16,"nps":0.91,"length":261.0,"characteristic":"Standard","difficulty":"Easy","events":466,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":158.182,"paritySummary":{"errors":44,"warns":9,"resets":0}},{"njs":11.0,"offset":0.0,"notes":309,"bombs":0,"obstacles":16,"nps":1.953,"length":261.0,"characteristic":"Standard","difficulty":"Normal","events":466,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":158.182,"paritySummary":{"errors":33,"warns":18,"resets":0}},{"njs":11.0,"offset":0.0,"notes":452,"bombs":0,"obstacles":20,"nps":2.857,"length":261.0,"characteristic":"Standard","difficulty":"Hard","events":466,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":158.182,"paritySummary":{"errors":46,"warns":56,"resets":0}},{"njs":11.0,"offset":0.0,"notes":512,"bombs":0,"obstacles":20,"nps":3.237,"length":261.0,"characteristic":"Standard","difficulty":"Expert","events":466,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":158.182,"paritySummary":{"errors":52,"warns":70,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/1a3237630cd17aaa2af3f728621dcfdcce38edf1.zip","coverURL":"https://cdn.beatsaver.com/1a3237630cd17aaa2af3f728621dcfdcce38edf1.jpg","previewURL":"https://cdn.beatsaver.com/1a3237630cd17aaa2af3f728621dcfdcce38edf1.mp3"}],"createdAt":"2018-11-12T16:50:07Z","updatedAt":"2018-11-12T16:50:07Z","lastPublishedAt":"2018-11-12T16:50:07Z"},{"id":"ae0e","name":"Alan Walker - Spectre","description":"\"Spectre\", Alan Walker's second most popular NoCopyrightSounds track.\r\nThis is a remap of my very first map. Since a lot of people still like this track and want a proper map of it in Beat Saber, I decided to remap this track following the latest mapping standards. \r\n\r\nEasy : NPS 1.23 | NJS 10\r\nNormal : NPS 2.00 | NJS 10\r\nHard : NPS 3.28 | NJS 13\r\nExpert : NPS 4.44 | NJS 16\r\nExpert+ : NPS 5.41 | NJS 19\r\n\r\nShowcase:\r\nhttps://www.youtube.com/watch?v=Xq7_-0HPThA\r\n\r\nShout out to the following play-testers who play-tested my map:\r\n*lapras\r\n*officialMECH\r\n*Escapee\r\n\r\nFeel free to make your own map for this track.\r\n\r\nOriginal map: https://beatsaver.com/beatmap/155a\r\n\r\nIf you enjoy my work and wish to donate, the option is here :)\r\nPaypal: https://www.paypal.me/WeldonWen","uploader":{"id":4286890,"name":"weldonwen","uniqueSet":true,"hash":"5cff0b7498cc5a672c850433","avatar":"https://cdn.beatsaver.com/avatar/571472512924254229.png","type":"DISCORD"},"metadata":{"bpm":128.0,"duration":231,"songName":"Spectre ","songSubName":"","songAuthorName":"Alan Walker","levelAuthorName":"WeldonWen"},"stats":{"plays":0,"downloads":11498,"upvotes":2715,"downvotes":50,"score":0.9376},"uploaded":"2020-06-03T23:05:28.787Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"3c6f02ecbef50e2019d5938871a8f3fcdb7b07a2","key":"ae0e","state":"Published","createdAt":"2020-06-03T23:05:28.787Z","sageScore":7,"diffs":[{"njs":10.0,"offset":1.04,"notes":285,"bombs":44,"obstacles":40,"nps":1.315,"length":462.5,"characteristic":"Standard","difficulty":"Easy","events":3884,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":216.797,"paritySummary":{"errors":81,"warns":36,"resets":0}},{"njs":10.0,"offset":0.99,"notes":464,"bombs":51,"obstacles":58,"nps":2.136,"length":463.5,"characteristic":"Standard","difficulty":"Normal","events":3884,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":217.266,"paritySummary":{"errors":70,"warns":10,"resets":0}},{"njs":13.0,"offset":0.259,"notes":760,"bombs":56,"obstacles":42,"nps":3.498,"length":463.5,"characteristic":"Standard","difficulty":"Hard","events":3883,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":217.266,"paritySummary":{"errors":2,"warns":6,"resets":0}},{"njs":16.0,"offset":-0.2,"notes":1029,"bombs":45,"obstacles":55,"nps":4.736,"length":463.5,"characteristic":"Standard","difficulty":"Expert","events":3885,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":217.266,"paritySummary":{"errors":2,"warns":0,"resets":2}},{"njs":19.0,"offset":-0.5,"notes":1255,"bombs":21,"obstacles":46,"nps":5.776,"length":463.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":3963,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":217.266,"paritySummary":{"errors":1,"warns":0,"resets":1}}],"downloadURL":"https://cdn.beatsaver.com/3c6f02ecbef50e2019d5938871a8f3fcdb7b07a2.zip","coverURL":"https://cdn.beatsaver.com/3c6f02ecbef50e2019d5938871a8f3fcdb7b07a2.jpg","previewURL":"https://cdn.beatsaver.com/3c6f02ecbef50e2019d5938871a8f3fcdb7b07a2.mp3"}],"createdAt":"2020-06-03T23:05:28.787Z","updatedAt":"2020-06-03T23:05:28.787Z","lastPublishedAt":"2020-06-03T23:05:28.787Z"},{"id":"7c05","name":"[Bloq Busters Vol. 2] The Sirens - Seven Lions & Jason Ross","description":"Part of Bloq Busters Vol 2 - Melodic Dubstep\r\n\r\nThis eerie but beautiful and powerful journey composed by Seven Lions and Jason Ross will take you on a trip!\r\n\r\nFeatures Chroma Lights and all difficulties from Normal to Expert++.","uploader":{"id":4284569,"name":"checkthepan","uniqueSet":true,"hash":"5cff0b7398cc5a672c84f3d5","avatar":"https://cdn.beatsaver.com/avatar/184355369189900290.png","type":"DISCORD"},"metadata":{"bpm":145.0,"duration":237,"songName":"The Sirens","songSubName":"","songAuthorName":"Seven Lions & Jason Ross","levelAuthorName":"Checkthepan"},"stats":{"plays":0,"downloads":7774,"upvotes":1475,"downvotes":12,"score":0.9374},"uploaded":"2020-01-03T22:46:03.484Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"0dadd6ab18e3ca0011459f16366e41ecffa5029e","key":"7c05","state":"Published","createdAt":"2020-01-03T22:46:03.484Z","sageScore":6,"diffs":[{"njs":10.0,"offset":0.0,"notes":383,"bombs":0,"obstacles":256,"nps":1.78,"length":520.0,"characteristic":"Standard","difficulty":"Easy","events":11028,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":215.172,"paritySummary":{"errors":73,"warns":6,"resets":0}},{"njs":13.0,"offset":0.0,"notes":624,"bombs":32,"obstacles":253,"nps":2.9,"length":520.0,"characteristic":"Standard","difficulty":"Normal","events":11028,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":215.172,"paritySummary":{"errors":1,"warns":0,"resets":0}},{"njs":15.0,"offset":0.0,"notes":927,"bombs":263,"obstacles":259,"nps":4.308,"length":520.0,"characteristic":"Standard","difficulty":"Hard","events":11028,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":215.172,"paritySummary":{"errors":3,"warns":0,"resets":7}},{"njs":17.0,"offset":0.0,"notes":1072,"bombs":47,"obstacles":256,"nps":4.982,"length":520.0,"characteristic":"Standard","difficulty":"Expert","events":11028,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":215.172,"paritySummary":{"errors":2,"warns":0,"resets":2}},{"njs":19.0,"offset":-0.25,"notes":1256,"bombs":134,"obstacles":257,"nps":5.837,"length":520.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":11097,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":215.172,"paritySummary":{"errors":2,"warns":2,"resets":4}},{"njs":19.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"Lightshow","difficulty":"Easy","events":11097,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/0dadd6ab18e3ca0011459f16366e41ecffa5029e.zip","coverURL":"https://cdn.beatsaver.com/0dadd6ab18e3ca0011459f16366e41ecffa5029e.jpg","previewURL":"https://cdn.beatsaver.com/0dadd6ab18e3ca0011459f16366e41ecffa5029e.mp3"}],"createdAt":"2020-01-03T22:46:03.484Z","updatedAt":"2020-01-03T22:46:03.484Z","lastPublishedAt":"2020-01-03T22:46:03.484Z"},{"id":"7b68","name":"First of the Year (Equinox) - Skrillex","description":"First of the Year (Equinox) - Skrillex\n\nThis is my first map of 2020, and a huge throwback to when I first started listening to Skrillex. As well as it being a collaboration between myself, Checkthepan, Haclyon12, and CyanSnow.\n\nThanks to Checkthepan for making the 360 & 90-degree levels, Halcyon12 for the awesome chroma lights and CyanSnow for getting the files release ready. \n\nalso was originally trying to be the first map uploaded for 2020 but beatsaver had a stroke and now it's like the 5th or something\n","uploader":{"id":4284904,"name":"xscaramouche","uniqueSet":true,"hash":"5cff0b7798cc5a672c8558ed","avatar":"https://cdn.beatsaver.com/avatar/227538798387527680.png","type":"DISCORD"},"metadata":{"bpm":145.0,"duration":257,"songName":"First of the Year","songSubName":"(Equinox)","songAuthorName":"Skrillex","levelAuthorName":"xScaramouche & Checkthepan & Halcyon12"},"stats":{"plays":0,"downloads":18265,"upvotes":4286,"downvotes":108,"score":0.9374},"uploaded":"2020-01-01T04:28:55.040Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"2feafef61cad57ea2d6608eb54c39f139abb48c1","key":"7b68","state":"Published","createdAt":"2020-01-01T04:28:55.040Z","sageScore":7,"diffs":[{"njs":12.0,"offset":1.0,"notes":387,"bombs":0,"obstacles":183,"nps":1.538,"length":608.0,"characteristic":"Standard","difficulty":"Easy","events":27335,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":251.586,"paritySummary":{"errors":183,"warns":0,"resets":0}},{"njs":12.0,"offset":1.0,"notes":476,"bombs":0,"obstacles":182,"nps":1.892,"length":607.998,"characteristic":"Standard","difficulty":"Normal","events":27335,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":251.585,"paritySummary":{"errors":124,"warns":0,"resets":0}},{"njs":14.0,"offset":0.5,"notes":658,"bombs":9,"obstacles":192,"nps":2.615,"length":608.0,"characteristic":"Standard","difficulty":"Hard","events":27335,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":251.586,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":16.0,"offset":0.0,"notes":1017,"bombs":9,"obstacles":180,"nps":4.042,"length":608.0,"characteristic":"Standard","difficulty":"Expert","events":27335,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":251.586,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":18.0,"offset":-0.35,"notes":1359,"bombs":39,"obstacles":186,"nps":5.402,"length":608.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":27335,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":251.586,"paritySummary":{"errors":1,"warns":0,"resets":0}},{"njs":17.0,"offset":0.0,"notes":1554,"bombs":232,"obstacles":45,"nps":6.177,"length":608.0,"characteristic":"90Degree","difficulty":"ExpertPlus","events":27854,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":251.586,"paritySummary":{"errors":21,"warns":0,"resets":15}},{"njs":17.0,"offset":0.0,"notes":1555,"bombs":232,"obstacles":44,"nps":6.181,"length":608.0,"characteristic":"360Degree","difficulty":"ExpertPlus","events":27904,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":251.586,"paritySummary":{"errors":20,"warns":0,"resets":15}},{"njs":69.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"Lightshow","difficulty":"Easy","events":27335,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/2feafef61cad57ea2d6608eb54c39f139abb48c1.zip","coverURL":"https://cdn.beatsaver.com/2feafef61cad57ea2d6608eb54c39f139abb48c1.jpg","previewURL":"https://cdn.beatsaver.com/2feafef61cad57ea2d6608eb54c39f139abb48c1.mp3"}],"createdAt":"2020-01-01T04:28:55.040Z","updatedAt":"2020-01-01T04:28:55.040Z","lastPublishedAt":"2020-01-01T04:28:55.040Z"},{"id":"480","name":"Earth, Wind & Fire - September","description":"Expert | Hard | Normal\r\n\r\nBPM - 126\r\nDuration - 2:21\r\n\r\nPreview: https://youtu.be/FOob1xit17Y","uploader":{"id":45732,"name":"calijor","uniqueSet":false,"hash":"5cff0b7298cc5a672c84ebb1","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ebb1?d=retro","type":"SIMPLE"},"metadata":{"bpm":126.0,"duration":142,"songName":"September","songSubName":"","songAuthorName":"Earth, Wind & Fire","levelAuthorName":"calijor"},"stats":{"plays":0,"downloads":18722,"upvotes":10791,"downvotes":385,"score":0.9374},"uploaded":"2018-06-09T18:27:58Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"aa2f7bf0df25cd57dddac159fa7c159f732e0553","key":"480","state":"Published","createdAt":"2018-06-09T18:27:58Z","sageScore":4,"diffs":[{"njs":10.0,"offset":0.0,"notes":291,"bombs":0,"obstacles":8,"nps":2.171,"length":281.469,"characteristic":"Standard","difficulty":"Normal","events":832,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":134.033,"paritySummary":{"errors":61,"warns":39,"resets":0}},{"njs":10.0,"offset":0.0,"notes":367,"bombs":0,"obstacles":8,"nps":2.738,"length":281.469,"characteristic":"Standard","difficulty":"Hard","events":832,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":134.033,"paritySummary":{"errors":67,"warns":65,"resets":0}},{"njs":10.0,"offset":0.0,"notes":409,"bombs":0,"obstacles":8,"nps":3.051,"length":281.469,"characteristic":"Standard","difficulty":"Expert","events":832,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":134.033,"paritySummary":{"errors":75,"warns":73,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/aa2f7bf0df25cd57dddac159fa7c159f732e0553.zip","coverURL":"https://cdn.beatsaver.com/aa2f7bf0df25cd57dddac159fa7c159f732e0553.jpg","previewURL":"https://cdn.beatsaver.com/aa2f7bf0df25cd57dddac159fa7c159f732e0553.mp3"}],"createdAt":"2018-06-09T18:27:58Z","updatedAt":"2018-06-09T18:27:58Z","lastPublishedAt":"2018-06-09T18:27:58Z"},{"id":"1181f","name":"Royal & the Serpent - Overwhelmed","description":"Feeling that finals crunch? Worried about the pandemic? General anxiety with the news, and just feeling overwhelmed? Don't forget to take a step back and take a breath. Maybe by dancing along to this song that perfectly captures all of those feelings! Complete with overwhelming Chroma 2.0 lights! And now the extra details:\n\nBPM: 87\nNPS: Ez - 1.71; N - 2.09; H - 2.75; Ex - 3.19; Ex+ - 4.11\nNotes: Ez - 277; N - 338; H - 444; Ex - 516; Ex+ - 664\nBombs: Ez - 0; N - 0; H - 4; Ex - 4; Ex+ - 4\nWalls: Ez - 136; N - 134; H - 144; Ex - 109; Ex+ - 109\n\nSpecial thanks to qwasyx, Smay, and Cyrix for playtesting!","uploader":{"id":4285188,"name":"fruhead","uniqueSet":true,"hash":"5cff0b7598cc5a672c852683","avatar":"https://cdn.beatsaver.com/avatar/174000100413145090.png","type":"DISCORD"},"metadata":{"bpm":87.0,"duration":161,"songName":"Overwhelmed","songSubName":"","songAuthorName":"Royal & the Serpent","levelAuthorName":"fruhead"},"stats":{"plays":0,"downloads":8427,"upvotes":1704,"downvotes":19,"score":0.9371},"uploaded":"2020-11-29T23:09:47.309Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"b748894960a346f1568b9f4876643f1358cfa897","key":"1181f","state":"Published","createdAt":"2020-11-29T23:09:47.309Z","sageScore":6,"diffs":[{"njs":10.0,"offset":0.0,"notes":277,"bombs":0,"obstacles":136,"nps":1.793,"length":224.0,"characteristic":"Standard","difficulty":"Easy","events":7200,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":154.483,"paritySummary":{"errors":43,"warns":9,"resets":0}},{"njs":12.0,"offset":-0.3,"notes":338,"bombs":0,"obstacles":134,"nps":2.188,"length":224.0,"characteristic":"Standard","difficulty":"Normal","events":7200,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":154.483,"paritySummary":{"errors":22,"warns":11,"resets":0}},{"njs":14.0,"offset":0.4,"notes":444,"bombs":4,"obstacles":144,"nps":2.874,"length":224.0,"characteristic":"Standard","difficulty":"Hard","events":7200,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":154.483,"paritySummary":{"errors":14,"warns":4,"resets":4}},{"njs":16.0,"offset":0.25,"notes":516,"bombs":4,"obstacles":109,"nps":3.34,"length":224.0,"characteristic":"Standard","difficulty":"Expert","events":7200,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":154.483,"paritySummary":{"errors":0,"warns":0,"resets":2}},{"njs":18.0,"offset":0.1,"notes":664,"bombs":4,"obstacles":109,"nps":4.298,"length":224.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":7200,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":154.483,"paritySummary":{"errors":0,"warns":0,"resets":2}},{"njs":16.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"Lightshow","difficulty":"Expert","events":7200,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/b748894960a346f1568b9f4876643f1358cfa897.zip","coverURL":"https://cdn.beatsaver.com/b748894960a346f1568b9f4876643f1358cfa897.jpg","previewURL":"https://cdn.beatsaver.com/b748894960a346f1568b9f4876643f1358cfa897.mp3"}],"createdAt":"2020-11-29T23:09:47.309Z","updatedAt":"2020-11-29T23:09:47.309Z","lastPublishedAt":"2020-11-29T23:09:47.309Z"},{"id":"3b31","name":"Wolfgang Lohr ft. Maskarade - Hit the Road Jack (Electro Swing)","description":"I realise this is the third time that this song has been made over the last month, so sorry for that. But If your not a fan of my version then please check out the other maps linked below.\r\nThis song happened because someone requested I do an electroswing map. This was not the one they asked for, but his request inspired me to do one of the same genre anyway. I'm happy with the way that expert turned out, but the other difficulties are perhaps a bit rushed on this one. I've left easy out again as the play rates are so low. But If this is a problem for anyone, please give me a message and I'll see about adding one in. Other than that, happy dancing!\r\n\r\nVideo Preview: https://www.youtube.com/watch?v=sg_hCGmoPNg\r\nTime spent mapping: 7:58\r\n\r\nAlternative versions:\r\nFrom SilverScythePC: https://beatsaver.com/browse/detail/12538-13416\r\nFrom Salvay: https://beatsaver.com/browse/detail/12752-13664","uploader":{"id":4785,"name":"stumi","uniqueSet":false,"hash":"5cff0b7398cc5a672c84f720","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro","type":"SIMPLE"},"metadata":{"bpm":124.0,"duration":159,"songName":"Hit the Road Jack (Electro Swing)","songSubName":"Wolfgang Lohr and Maskerade","songAuthorName":"Stumi","levelAuthorName":"stumi"},"stats":{"plays":0,"downloads":7058,"upvotes":3315,"downvotes":73,"score":0.937},"uploaded":"2019-03-03T13:06:00Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"46afff5698b59795c5e88f0b610b8321fb9b1791","key":"3b31","state":"Published","createdAt":"2019-03-03T13:06:00Z","sageScore":6,"diffs":[{"njs":10.0,"offset":0.0,"notes":261,"bombs":4,"obstacles":38,"nps":1.702,"length":317.0,"characteristic":"Standard","difficulty":"Normal","events":1419,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":153.387,"paritySummary":{"errors":21,"warns":18,"resets":2}},{"njs":12.0,"offset":0.0,"notes":473,"bombs":7,"obstacles":33,"nps":3.084,"length":317.0,"characteristic":"Standard","difficulty":"Hard","events":1419,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":153.387,"paritySummary":{"errors":45,"warns":22,"resets":1}},{"njs":16.0,"offset":0.0,"notes":656,"bombs":7,"obstacles":32,"nps":4.267,"length":317.75,"characteristic":"Standard","difficulty":"Expert","events":1419,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":153.75,"paritySummary":{"errors":42,"warns":22,"resets":1}}],"downloadURL":"https://cdn.beatsaver.com/46afff5698b59795c5e88f0b610b8321fb9b1791.zip","coverURL":"https://cdn.beatsaver.com/46afff5698b59795c5e88f0b610b8321fb9b1791.jpg","previewURL":"https://cdn.beatsaver.com/46afff5698b59795c5e88f0b610b8321fb9b1791.mp3"}],"createdAt":"2019-03-03T13:06:00Z","updatedAt":"2019-03-03T13:06:00Z","lastPublishedAt":"2019-03-03T13:06:00Z"},{"id":"13e9","name":"dark cat - BUBBLE TEA","description":"--------------------------------\r\ndark cat - BUBBLE TEA (feat. juu & cinders)\r\nTime: 4:01\r\nExpert: 1087 Notes\r\nHard: 969 Notes\r\n--------------------------------\r\nHi guys, I'm a bit busy with school right now\r\nso my upload rate is going to slow down for a while..\r\n ^-^","uploader":{"id":4288141,"name":"roeek","uniqueSet":true,"hash":"5cff0b7398cc5a672c84f787","avatar":"https://cdn.beatsaver.com/avatar/321652344196694016.png","type":"DISCORD"},"metadata":{"bpm":160.0,"duration":241,"songName":"BUBBLE TEA","songSubName":"dark cat","songAuthorName":"Mapped by roeek","levelAuthorName":"roeek"},"stats":{"plays":0,"downloads":12107,"upvotes":8979,"downvotes":310,"score":0.9368},"uploaded":"2018-09-06T18:59:42Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"f83edec86d3faf683711ecb0a9df6bd65d2d0ce0","key":"13e9","state":"Published","createdAt":"2018-09-06T18:59:42Z","sageScore":6,"diffs":[{"njs":12.0,"offset":0.0,"notes":969,"bombs":0,"obstacles":12,"nps":4.303,"length":600.5,"characteristic":"Standard","difficulty":"Hard","events":1043,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":225.188,"paritySummary":{"errors":26,"warns":32,"resets":0}},{"njs":13.0,"offset":0.0,"notes":1087,"bombs":0,"obstacles":12,"nps":4.827,"length":600.5,"characteristic":"Standard","difficulty":"Expert","events":1047,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":225.188,"paritySummary":{"errors":35,"warns":36,"resets":0},"stars":3.65}],"downloadURL":"https://cdn.beatsaver.com/f83edec86d3faf683711ecb0a9df6bd65d2d0ce0.zip","coverURL":"https://cdn.beatsaver.com/f83edec86d3faf683711ecb0a9df6bd65d2d0ce0.jpg","previewURL":"https://cdn.beatsaver.com/f83edec86d3faf683711ecb0a9df6bd65d2d0ce0.mp3"}],"createdAt":"2018-09-06T18:59:42Z","updatedAt":"2018-09-06T18:59:42Z","lastPublishedAt":"2018-09-06T18:59:42Z"},{"id":"46be","name":"Kill This Love - BLACKPINK","description":"Thanks to n3tman, snaccy, Helen Carnate, PandaCat, and SimplyMarvelous for their help.\n\nAfter a thousand years, BLACKPINK has finally come out with new songs. Hopefully this map will absolve me from what I did with my last BLACKPINK map (though I still snuck in some choreography to this map when it fit).\n\nExpert+ preview: https://youtu.be/7_epIbqHD3U (footage is of pre-release version)\n\nPreview video uses custom blackpink light sabers, which you can find in the kpop beat saber discord here\nhttps://discord.gg/c9uHGYP\nFollow me on Twitter u won't\nhttps://twitter.com/aggrogahu","uploader":{"id":4284613,"name":"aggrogahu","uniqueSet":true,"hash":"5cff0b7398cc5a672c84fdad","avatar":"https://cdn.beatsaver.com/avatar/158363872649150464.png","type":"DISCORD"},"metadata":{"bpm":132.0,"duration":188,"songName":"Kill This Love","songSubName":"BLACKPINK","songAuthorName":"aggrogahu","levelAuthorName":"aggrogahu"},"stats":{"plays":0,"downloads":15888,"upvotes":4507,"downvotes":120,"score":0.9367},"uploaded":"2019-04-18T03:00:19Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"8255fef3ce60e6a9ca404491b6d6fdfec158581e","key":"46be","state":"Published","createdAt":"2019-04-18T03:00:19Z","sageScore":3,"diffs":[{"njs":9.0,"offset":0.0,"notes":278,"bombs":13,"obstacles":15,"nps":1.529,"length":400.0,"characteristic":"Standard","difficulty":"Normal","events":1344,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":181.818,"paritySummary":{"errors":57,"warns":36,"resets":6}},{"njs":10.0,"offset":0.0,"notes":448,"bombs":11,"obstacles":18,"nps":2.464,"length":400.0,"characteristic":"Standard","difficulty":"Hard","events":1344,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":181.818,"paritySummary":{"errors":47,"warns":28,"resets":6}},{"njs":12.0,"offset":0.0,"notes":665,"bombs":26,"obstacles":19,"nps":3.658,"length":400.0,"characteristic":"Standard","difficulty":"Expert","events":1344,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":181.818,"paritySummary":{"errors":39,"warns":37,"resets":3}},{"njs":14.0,"offset":0.0,"notes":779,"bombs":36,"obstacles":19,"nps":4.285,"length":400.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":1344,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":181.818,"paritySummary":{"errors":55,"warns":56,"resets":7}}],"downloadURL":"https://cdn.beatsaver.com/8255fef3ce60e6a9ca404491b6d6fdfec158581e.zip","coverURL":"https://cdn.beatsaver.com/8255fef3ce60e6a9ca404491b6d6fdfec158581e.jpg","previewURL":"https://cdn.beatsaver.com/8255fef3ce60e6a9ca404491b6d6fdfec158581e.mp3"}],"createdAt":"2019-04-18T03:00:19Z","updatedAt":"2019-04-18T03:00:19Z","lastPublishedAt":"2019-04-18T03:00:19Z"},{"id":"ce0","name":"South Park - Kyle's Mom's a Bitch","description":"Preview:\r\nhttps://www.youtube.com/watch?v=OjHoHbbZYDE\r\n\r\nKyle's mom's a bitch, she's a big fat bitch\r\nShe's the biggest bitch in the whole wide world","uploader":{"id":4286278,"name":"ruckus","uniqueSet":true,"hash":"5cff0b7398cc5a672c84f1d8","avatar":"https://cdn.beatsaver.com/avatar/239082462083284992.png","type":"DISCORD"},"metadata":{"bpm":156.0,"duration":95,"songName":"Kyle's Mom's a Bitch","songSubName":"South Park","songAuthorName":"Ruckus","levelAuthorName":"ruckus"},"stats":{"plays":0,"downloads":6595,"upvotes":3276,"downvotes":73,"score":0.9367},"uploaded":"2018-07-30T23:36:18Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"7fda5a2459b48226cc7dbaedf9c31f5fd7aff488","key":"ce0","state":"Published","createdAt":"2018-07-30T23:36:18Z","sageScore":4,"diffs":[{"njs":12.0,"offset":0.0,"notes":474,"bombs":0,"obstacles":0,"nps":5.911,"length":208.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":655,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":80.192,"paritySummary":{"errors":42,"warns":23,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/7fda5a2459b48226cc7dbaedf9c31f5fd7aff488.zip","coverURL":"https://cdn.beatsaver.com/7fda5a2459b48226cc7dbaedf9c31f5fd7aff488.jpg","previewURL":"https://cdn.beatsaver.com/7fda5a2459b48226cc7dbaedf9c31f5fd7aff488.mp3"}],"createdAt":"2018-07-30T23:36:18Z","updatedAt":"2018-07-30T23:36:18Z","lastPublishedAt":"2018-07-30T23:36:18Z"},{"id":"a909","name":"[TheFatRat Pack] Time Lapse - TheFatRat","description":"Here it is! The unofficial \"TheFatRat\" Music Pack in Beat Saber - with all beatmaps being singlehandedly made by me!\n\nAll songs included in TheFatRat Music Pack:\nMonody (ft. Laura Brehm) \nUnity \nWindfall \nXenogenesis \nTime Lapse \n\nGet the full song pack here: https://bsaber.com/thefatrat-music-pack/\n(Or you should just be able to find all the other ones on my beatsaver profile as well. Heres a link to my profile: https://beatsaver.com/uploader/5d47d586c5301900060b2f6c)\n\nSongcore mod is recommended (for custom colours)\nPlays best on Origins Environment\n\nTime Lapse Stats:\nExpert+ - 782 Notes | 4.29 NPS\nExpert - 615 Notes | 3.37 NPS\n(One Saber) Expert - 496 Notes | 2.72 NPS\nHard - 493 Notes | 2.70 NPS\nNormal - 305 Notes | 1.67 NPS\nEasy - 180 Notes | 0.99 NPS\n\nRoughly 7-8 Hours of work\nGameplay: https://youtu.be/aYwKN3LnEZA\n\nObviously - A huge thanks to TheFatRat himself, for not only producing the songs in the first place (and allowing free access to use them for big and small content creators), but also being a huge inspiration to lots of artists out there and for making music that everyone can jam out to! We love you, TheFatRat!","uploader":{"id":4284197,"name":"timeweaver","uniqueSet":true,"hash":"5d47d586c5301900060b2f6c","avatar":"https://cdn.beatsaver.com/avatar/607399708121366529.png","type":"DISCORD"},"metadata":{"bpm":127.0,"duration":182,"songName":"Time Lapse","songSubName":"","songAuthorName":"TheFatRat","levelAuthorName":"Timeweaver"},"stats":{"plays":0,"downloads":8459,"upvotes":2334,"downvotes":40,"score":0.9366},"uploaded":"2020-05-22T13:28:32.918Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"a03cb0a107993be5cded1e91dc31e8a7b048f02a","key":"a909","state":"Published","createdAt":"2020-05-22T13:28:32.918Z","sageScore":6,"diffs":[{"njs":9.0,"offset":0.0,"notes":180,"bombs":0,"obstacles":33,"nps":1.035,"length":368.0,"characteristic":"Standard","difficulty":"Easy","events":3139,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":173.858,"paritySummary":{"errors":40,"warns":1,"resets":0}},{"njs":11.0,"offset":1.0,"notes":305,"bombs":0,"obstacles":41,"nps":1.735,"length":372.0,"characteristic":"Standard","difficulty":"Normal","events":3139,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":175.748,"paritySummary":{"errors":24,"warns":24,"resets":0}},{"njs":12.0,"offset":1.0,"notes":493,"bombs":0,"obstacles":36,"nps":2.783,"length":375.0,"characteristic":"Standard","difficulty":"Hard","events":3139,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":177.165,"paritySummary":{"errors":3,"warns":0,"resets":0}},{"njs":15.0,"offset":0.1,"notes":614,"bombs":1,"obstacles":67,"nps":3.429,"length":379.0,"characteristic":"Standard","difficulty":"Expert","events":3139,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":179.055,"paritySummary":{"errors":2,"warns":0,"resets":0}},{"njs":19.0,"offset":-0.4,"notes":782,"bombs":0,"obstacles":84,"nps":4.402,"length":376.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":3139,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":177.638,"paritySummary":{"errors":1,"warns":0,"resets":0}},{"njs":16.0,"offset":0.0,"notes":496,"bombs":0,"obstacles":119,"nps":2.792,"length":376.0,"characteristic":"OneSaber","difficulty":"Expert","events":3139,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":177.638,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/a03cb0a107993be5cded1e91dc31e8a7b048f02a.zip","coverURL":"https://cdn.beatsaver.com/a03cb0a107993be5cded1e91dc31e8a7b048f02a.jpg","previewURL":"https://cdn.beatsaver.com/a03cb0a107993be5cded1e91dc31e8a7b048f02a.mp3"}],"createdAt":"2020-05-22T13:28:32.918Z","updatedAt":"2020-05-22T13:28:32.918Z","lastPublishedAt":"2020-05-22T13:28:32.918Z"},{"id":"8d49","name":"Dreamcatcher - Scream","description":"Expert+ by noxn and simplymarvellous\nExpert and Lighting by aggrogahu\n\nMap preview by aggrogahu: https://www.youtube.com/watch?v=Yv908yUt9O0\n\nExtra thanks to simplymarvellous for fixing all of my sync issues and creating some pog patterns while he was at it! And special thanks to Bloodcloak for some great changes and ideas!\n\nThis was my first collab map. I've really enjoyed playing it and working with people to make a great finished product!\n\nJoin us in the KPOP Beat Saber discord here: https://discord.gg/c9uHGYP\n\nAnd finally, my survey link <3: https://forms.gle/8nJVPiriTWPx9irT6","uploader":{"id":4289789,"name":"noxn","uniqueSet":true,"hash":"5daab87cc216d40006bef803","avatar":"https://cdn.beatsaver.com/avatar/132315398287785985.png","type":"DISCORD"},"metadata":{"bpm":138.0,"duration":206,"songName":"Scream","songSubName":"","songAuthorName":"Dreamcatcher","levelAuthorName":"noxn; simplymarvellous; aggrogahu"},"stats":{"plays":0,"downloads":9907,"upvotes":1737,"downvotes":21,"score":0.9366},"uploaded":"2020-03-04T23:07:51.556Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"94e31eda51f8afd9e59c9895972b80775556cf6a","key":"8d49","state":"Published","createdAt":"2020-03-04T23:07:51.556Z","sageScore":5,"diffs":[{"njs":16.0,"offset":0.2,"notes":717,"bombs":48,"obstacles":36,"nps":3.616,"length":456.0,"characteristic":"Standard","difficulty":"Expert","events":2568,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":198.261,"paritySummary":{"errors":19,"warns":24,"resets":9}},{"njs":18.0,"offset":-0.5,"notes":1068,"bombs":52,"obstacles":47,"nps":5.387,"length":456.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":2568,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":198.261,"paritySummary":{"errors":11,"warns":15,"resets":2}}],"downloadURL":"https://cdn.beatsaver.com/94e31eda51f8afd9e59c9895972b80775556cf6a.zip","coverURL":"https://cdn.beatsaver.com/94e31eda51f8afd9e59c9895972b80775556cf6a.jpg","previewURL":"https://cdn.beatsaver.com/94e31eda51f8afd9e59c9895972b80775556cf6a.mp3"}],"createdAt":"2020-03-04T23:07:51.556Z","updatedAt":"2020-03-04T23:07:51.556Z","lastPublishedAt":"2020-03-04T23:07:51.556Z"},{"id":"129bf","name":"LeaF - Mope Mope(Noodle Extensions, Chroma)","description":"Preview:\nhttps://www.youtube.com/watch?v=p9U5Y2iFoRQ&t=11s\nWarnings:\n--Fast Flashing Images\n--Disturbing Contents\n--This Level is NOT for Children--\nRequirements:\nNoodle Extensions, Chroma\nLeft-Handed and Custom Notes will cause some bugs\nSome of the bombs are fake:)\nThank you Moe ChiaKi for testing the map OwO","uploader":{"id":4289114,"name":"waika","uniqueSet":true,"hash":"5cff0b7698cc5a672c85464f","avatar":"https://cdn.beatsaver.com/avatar/530663167244894220.png","type":"DISCORD"},"metadata":{"bpm":200.0,"duration":111,"songName":"Mope Mope","songSubName":"","songAuthorName":"LeaF","levelAuthorName":"waika"},"stats":{"plays":0,"downloads":9472,"upvotes":3722,"downvotes":90,"score":0.9366},"uploaded":"2021-01-12T07:11:32.915Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"6c9d463c1cf556246cf60bfaef75fc4f8ea3053f","key":"129bf","state":"Published","createdAt":"2021-01-12T07:11:32.915Z","sageScore":5,"diffs":[{"njs":16.0,"offset":2.0,"notes":968,"bombs":4092,"obstacles":303,"nps":9.089,"length":355.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":5812,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":106.5,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/6c9d463c1cf556246cf60bfaef75fc4f8ea3053f.zip","coverURL":"https://cdn.beatsaver.com/6c9d463c1cf556246cf60bfaef75fc4f8ea3053f.jpg","previewURL":"https://cdn.beatsaver.com/6c9d463c1cf556246cf60bfaef75fc4f8ea3053f.mp3"}],"createdAt":"2021-01-12T07:11:32.915Z","updatedAt":"2021-01-12T07:11:32.915Z","lastPublishedAt":"2021-01-12T07:11:32.915Z"},{"id":"12d9","name":"Snail's House - Pixel Galaxy","description":"Hard/Expert | BPM: 150 | Length: 3:46 | Notes: 493/787\r\n\r\nIt's a really nice song. Not much else to say\r\nA lot of manual lighting too :D\r\n\r\n10th Map.\r\n\r\nPreview:\r\nhttps://www.youtube.com/watch?v=5xvJlMob-ok\r\nSong:\r\nhttps://www.youtube.com/watch?v=3nlSDxvt6JU","uploader":{"id":4285825,"name":"fefeland","uniqueSet":true,"hash":"5cff0b7398cc5a672c84f3bb","avatar":"https://cdn.beatsaver.com/avatar/119360573191225344.png","type":"DISCORD"},"metadata":{"bpm":150.0,"duration":227,"songName":"Pixel Galaxy","songSubName":"Snail's House","songAuthorName":"FEFELAND","levelAuthorName":"fefeland"},"stats":{"plays":0,"downloads":6468,"upvotes":2912,"downvotes":60,"score":0.9366},"uploaded":"2018-08-31T22:56:17Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"848b35a0028465bc4d76fd3cafb5acc4b2c70d5a","key":"12d9","state":"Published","createdAt":"2018-08-31T22:56:17Z","sageScore":6,"diffs":[{"njs":9.0,"offset":0.0,"notes":493,"bombs":0,"obstacles":0,"nps":2.268,"length":543.5,"characteristic":"Standard","difficulty":"Hard","events":1741,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":217.4,"paritySummary":{"errors":47,"warns":20,"resets":0},"stars":1.49},{"njs":12.0,"offset":0.0,"notes":787,"bombs":0,"obstacles":0,"nps":3.62,"length":543.5,"characteristic":"Standard","difficulty":"Expert","events":1741,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":217.4,"paritySummary":{"errors":41,"warns":28,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/848b35a0028465bc4d76fd3cafb5acc4b2c70d5a.zip","coverURL":"https://cdn.beatsaver.com/848b35a0028465bc4d76fd3cafb5acc4b2c70d5a.jpg","previewURL":"https://cdn.beatsaver.com/848b35a0028465bc4d76fd3cafb5acc4b2c70d5a.mp3"}],"createdAt":"2018-08-31T22:56:17Z","updatedAt":"2018-08-31T22:56:17Z","lastPublishedAt":"2018-08-31T22:56:17Z"},{"id":"124","name":"Rasputin (Funk Overload)","description":"Hard\r\nBpm 147\r\nspeed up version of rasputin Original","uploader":{"id":48512,"name":"jobas","uniqueSet":false,"hash":"5cff0b7298cc5a672c84e9a2","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9a2?d=retro","type":"SIMPLE"},"metadata":{"bpm":149.0,"duration":239,"songName":"Rasputin (Funk Overload)","songSubName":"","songAuthorName":"Jobas","levelAuthorName":"jobas"},"stats":{"plays":0,"downloads":20546,"upvotes":20981,"downvotes":890,"score":0.9366},"uploaded":"2018-05-19T16:36:34Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"9a1d001995cc0a2014352aa7148cbcbf2e489d89","key":"124","state":"Published","createdAt":"2018-05-19T16:36:34Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":768,"bombs":0,"obstacles":154,"nps":3.329,"length":586.013,"characteristic":"Standard","difficulty":"Hard","events":1109,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":235.978,"paritySummary":{"errors":58,"warns":141,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/9a1d001995cc0a2014352aa7148cbcbf2e489d89.zip","coverURL":"https://cdn.beatsaver.com/9a1d001995cc0a2014352aa7148cbcbf2e489d89.jpg","previewURL":"https://cdn.beatsaver.com/9a1d001995cc0a2014352aa7148cbcbf2e489d89.mp3"}],"createdAt":"2018-05-19T16:36:34Z","updatedAt":"2018-05-19T16:36:34Z","lastPublishedAt":"2018-05-19T16:36:34Z"},{"id":"12ad1","name":"Minnesota - Colors (ft. Jackie Rain) | Chroma RGB","description":"Chroma 2.0 HIGHLY RECOMMENDED!\n\nHad this map sitting in my project folder for some months and finally got to finish it! \nIt features a Chroma RGB lightshow AND Rainbow notes, for the full COLOR experience :)\n\nPreview: https://www.youtube.com/watch?v=8Omzd7IdJt0","uploader":{"id":4284201,"name":"nitronikexe","uniqueSet":true,"hash":"5cff0b7798cc5a672c855d84","avatar":"https://cdn.beatsaver.com/avatar/428230049704181760.png","type":"DISCORD"},"metadata":{"bpm":140.0,"duration":202,"songName":"Colors","songSubName":"(ft. Jackie Rain)","songAuthorName":"Minnesota","levelAuthorName":"nitronik.exe"},"stats":{"plays":0,"downloads":3903,"upvotes":1230,"downvotes":7,"score":0.9364},"uploaded":"2021-01-13T15:55:44.846Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"03fcb98091e50600d9d777251d765c53384c2735","key":"12ad1","state":"Published","createdAt":"2021-01-13T15:55:44.846Z","sageScore":4,"diffs":[{"njs":13.0,"offset":0.5,"notes":395,"bombs":0,"obstacles":221,"nps":2.057,"length":448.0,"characteristic":"Standard","difficulty":"Hard","events":16569,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":192.0,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":16.0,"offset":0.0,"notes":601,"bombs":0,"obstacles":113,"nps":3.13,"length":448.0,"characteristic":"Standard","difficulty":"Expert","events":16569,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":192.0,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":19.0,"offset":-0.5,"notes":911,"bombs":0,"obstacles":120,"nps":4.745,"length":448.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":16569,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":192.0,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/03fcb98091e50600d9d777251d765c53384c2735.zip","coverURL":"https://cdn.beatsaver.com/03fcb98091e50600d9d777251d765c53384c2735.jpg","previewURL":"https://cdn.beatsaver.com/03fcb98091e50600d9d777251d765c53384c2735.mp3"}],"createdAt":"2021-01-13T15:55:44.846Z","updatedAt":"2021-01-13T15:55:44.846Z","lastPublishedAt":"2021-01-13T15:55:44.846Z"},{"id":"6094","name":"Legend - The Score","description":"https://www.youtube.com/watch?v=M5oxJRVwwCY","uploader":{"id":4285982,"name":"downycat","uniqueSet":true,"hash":"5cff0b7398cc5a672c84ede5","avatar":"https://cdn.beatsaver.com/avatar/173538829888782336.png","type":"DISCORD"},"metadata":{"bpm":82.0,"duration":190,"songName":"Legend","songSubName":"","songAuthorName":"The Score","levelAuthorName":"DownyCat"},"stats":{"plays":0,"downloads":5059,"upvotes":1752,"downvotes":22,"score":0.9363},"uploaded":"2019-09-01T13:23:40.596Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"f1c24c4b08a1126017ba8a96da4828d2d949f46b","key":"6094","state":"Published","createdAt":"2019-09-01T13:23:40.596Z","sageScore":6,"diffs":[{"njs":12.0,"offset":0.0,"notes":357,"bombs":0,"obstacles":37,"nps":2.006,"length":243.25,"characteristic":"Standard","difficulty":"Normal","events":3490,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":177.988,"paritySummary":{"errors":5,"warns":0,"resets":0}},{"njs":12.0,"offset":0.0,"notes":537,"bombs":0,"obstacles":47,"nps":3.017,"length":243.25,"characteristic":"Standard","difficulty":"Hard","events":3490,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":177.988,"paritySummary":{"errors":3,"warns":0,"resets":0}},{"njs":16.0,"offset":0.0,"notes":728,"bombs":0,"obstacles":42,"nps":4.09,"length":243.25,"characteristic":"Standard","difficulty":"Expert","events":3490,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":177.988,"paritySummary":{"errors":5,"warns":3,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/f1c24c4b08a1126017ba8a96da4828d2d949f46b.zip","coverURL":"https://cdn.beatsaver.com/f1c24c4b08a1126017ba8a96da4828d2d949f46b.jpg","previewURL":"https://cdn.beatsaver.com/f1c24c4b08a1126017ba8a96da4828d2d949f46b.mp3"}],"createdAt":"2019-09-01T13:23:40.596Z","updatedAt":"2019-09-01T13:23:40.596Z","lastPublishedAt":"2019-09-01T13:23:40.596Z"},{"id":"d4a5","name":"[FUTURE FUNK PACK] Shiawase No Monosashi (VANTAGE // Short Ver.)","description":"FUTURE FUNK MAP PACK\n2 songs uploaded everyday through August 10th - 14th!\n\n\"Shiawase No Monosashi\" is performed by Mariya Takeuchi. This version of the song is a short edit I made from VANTAGE //'s edit. The original length of the song is 5 minutes long\n\nPlease look forward to the upcoming maps!\n\nDM any feedback on Discord\nETAN#8341","uploader":{"id":4235140,"name":"etan","uniqueSet":true,"hash":"5cff0b7798cc5a672c855775","avatar":"https://cdn.beatsaver.com/avatar/136373107559497728.png","type":"DISCORD"},"metadata":{"bpm":128.0,"duration":171,"songName":"Shiawase No Monosashi","songSubName":"(VANTAGE // Short Ver.)","songAuthorName":"Mariya Takeuchi","levelAuthorName":"ETAN"},"stats":{"plays":0,"downloads":6944,"upvotes":1542,"downvotes":16,"score":0.9362},"uploaded":"2020-08-12T18:17:44.285Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"d7cb32f23041dec272de3da0ac141dd8f91478ca","key":"d4a5","state":"Published","createdAt":"2020-08-12T18:17:44.285Z","sageScore":7,"diffs":[{"njs":10.0,"offset":1.0,"notes":168,"bombs":16,"obstacles":1,"nps":1.029,"length":348.25,"characteristic":"Standard","difficulty":"Easy","events":7775,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":163.242,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":11.0,"offset":1.0,"notes":255,"bombs":16,"obstacles":1,"nps":1.562,"length":348.25,"characteristic":"Standard","difficulty":"Normal","events":7775,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":163.242,"paritySummary":{"errors":1,"warns":1,"resets":0}},{"njs":12.0,"offset":1.0,"notes":358,"bombs":16,"obstacles":1,"nps":2.193,"length":348.25,"characteristic":"Standard","difficulty":"Hard","events":7775,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":163.242,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":15.0,"offset":0.0,"notes":557,"bombs":16,"obstacles":1,"nps":3.335,"length":356.25,"characteristic":"Standard","difficulty":"Expert","events":7775,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":166.992,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":19.0,"offset":-0.5,"notes":778,"bombs":16,"obstacles":1,"nps":4.659,"length":356.25,"characteristic":"Standard","difficulty":"ExpertPlus","events":7775,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":166.992,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/d7cb32f23041dec272de3da0ac141dd8f91478ca.zip","coverURL":"https://cdn.beatsaver.com/d7cb32f23041dec272de3da0ac141dd8f91478ca.jpg","previewURL":"https://cdn.beatsaver.com/d7cb32f23041dec272de3da0ac141dd8f91478ca.mp3"}],"createdAt":"2020-08-12T18:17:44.285Z","updatedAt":"2020-08-12T18:17:44.285Z","lastPublishedAt":"2020-08-12T18:17:44.285Z"},{"id":"75a8","name":"Silhouette [Naruto Shippuden 16th Opening] - KANA-BOON","description":"This map was converted from one of my old maps.\n\nFeel free to DM me on discord @Joetastic#2501","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":183.0,"duration":127,"songName":"Silhouette (TV Size)","songSubName":"","songAuthorName":"KANA-BOON","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":10318,"upvotes":2707,"downvotes":54,"score":0.9362},"uploaded":"2019-12-11T07:31:02.566Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"ba8d44529d21da1128bc70034ee608b6e8a19a63","key":"75a8","state":"Published","createdAt":"2019-12-11T07:31:02.566Z","sageScore":4,"diffs":[{"njs":12.0,"offset":0.0,"notes":412,"bombs":0,"obstacles":0,"nps":3.383,"length":371.5,"characteristic":"Standard","difficulty":"Hard","events":2826,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":121.803,"paritySummary":{"errors":20,"warns":20,"resets":0}},{"njs":14.0,"offset":0.0,"notes":520,"bombs":0,"obstacles":0,"nps":4.269,"length":371.5,"characteristic":"Standard","difficulty":"Expert","events":2826,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":121.803,"paritySummary":{"errors":42,"warns":24,"resets":0}},{"njs":16.0,"offset":0.0,"notes":710,"bombs":0,"obstacles":0,"nps":5.829,"length":371.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":3013,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":121.803,"paritySummary":{"errors":51,"warns":65,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/ba8d44529d21da1128bc70034ee608b6e8a19a63.zip","coverURL":"https://cdn.beatsaver.com/ba8d44529d21da1128bc70034ee608b6e8a19a63.jpg","previewURL":"https://cdn.beatsaver.com/ba8d44529d21da1128bc70034ee608b6e8a19a63.mp3"}],"createdAt":"2019-12-11T07:31:02.566Z","updatedAt":"2019-12-11T07:31:02.566Z","lastPublishedAt":"2019-12-11T07:31:02.566Z"},{"id":"5e44","name":"Wolf In Sheep's Clothing - Set It Off","description":"“Wolf In Sheep’s Clothing” is a song by American pop punk band Set It Off. The song appears on their album Duality.","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":165.0,"duration":189,"songName":"Wolf In Sheep's Clothing","songSubName":"","songAuthorName":"Set It Off","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":3557,"upvotes":1766,"downvotes":23,"score":0.936},"uploaded":"2019-08-21T14:32:59.705Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"71498322889259738dfbd9fdae23fc94bc382793","key":"5e44","state":"Published","createdAt":"2019-08-21T14:32:59.705Z","sageScore":6,"diffs":[{"njs":15.0,"offset":0.0,"notes":710,"bombs":12,"obstacles":2,"nps":3.844,"length":508.0,"characteristic":"Standard","difficulty":"Expert","events":2219,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":184.727,"paritySummary":{"errors":45,"warns":50,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/71498322889259738dfbd9fdae23fc94bc382793.zip","coverURL":"https://cdn.beatsaver.com/71498322889259738dfbd9fdae23fc94bc382793.jpg","previewURL":"https://cdn.beatsaver.com/71498322889259738dfbd9fdae23fc94bc382793.mp3"}],"createdAt":"2019-08-21T14:32:59.705Z","updatedAt":"2019-08-21T14:32:59.705Z","lastPublishedAt":"2019-08-21T14:32:59.705Z"},{"id":"2db0","name":"RESISTER [Sword Art Online: Alicization 2nd Opening] - ASCA","description":"As requested by @Shoko84 & @Sotarks: RESISTER, the second opening to Sword Art Online: Alicization by ASCA!\r\n\r\n(Originally came in only expert plus but poor Sotarks couldn't do it so thank him for making me include an expert and hard xP)","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":183.0,"duration":226,"songName":"RESISTER","songSubName":"ASCA","songAuthorName":"Joetastic","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":6798,"upvotes":3257,"downvotes":75,"score":0.9359},"uploaded":"2019-01-14T18:07:01Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"eb52dc76edd0eeee542ca6d339127f88dce9a5f4","key":"2db0","state":"Published","createdAt":"2019-01-14T18:07:01Z","sageScore":6,"diffs":[{"njs":11.0,"offset":0.0,"notes":852,"bombs":0,"obstacles":45,"nps":3.85,"length":675.0,"characteristic":"Standard","difficulty":"Hard","events":4117,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":221.311,"paritySummary":{"errors":39,"warns":22,"resets":0}},{"njs":13.0,"offset":0.0,"notes":970,"bombs":0,"obstacles":45,"nps":4.383,"length":675.0,"characteristic":"Standard","difficulty":"Expert","events":4117,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":221.311,"paritySummary":{"errors":47,"warns":56,"resets":0}},{"njs":15.0,"offset":0.0,"notes":1162,"bombs":0,"obstacles":51,"nps":5.251,"length":675.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":4117,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":221.311,"paritySummary":{"errors":36,"warns":43,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/eb52dc76edd0eeee542ca6d339127f88dce9a5f4.zip","coverURL":"https://cdn.beatsaver.com/eb52dc76edd0eeee542ca6d339127f88dce9a5f4.jpg","previewURL":"https://cdn.beatsaver.com/eb52dc76edd0eeee542ca6d339127f88dce9a5f4.mp3"}],"createdAt":"2019-01-14T18:07:01Z","updatedAt":"2019-01-14T18:07:01Z","lastPublishedAt":"2019-01-14T18:07:01Z"},{"id":"2475","name":"Bring It On - Giga-P","description":"Probably Giga-P's most famous song, Bring It On / 劣等上等 (Rettou Joutou / Inferiority Superiority), made for the 10th anniversary of the Vocaloids Rin and Len. This song has quickly entered the Hall of Fame and rightly so as it is one of everyone's (or at least, mine) favorite Vocaloid songs. because of that I knew I had to make a good map out of it. I had a lot of fun making this one and I hope it shows!\r\n\r\nAudio edits: extended intro and slight enhancements to the mix has been made since I had access to the vocals and karaoke tracks, to make the audio fit better in Beat Saber.\r\n\r\nPreview video:\r\nhttps://youtu.be/16oSzYCTD3A\r\n\r\nBPM: 160\r\nDuration: 3:56\r\nEasy, Normal, Hard and Expert difficulties.\r\n\r\nEasy: 335, 7 obstacles, 4 mines\r\nNormal: 469 notes, 10 obstacles, 8 mines\r\nHard: 665 notes, 14 obstacles, 24 mines\r\nExpert: 845 notes, 15 obstacles, 28 mines\r\n\r\nMap includes three different audio versions:\r\n* Full vocal version; the standard version of the song.\r\n* Karaoke version; you can sing along with backing vocals!\r\n* Instrumental version; If you don't want any backing or main vocals this is the version to use.\r\nTo change between these search for \"GigaP_Bring_It_On.ogg\" in your CustomSongs folder and open the folder where that file resides. Change the name of GigaP_Bring_It_On.ogg to GigaP_Bring_It_On_Standard.ogg and rename any of the other two versions to GigaP_Bring_It_On.ogg. Start the game and enjoy!\r\n\r\nThanks to AaltopahWi, RedMagi and ManDynasty for playtesting!\r\n\r\nEnjoy!","uploader":{"id":4285318,"name":"kolezan","uniqueSet":true,"hash":"5cff0b7398cc5a672c84fcbb","avatar":"https://cdn.beatsaver.com/avatar/220513618763055106.png","type":"DISCORD"},"metadata":{"bpm":160.0,"duration":236,"songName":"Bring It On","songSubName":"Giga-P","songAuthorName":"Kolezan","levelAuthorName":"Kolezan"},"stats":{"plays":0,"downloads":9117,"upvotes":3878,"downvotes":99,"score":0.9359},"uploaded":"2018-12-07T21:36:14Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"4cb323a4340177d7b7ca74f67f6b920ed320ee5e","key":"2475","state":"Published","createdAt":"2018-12-07T21:36:14Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":335,"bombs":4,"obstacles":7,"nps":1.462,"length":611.0,"characteristic":"Standard","difficulty":"Easy","events":2906,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":229.125,"paritySummary":{"errors":63,"warns":28,"resets":0},"stars":1.02},{"njs":11.0,"offset":0.0,"notes":469,"bombs":8,"obstacles":10,"nps":2.047,"length":611.0,"characteristic":"Standard","difficulty":"Normal","events":2906,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":229.125,"paritySummary":{"errors":69,"warns":52,"resets":4},"stars":1.36},{"njs":12.0,"offset":0.0,"notes":665,"bombs":24,"obstacles":14,"nps":2.902,"length":611.0,"characteristic":"Standard","difficulty":"Hard","events":2906,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":229.125,"paritySummary":{"errors":74,"warns":79,"resets":7},"stars":1.95},{"njs":13.0,"offset":0.0,"notes":845,"bombs":28,"obstacles":15,"nps":3.688,"length":611.0,"characteristic":"Standard","difficulty":"Expert","events":3259,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":229.125,"paritySummary":{"errors":91,"warns":115,"resets":12},"stars":2.64}],"downloadURL":"https://cdn.beatsaver.com/4cb323a4340177d7b7ca74f67f6b920ed320ee5e.zip","coverURL":"https://cdn.beatsaver.com/4cb323a4340177d7b7ca74f67f6b920ed320ee5e.jpg","previewURL":"https://cdn.beatsaver.com/4cb323a4340177d7b7ca74f67f6b920ed320ee5e.mp3"}],"createdAt":"2018-12-07T21:36:14Z","updatedAt":"2018-12-07T21:36:14Z","lastPublishedAt":"2018-12-07T21:36:14Z"},{"id":"19d5","name":"BABY GOT BACK - Sir Mix A Lot (Mapped by GreatYazer)","description":"Oh, my, God Becky, look at her butt","uploader":{"id":41378,"name":"greatyazer","uniqueSet":true,"hash":"5cff0b7298cc5a672c84ea71","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ea71?d=retro","type":"SIMPLE"},"metadata":{"bpm":128.0,"duration":265,"songName":"Baby Got Back","songSubName":"Sir Mix A Lot","songAuthorName":"GreatYazer","levelAuthorName":"greatyazer"},"stats":{"plays":0,"downloads":9264,"upvotes":3382,"downvotes":80,"score":0.9359},"uploaded":"2018-10-12T12:34:15Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"9d5dbcb878623f3396395cec0e6e8e07d48d2256","key":"19d5","state":"Published","createdAt":"2018-10-12T12:34:15Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":254,"bombs":0,"obstacles":0,"nps":1.044,"length":519.0,"characteristic":"Standard","difficulty":"Easy","events":2124,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":243.281,"paritySummary":{"errors":61,"warns":19,"resets":0}},{"njs":10.0,"offset":0.0,"notes":394,"bombs":0,"obstacles":1,"nps":1.62,"length":519.0,"characteristic":"Standard","difficulty":"Normal","events":2124,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":243.281,"paritySummary":{"errors":100,"warns":34,"resets":0}},{"njs":10.0,"offset":0.0,"notes":603,"bombs":0,"obstacles":9,"nps":2.479,"length":519.0,"characteristic":"Standard","difficulty":"Hard","events":2124,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":243.281,"paritySummary":{"errors":79,"warns":48,"resets":0}},{"njs":10.0,"offset":0.0,"notes":889,"bombs":0,"obstacles":14,"nps":3.654,"length":519.0,"characteristic":"Standard","difficulty":"Expert","events":2124,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":243.281,"paritySummary":{"errors":107,"warns":66,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/9d5dbcb878623f3396395cec0e6e8e07d48d2256.zip","coverURL":"https://cdn.beatsaver.com/9d5dbcb878623f3396395cec0e6e8e07d48d2256.jpg","previewURL":"https://cdn.beatsaver.com/9d5dbcb878623f3396395cec0e6e8e07d48d2256.mp3"}],"createdAt":"2018-10-12T12:34:15Z","updatedAt":"2018-10-12T12:34:15Z","lastPublishedAt":"2018-10-12T12:34:15Z"},{"id":"d00c","name":"[Extra Sensory] Hayako - Analys","description":"WE ARE BACK\n\nMassive thanks to these people for making all of this possible!!\nAeroluna- For making Noodle Extensions and updating Chroma\nCyan- For spending almost a full day starting at effects with and for me and also helping with making sure the mapping wasnt horrible\nArti- CusomJsonData and helping make this whole project happen initially at all!!\nFMS_Cat- Map heavily inspired and made from his original, https://youtu.be/eqZE60HanCM . The we are back text was also modeled after that in his chart\n\nAnd anyone else who helped me out while I was being dumb with this whole thing\n\nThis map was released as a part of the \"Extra Sensory\" event.\n\nVideo: https://youtu.be/sYkW_AWUEL8","uploader":{"id":4235136,"name":"reaxt","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e8ab","avatar":"https://cdn.beatsaver.com/avatar/163052863038291970.png","type":"DISCORD"},"metadata":{"bpm":170.0,"duration":129,"songName":"ANALYS","songSubName":"","songAuthorName":"HAYAKO","levelAuthorName":"Reaxt"},"stats":{"plays":0,"downloads":6832,"upvotes":4995,"downvotes":145,"score":0.9358},"uploaded":"2020-08-06T16:52:58.027Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"f6dbd83b699872e2e42c2fc90337ef0ac2ab8f30","key":"d00c","state":"Published","createdAt":"2020-08-06T16:52:58.027Z","sageScore":3,"diffs":[{"njs":19.0,"offset":0.0,"notes":2390,"bombs":100,"obstacles":502,"nps":19.238,"length":352.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":2478,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":124.235,"paritySummary":{"errors":149,"warns":3,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/f6dbd83b699872e2e42c2fc90337ef0ac2ab8f30.zip","coverURL":"https://cdn.beatsaver.com/f6dbd83b699872e2e42c2fc90337ef0ac2ab8f30.jpg","previewURL":"https://cdn.beatsaver.com/f6dbd83b699872e2e42c2fc90337ef0ac2ab8f30.mp3"}],"createdAt":"2020-08-06T16:52:58.027Z","updatedAt":"2020-08-06T16:52:58.027Z","lastPublishedAt":"2020-08-06T16:52:58.027Z"},{"id":"85b","name":"Take Me Home, Country Road - Fallout 76 Version","description":"Easy to beat, but a blast to play through. Enjoy!","uploader":{"id":50560,"name":"npcinnkeeper","uniqueSet":true,"hash":"5cff0b7398cc5a672c84f8e7","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f8e7?d=retro","type":"SIMPLE"},"metadata":{"bpm":160.0,"duration":178,"songName":"Take Me Home, Country Roads","songSubName":"Fallout 76","songAuthorName":"NPC Innkeeper","levelAuthorName":"npcinnkeeper"},"stats":{"plays":0,"downloads":12534,"upvotes":5946,"downvotes":185,"score":0.9358},"uploaded":"2018-07-07T14:08:33Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"9ed3b706b2306c00c2ad70a287c784277dbb5d74","key":"85b","state":"Published","createdAt":"2018-07-07T14:08:33Z","sageScore":4,"diffs":[{"njs":10.0,"offset":0.0,"notes":536,"bombs":14,"obstacles":13,"nps":3.131,"length":456.5,"characteristic":"Standard","difficulty":"Hard","events":954,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":171.188,"paritySummary":{"errors":141,"warns":29,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/9ed3b706b2306c00c2ad70a287c784277dbb5d74.zip","coverURL":"https://cdn.beatsaver.com/9ed3b706b2306c00c2ad70a287c784277dbb5d74.jpg","previewURL":"https://cdn.beatsaver.com/9ed3b706b2306c00c2ad70a287c784277dbb5d74.mp3"}],"createdAt":"2018-07-07T14:08:33Z","updatedAt":"2018-07-07T14:08:33Z","lastPublishedAt":"2018-07-07T14:08:33Z"},{"id":"4d62","name":"Skrillex - Bangarang","description":"Feedback on Discord: nitronik.exe#7974\n\nNOTE: There are two expert+ difficulties and so there is no easy mode!\nanyways, hope you enjoy!\npreview: https://www.youtube.com/watch?v=p0Z6U8x9fb4","uploader":{"id":4284201,"name":"nitronikexe","uniqueSet":true,"hash":"5cff0b7798cc5a672c855d84","avatar":"https://cdn.beatsaver.com/avatar/428230049704181760.png","type":"DISCORD"},"metadata":{"bpm":110.0,"duration":219,"songName":"Bangarang","songSubName":"Skrillex","songAuthorName":"nitronik.exe","levelAuthorName":"nitronikexe"},"stats":{"plays":0,"downloads":12246,"upvotes":5033,"downvotes":147,"score":0.9357},"uploaded":"2019-05-17T11:28:44Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"137e76fcfb08e99695f481f7133cef173fd7fa8e","key":"4d62","state":"Published","createdAt":"2019-05-17T11:28:44Z","sageScore":8,"diffs":[{"njs":10.0,"offset":0.0,"notes":631,"bombs":0,"obstacles":6,"nps":3.152,"length":367.0,"characteristic":"Standard","difficulty":"Easy","events":7633,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":200.182,"paritySummary":{"errors":129,"warns":0,"resets":0}},{"njs":10.0,"offset":0.0,"notes":708,"bombs":0,"obstacles":14,"nps":3.527,"length":368.0,"characteristic":"Standard","difficulty":"Normal","events":7633,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":200.727,"paritySummary":{"errors":26,"warns":25,"resets":0}},{"njs":13.0,"offset":0.0,"notes":881,"bombs":0,"obstacles":14,"nps":4.389,"length":368.0,"characteristic":"Standard","difficulty":"Hard","events":7633,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":200.727,"paritySummary":{"errors":3,"warns":3,"resets":0}},{"njs":16.0,"offset":0.0,"notes":1032,"bombs":108,"obstacles":29,"nps":5.141,"length":368.0,"characteristic":"Standard","difficulty":"Expert","events":7633,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":200.727,"paritySummary":{"errors":2,"warns":0,"resets":4}},{"njs":17.0,"offset":0.0,"notes":1088,"bombs":0,"obstacles":26,"nps":5.42,"length":368.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":7633,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":200.727,"paritySummary":{"errors":54,"warns":42,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/137e76fcfb08e99695f481f7133cef173fd7fa8e.zip","coverURL":"https://cdn.beatsaver.com/137e76fcfb08e99695f481f7133cef173fd7fa8e.jpg","previewURL":"https://cdn.beatsaver.com/137e76fcfb08e99695f481f7133cef173fd7fa8e.mp3"}],"createdAt":"2019-05-17T11:28:44Z","updatedAt":"2019-05-17T11:28:44Z","lastPublishedAt":"2019-05-17T11:28:44Z"},{"id":"97ac","name":"Mick Gordon - Unholy Crusade","description":"Rip and tear\r\n\r\n\r\nExtra super huge thank you to the following people for making this possible\r\nAeroluna- For making Noodle Extensions and updating Chroma\r\nSpooky Ghost- For making Beatwalls\r\nArti- For making the core mod that allowed Noodle Extensions and Chroma to support the new values\r\n\r\nAnd thank you for putting up with my shit during this :)\r\n\r\nVideo: https://www.youtube.com/watch?v=zhIIh3nccNQ","uploader":{"id":4235138,"name":"CyanSnow","uniqueSet":true,"hash":"5cff0b7698cc5a672c8543ac","avatar":"https://cdn.beatsaver.com/avatar/154341137694326784.png","type":"DISCORD"},"metadata":{"bpm":150.0,"duration":167,"songName":"Unholy Crusade","songSubName":"","songAuthorName":"Mick Gordon","levelAuthorName":"CyanSnow"},"stats":{"plays":0,"downloads":6492,"upvotes":2903,"downvotes":63,"score":0.9356},"uploaded":"2020-04-05T15:44:13.116Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"abc41236f324093fbf711abce8c18c2a47debe20","key":"97ac","state":"Published","createdAt":"2020-04-05T15:44:13.116Z","sageScore":4,"diffs":[{"njs":19.0,"offset":-0.3,"notes":650,"bombs":0,"obstacles":21376,"nps":4.331,"length":375.23,"characteristic":"Lawless","difficulty":"ExpertPlus","events":3853,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":150.092,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/abc41236f324093fbf711abce8c18c2a47debe20.zip","coverURL":"https://cdn.beatsaver.com/abc41236f324093fbf711abce8c18c2a47debe20.jpg","previewURL":"https://cdn.beatsaver.com/abc41236f324093fbf711abce8c18c2a47debe20.mp3"}],"createdAt":"2020-04-05T15:44:13.116Z","updatedAt":"2020-04-05T15:44:13.116Z","lastPublishedAt":"2020-04-05T15:44:13.116Z"},{"id":"462","name":"The Nights - Avicii","description":"The Nights By Avicii.\r\nThis is my first beatmap, feedback would be greatly appreciated :)","uploader":{"id":47059,"name":"rocket","uniqueSet":true,"hash":"5cff0b7398cc5a672c84f1c0","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f1c0?d=retro","type":"SIMPLE"},"metadata":{"bpm":126.0,"duration":173,"songName":"The Nights","songSubName":"","songAuthorName":"Avicii","levelAuthorName":"rocket"},"stats":{"plays":0,"downloads":22239,"upvotes":11170,"downvotes":426,"score":0.9356},"uploaded":"2018-06-08T23:20:50Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"2c002d2874e029db43f3c7cf9bb271ae0d769b74","key":"462","state":"Published","createdAt":"2018-06-08T23:20:50Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":200,"bombs":4,"obstacles":14,"nps":1.207,"length":348.0,"characteristic":"Standard","difficulty":"Normal","events":704,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":165.714,"paritySummary":{"errors":45,"warns":19,"resets":0},"stars":0.92},{"njs":10.0,"offset":0.0,"notes":402,"bombs":6,"obstacles":14,"nps":2.426,"length":348.0,"characteristic":"Standard","difficulty":"Hard","events":704,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":165.714,"paritySummary":{"errors":88,"warns":44,"resets":0}},{"njs":10.0,"offset":0.0,"notes":702,"bombs":10,"obstacles":14,"nps":4.236,"length":348.0,"characteristic":"Standard","difficulty":"Expert","events":705,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":165.714,"paritySummary":{"errors":119,"warns":72,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/2c002d2874e029db43f3c7cf9bb271ae0d769b74.zip","coverURL":"https://cdn.beatsaver.com/2c002d2874e029db43f3c7cf9bb271ae0d769b74.jpg","previewURL":"https://cdn.beatsaver.com/2c002d2874e029db43f3c7cf9bb271ae0d769b74.mp3"}],"createdAt":"2018-06-08T23:20:50Z","updatedAt":"2018-06-08T23:20:50Z","lastPublishedAt":"2018-06-08T23:20:50Z"},{"id":"9c54","name":"Yunomi - 惑星ラビット (feat. TORIENA)/Wakusei Rabbit[Wall Map]","description":"seventh map! [Noodle Extensions & Chroma] map!\nYunomi - Wakusei Rabbit (feat. TORIENA) Planet Rabbit\n \n!! This map requires!!\nNoodle Extensions , Chroma\n\nNoodle Extensions と Chromaが古いバージョンの時代に作ったので、最新バージョンだと壁のY軸(高さ)が破綻します。。\n昔と違い、RequirementsにMapping Extensionsが記載されていると干渉してしまうようなので、\n\n壁を正常に表示するには、以下の修正をお願い致します。\n1. info.datをテキストエディタ等で開く。\n2.「,\"Mapping Extensions\"」を検索し削除(3か所) コンマも含めますご注意ください。\n\n--(English)\nUnlike in the past, it seems to interfere with the Mapping Extensions listed in Requirements.\nIn order to display the wall properly, please make the following modifications.\n1. Open info.dat with a text editor.\n2. Search for [ , \"Mapping Extensions\"] and delete it (in three places), including commas.\n--\n\nMy Twitter : https://twitter.com/kamy_0811\n\n[Song info]\nSong name : Wakusei Rabbit\nAlbum : Oedo Controller\nMusic & Lyrics : Yunomi \nVocal : TORIENA\nArtwork : Kiato \nSoundCloud : https://soundcloud.com/tkrism/wakuseirabbit\nPlay movie : https://youtu.be/6WXJqlHQ4To","uploader":{"id":4285148,"name":"kamy","uniqueSet":true,"hash":"5e42a3f4d523400006369ea0","avatar":"https://cdn.beatsaver.com/avatar/415431418663927810.png","type":"DISCORD"},"metadata":{"bpm":174.0,"duration":204,"songName":"Wakusei_Rabbit","songSubName":"feat. TORIENA","songAuthorName":"Yunomi","levelAuthorName":"kamy"},"stats":{"plays":0,"downloads":6028,"upvotes":1794,"downvotes":25,"score":0.9355},"uploaded":"2020-04-18T14:46:30.487Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"3b680d87cbba69bda48081e97dc925464116f41f","key":"9c54","state":"Published","createdAt":"2020-04-18T14:46:30.487Z","sageScore":7,"diffs":[{"njs":14.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":27053,"nps":0.0,"length":0.0,"characteristic":"Standard","difficulty":"Easy","events":2845,"chroma":true,"me":true,"ne":true,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":14.0,"offset":0.0,"notes":762,"bombs":0,"obstacles":27053,"nps":3.867,"length":571.5,"characteristic":"Standard","difficulty":"Hard","events":2848,"chroma":true,"me":true,"ne":true,"cinema":false,"seconds":197.069,"paritySummary":{"errors":0,"warns":2,"resets":0}},{"njs":17.0,"offset":0.0,"notes":1246,"bombs":0,"obstacles":27053,"nps":6.323,"length":571.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":2845,"chroma":true,"me":true,"ne":true,"cinema":false,"seconds":197.069,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/3b680d87cbba69bda48081e97dc925464116f41f.zip","coverURL":"https://cdn.beatsaver.com/3b680d87cbba69bda48081e97dc925464116f41f.jpg","previewURL":"https://cdn.beatsaver.com/3b680d87cbba69bda48081e97dc925464116f41f.mp3"}],"createdAt":"2020-04-18T14:46:30.487Z","updatedAt":"2020-04-18T14:46:30.487Z","lastPublishedAt":"2020-04-18T14:46:30.487Z"},{"id":"1f42","name":"Field of Hopes and Dreams (Deltarune) - Toby Fox","description":"Song by Toby Fox\r\nVideo: https://youtu.be/2V7IFAKTIp4\r\n\r\n Expert, Hard, Normal\r\nBPM:120\r\nObstacles: 0\r\n\r\n-Expert-\r\nNotes: 513\r\nNotes per second: 3.12\r\nJump Speed: 13\r\n\r\n-Hard-\r\nNotes: 325\r\nNotes per second: 1.97\r\nJump Speed: 11\r\n\r\n-Expert-\r\nNotes: 212\r\nNotes per second: 1.29\r\nJump Speed: 10\r\n\r\nShoutout to testers:\r\nRedmagi\r\nManDynasty\r\nAaltopahWi\r\nAggrogahu","uploader":{"id":39365,"name":"todokete","uniqueSet":true,"hash":"5cff0b7398cc5a672c84ee70","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee70?d=retro","type":"SIMPLE"},"metadata":{"bpm":125.0,"duration":164,"songName":"Field of Hopes and Dreams","songSubName":"Toby Fox","songAuthorName":"Todokete","levelAuthorName":"todokete"},"stats":{"plays":0,"downloads":6294,"upvotes":3219,"downvotes":76,"score":0.9353},"uploaded":"2018-11-09T19:54:30Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"c62d53bd22e3aa7d6a2ef04472ee7a22ceed74f6","key":"1f42","state":"Published","createdAt":"2018-11-09T19:54:30Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":212,"bombs":0,"obstacles":0,"nps":1.33,"length":332.0,"characteristic":"Standard","difficulty":"Normal","events":888,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":159.36,"paritySummary":{"errors":44,"warns":21,"resets":0}},{"njs":11.0,"offset":0.0,"notes":325,"bombs":0,"obstacles":0,"nps":2.039,"length":332.0,"characteristic":"Standard","difficulty":"Hard","events":888,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":159.36,"paritySummary":{"errors":57,"warns":15,"resets":0}},{"njs":13.0,"offset":0.0,"notes":513,"bombs":0,"obstacles":0,"nps":3.219,"length":332.0,"characteristic":"Standard","difficulty":"Expert","events":888,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":159.36,"paritySummary":{"errors":68,"warns":69,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/c62d53bd22e3aa7d6a2ef04472ee7a22ceed74f6.zip","coverURL":"https://cdn.beatsaver.com/c62d53bd22e3aa7d6a2ef04472ee7a22ceed74f6.jpg","previewURL":"https://cdn.beatsaver.com/c62d53bd22e3aa7d6a2ef04472ee7a22ceed74f6.mp3"}],"createdAt":"2018-11-09T19:54:30Z","updatedAt":"2018-11-09T19:54:30Z","lastPublishedAt":"2018-11-09T19:54:30Z"},{"id":"1970","name":"Still Into You - Paramore","description":"Expert Playthrough : https://youtu.be/CUBqLk35vbE","uploader":{"id":13320,"name":"novashaft","uniqueSet":true,"hash":"5cff0b7398cc5a672c84ee55","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee55?d=retro","type":"SIMPLE"},"metadata":{"bpm":136.0,"duration":216,"songName":"Still Into You","songSubName":"Paramore","songAuthorName":"NovaShaft","levelAuthorName":"novashaft"},"stats":{"plays":0,"downloads":8223,"upvotes":2078,"downvotes":35,"score":0.9352},"uploaded":"2018-10-09T15:34:41Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"fdd3fd8a25a79c114184cef10633fe6a57c7eb4c","key":"1970","state":"Published","createdAt":"2018-10-09T15:34:41Z","sageScore":4,"diffs":[{"njs":10.0,"offset":0.0,"notes":713,"bombs":0,"obstacles":21,"nps":3.536,"length":457.0,"characteristic":"Standard","difficulty":"Hard","events":738,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":201.618,"paritySummary":{"errors":25,"warns":25,"resets":0}},{"njs":11.0,"offset":0.0,"notes":848,"bombs":0,"obstacles":21,"nps":4.206,"length":457.0,"characteristic":"Standard","difficulty":"Expert","events":738,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":201.618,"paritySummary":{"errors":50,"warns":72,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/fdd3fd8a25a79c114184cef10633fe6a57c7eb4c.zip","coverURL":"https://cdn.beatsaver.com/fdd3fd8a25a79c114184cef10633fe6a57c7eb4c.jpg","previewURL":"https://cdn.beatsaver.com/fdd3fd8a25a79c114184cef10633fe6a57c7eb4c.mp3"}],"createdAt":"2018-10-09T15:34:41Z","updatedAt":"2018-10-09T15:34:41Z","lastPublishedAt":"2018-10-09T15:34:41Z"},{"id":"8790","name":"Satellite - Rise Against","description":"\"Satellite\" is a song by American rock band Rise Against, featured on their sixth studio album Endgame (2011). \n\nWritten by lead vocalist Tim McIlrath, \"Satellite\" expresses the idea that the band stood by their social and political beliefs, and that they would not conform to mainstream media.","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":136.0,"duration":237,"songName":"Satellite","songSubName":"","songAuthorName":"Rise Against","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":4055,"upvotes":1641,"downvotes":21,"score":0.9351},"uploaded":"2020-02-16T09:32:52.155Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"2a3c743f85bd235cd9d658fe728f9db79f3b9dc5","key":"8790","state":"Published","createdAt":"2020-02-16T09:32:52.155Z","sageScore":7,"diffs":[{"njs":15.0,"offset":0.0,"notes":982,"bombs":26,"obstacles":10,"nps":4.306,"length":516.975,"characteristic":"Standard","difficulty":"ExpertPlus","events":7595,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":228.077,"paritySummary":{"errors":9,"warns":6,"resets":1}}],"downloadURL":"https://cdn.beatsaver.com/2a3c743f85bd235cd9d658fe728f9db79f3b9dc5.zip","coverURL":"https://cdn.beatsaver.com/2a3c743f85bd235cd9d658fe728f9db79f3b9dc5.jpg","previewURL":"https://cdn.beatsaver.com/2a3c743f85bd235cd9d658fe728f9db79f3b9dc5.mp3"}],"createdAt":"2020-02-16T09:32:52.155Z","updatedAt":"2020-02-16T09:32:52.155Z","lastPublishedAt":"2020-02-16T09:32:52.155Z"},{"id":"689b","name":"DuckTales Opening ","description":"Opening by Felicia Barton\nJust a simple but fun map of this song from childhood!\n:D \nFC: https://www.youtube.com/watch?v=QCOHyHKy6SI&feature=youtu.be","uploader":{"id":35241,"name":"4strofan","uniqueSet":true,"hash":"5cff0b7598cc5a672c851d18","avatar":"https://www.gravatar.com/avatar/5cff0b7598cc5a672c851d18?d=retro","type":"SIMPLE"},"metadata":{"bpm":91.51,"duration":121,"songName":"DuckTales","songSubName":"Opening Song","songAuthorName":"Felicia Barton","levelAuthorName":"Strofan"},"stats":{"plays":0,"downloads":4253,"upvotes":2276,"downvotes":42,"score":0.9351},"uploaded":"2019-10-08T13:14:56.729Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"2e687b4e357c8fb14d1cba11b3d4029070ed51f7","key":"689b","state":"Published","createdAt":"2019-10-08T13:14:56.729Z","sageScore":5,"diffs":[{"njs":14.0,"offset":0.0,"notes":460,"bombs":0,"obstacles":0,"nps":4.091,"length":171.5,"characteristic":"Standard","difficulty":"Expert","events":1106,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":112.447,"paritySummary":{"errors":15,"warns":6,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/2e687b4e357c8fb14d1cba11b3d4029070ed51f7.zip","coverURL":"https://cdn.beatsaver.com/2e687b4e357c8fb14d1cba11b3d4029070ed51f7.jpg","previewURL":"https://cdn.beatsaver.com/2e687b4e357c8fb14d1cba11b3d4029070ed51f7.mp3"}],"createdAt":"2019-10-08T13:14:56.729Z","updatedAt":"2019-10-08T13:14:56.729Z","lastPublishedAt":"2019-10-08T13:14:56.729Z"},{"id":"67ba","name":"Air - Mr.FijiWiji Remix | AMV by SliceOfLife","description":"Videolink:\nhttps://youtu.be/V-KFAdSjeKo\n\n====================================================\n\nIf you are making a video to the level I would be happy if my video is linked in the description, but is not a must.\n\n====================================================\n\nIn order to play the level properly, the following plugins are required !!!\n== MappingExtension is required! ==\n== ChromaLite is recommended ==\n== SongCore is recommended ==\n\nAll plugins can be downloaded by ModAssistant\nhttps://github.com/Assistant/ModAssistant\n\nChromaLite and SongCore are only for the aesthetics! This includes light events and colors. If you don't want to use the preset colors, set the \"Allow Color Override\" option under \"SongCore\" to off.\n\n====================================================\n\nDifficulty: Expert\nNotes: 146\nWalls: 4135\nBombs: 900\n\n====================================================\n\nThis level CAN cause performance issues to your PC, especially on lower end VR PCs. ","uploader":{"id":37230,"name":"gevarred","uniqueSet":true,"hash":"5d971075e6a6760006266826","avatar":"https://www.gravatar.com/avatar/5d971075e6a6760006266826?d=retro","type":"SIMPLE"},"metadata":{"bpm":126.0,"duration":172,"songName":"Air","songSubName":"Shortened by SliceOfLife","songAuthorName":"Mr. FijiWiji Remix","levelAuthorName":"Gevarred"},"stats":{"plays":0,"downloads":4245,"upvotes":4022,"downvotes":109,"score":0.935},"uploaded":"2019-10-04T10:05:15.873Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"65c0c3e82499281f2c9b1d09d7eb3e60bcacd57d","key":"67ba","state":"Published","createdAt":"2019-10-04T10:05:15.873Z","sageScore":5,"diffs":[{"njs":8.0,"offset":0.0,"notes":146,"bombs":900,"obstacles":4135,"nps":1.065,"length":287.781,"characteristic":"Standard","difficulty":"ExpertPlus","events":1015,"chroma":true,"me":true,"ne":false,"cinema":false,"seconds":137.039,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/65c0c3e82499281f2c9b1d09d7eb3e60bcacd57d.zip","coverURL":"https://cdn.beatsaver.com/65c0c3e82499281f2c9b1d09d7eb3e60bcacd57d.jpg","previewURL":"https://cdn.beatsaver.com/65c0c3e82499281f2c9b1d09d7eb3e60bcacd57d.mp3"}],"createdAt":"2019-10-04T10:05:15.873Z","updatedAt":"2019-10-04T10:05:15.873Z","lastPublishedAt":"2019-10-04T10:05:15.873Z"},{"id":"38eb","name":"The Rockafeller Skank - Fatboy Slim - BT90","description":"This map is part of a 90s songpack. Search \"BT90\" to find all the songs in the songpack.\r\nMap is created by Heisenberg_IRL. Check out https://www.twitch.tv/heisenberg_irl","uploader":{"id":27983,"name":"heisenbergirl","uniqueSet":true,"hash":"5cff0b7298cc5a672c84ec30","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ec30?d=retro","type":"SIMPLE"},"metadata":{"bpm":153.0,"duration":236,"songName":"The Rockafeller Skank","songSubName":"Fatboy Slim [BT90]","songAuthorName":"Heisenberg","levelAuthorName":"heisenbergirl"},"stats":{"plays":0,"downloads":5545,"upvotes":2421,"downvotes":48,"score":0.9348},"uploaded":"2019-02-23T13:17:40Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"5ad1cb4a7317ddc5d54d497c8d35eda5dd9d44b9","key":"38eb","state":"Published","createdAt":"2019-02-23T13:17:40Z","sageScore":6,"diffs":[{"njs":12.0,"offset":0.0,"notes":775,"bombs":884,"obstacles":43,"nps":3.384,"length":584.0,"characteristic":"Standard","difficulty":"Expert","events":5820,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":229.02,"paritySummary":{"errors":43,"warns":44,"resets":15}},{"njs":18.0,"offset":0.0,"notes":1014,"bombs":907,"obstacles":41,"nps":4.371,"length":591.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":5820,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":231.961,"paritySummary":{"errors":48,"warns":98,"resets":18}}],"downloadURL":"https://cdn.beatsaver.com/5ad1cb4a7317ddc5d54d497c8d35eda5dd9d44b9.zip","coverURL":"https://cdn.beatsaver.com/5ad1cb4a7317ddc5d54d497c8d35eda5dd9d44b9.jpg","previewURL":"https://cdn.beatsaver.com/5ad1cb4a7317ddc5d54d497c8d35eda5dd9d44b9.mp3"}],"createdAt":"2019-02-23T13:17:40Z","updatedAt":"2019-02-23T13:17:40Z","lastPublishedAt":"2019-02-23T13:17:40Z"},{"id":"445f","name":"Kazuma Kiryu - Baka Mitai [Yakuza OST]","description":"Dame da ne \r\nDame yo\r\nDame na no yo ( ͒˃̩̩⌂˂̩̩ ͒)\r\n\r\nPlay Yakuza, especially the karaoke mini-games\r\nFun fact: it is impossible to listen to this song without crying (100% guaranteed) \r\n\r\n74 BPM\r\nExpert\r\n\r\n:)\r\n\r\ncontact me on discord\r\nETAN#8341","uploader":{"id":4235140,"name":"etan","uniqueSet":true,"hash":"5cff0b7798cc5a672c855775","avatar":"https://cdn.beatsaver.com/avatar/136373107559497728.png","type":"DISCORD"},"metadata":{"bpm":74.0,"duration":119,"songName":"Baka Mitai","songSubName":"Kazuma Kiryu","songAuthorName":"ETAN","levelAuthorName":"ETAN"},"stats":{"plays":0,"downloads":5251,"upvotes":1681,"downvotes":23,"score":0.9347},"uploaded":"2019-04-08T17:08:08Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"c39c719a17a081d0bd0806052bd39ba4ee39b6b0","key":"445f","state":"Published","createdAt":"2019-04-08T17:08:08Z","sageScore":4,"diffs":[{"njs":13.5,"offset":0.0,"notes":272,"bombs":0,"obstacles":21,"nps":2.546,"length":263.5,"characteristic":"Standard","difficulty":"Expert","events":553,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":213.649,"paritySummary":{"errors":9,"warns":11,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/c39c719a17a081d0bd0806052bd39ba4ee39b6b0.zip","coverURL":"https://cdn.beatsaver.com/c39c719a17a081d0bd0806052bd39ba4ee39b6b0.jpg","previewURL":"https://cdn.beatsaver.com/c39c719a17a081d0bd0806052bd39ba4ee39b6b0.mp3"}],"createdAt":"2019-04-08T17:08:08Z","updatedAt":"2019-04-08T17:08:08Z","lastPublishedAt":"2019-04-08T17:08:08Z"},{"id":"bdc7","name":"That's Life - Frank Sinatra","description":"Here is an honest-to-goodness human-mapped version of Frank Sinatra's 1966 hit, That's Life. This song is way too good to just have a crappy beat sage map.\n\nNormal and Hard Standard levels, and Expert Standard, 90, and 360 levels. Note that the expert levels are all essentially the same, just with varying degrees of wobbles.\n\nThanks to Maybeemae for the playtests!\n\nhttps://youtu.be/QXjj2-fgK8U","uploader":{"id":78593,"name":"techbutterfly","uniqueSet":true,"hash":"5cff0b7798cc5a672c8566f7","avatar":"https://cdn.beatsaver.com/avatar/527111497617506304.png","type":"DISCORD"},"metadata":{"bpm":77.0,"duration":186,"songName":"That's Life","songSubName":"","songAuthorName":"Frank Sinatra","levelAuthorName":"TechButterfly"},"stats":{"plays":0,"downloads":4965,"upvotes":1172,"downvotes":8,"score":0.9346},"uploaded":"2020-07-11T22:35:42.033Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"7cca8c1afecd782cfd74f158c312201b780043d8","key":"bdc7","state":"Published","createdAt":"2020-07-11T22:35:42.033Z","sageScore":4,"diffs":[{"njs":10.0,"offset":-0.3,"notes":321,"bombs":0,"obstacles":6,"nps":1.768,"length":233.0,"characteristic":"Standard","difficulty":"Normal","events":1086,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":181.558,"paritySummary":{"errors":30,"warns":41,"resets":0}},{"njs":12.0,"offset":0.3,"notes":418,"bombs":0,"obstacles":8,"nps":2.302,"length":233.0,"characteristic":"Standard","difficulty":"Hard","events":1086,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":181.558,"paritySummary":{"errors":24,"warns":38,"resets":0}},{"njs":13.0,"offset":0.1,"notes":492,"bombs":0,"obstacles":8,"nps":2.71,"length":233.0,"characteristic":"Standard","difficulty":"Expert","events":1086,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":181.558,"paritySummary":{"errors":24,"warns":26,"resets":0}},{"njs":13.0,"offset":0.3,"notes":489,"bombs":0,"obstacles":8,"nps":2.693,"length":233.0,"characteristic":"90Degree","difficulty":"Expert","events":1192,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":181.558,"paritySummary":{"errors":25,"warns":27,"resets":0}},{"njs":13.0,"offset":0.3,"notes":489,"bombs":0,"obstacles":8,"nps":2.693,"length":233.0,"characteristic":"360Degree","difficulty":"Expert","events":1166,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":181.558,"paritySummary":{"errors":25,"warns":26,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/7cca8c1afecd782cfd74f158c312201b780043d8.zip","coverURL":"https://cdn.beatsaver.com/7cca8c1afecd782cfd74f158c312201b780043d8.jpg","previewURL":"https://cdn.beatsaver.com/7cca8c1afecd782cfd74f158c312201b780043d8.mp3"}],"createdAt":"2020-07-11T22:35:42.033Z","updatedAt":"2020-07-11T22:35:42.033Z","lastPublishedAt":"2020-07-11T22:35:42.033Z"},{"id":"194c","name":"Better When I'm Dancin' - Meghan Trainor","description":"\"We can do this together... I bet you feel better when you're dancing, yeah, yeah...\"\r\nDifficulties: Expert, Hard, Normal","uploader":{"id":30311,"name":"bennydabeast","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e98d","avatar":"https://cdn.beatsaver.com/avatar/30311.jpg","type":"SIMPLE"},"metadata":{"bpm":128.0,"duration":178,"songName":"Better When I'm Dancin'","songSubName":"Meghan Trainor","songAuthorName":"BennyDaBeast","levelAuthorName":"bennydabeast"},"stats":{"plays":0,"downloads":5411,"upvotes":1790,"downvotes":27,"score":0.9345},"uploaded":"2018-10-08T12:10:29Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"9bd5e0efe697a38fe0da28f252a8bfb870da630a","key":"194c","state":"Published","createdAt":"2018-10-08T12:10:29Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":271,"bombs":0,"obstacles":16,"nps":1.571,"length":368.0,"characteristic":"Standard","difficulty":"Normal","events":940,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":172.5,"paritySummary":{"errors":31,"warns":26,"resets":0}},{"njs":10.0,"offset":0.0,"notes":474,"bombs":0,"obstacles":16,"nps":2.748,"length":368.0,"characteristic":"Standard","difficulty":"Hard","events":940,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":172.5,"paritySummary":{"errors":87,"warns":57,"resets":0}},{"njs":10.0,"offset":0.0,"notes":643,"bombs":0,"obstacles":16,"nps":3.733,"length":367.5,"characteristic":"Standard","difficulty":"Expert","events":940,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":172.266,"paritySummary":{"errors":82,"warns":71,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/9bd5e0efe697a38fe0da28f252a8bfb870da630a.zip","coverURL":"https://cdn.beatsaver.com/9bd5e0efe697a38fe0da28f252a8bfb870da630a.jpg","previewURL":"https://cdn.beatsaver.com/9bd5e0efe697a38fe0da28f252a8bfb870da630a.mp3"}],"createdAt":"2018-10-08T12:10:29Z","updatedAt":"2018-10-08T12:10:29Z","lastPublishedAt":"2018-10-08T12:10:29Z"},{"id":"a908","name":"[TheFatRat Pack] Unity - TheFatRat","description":"Here it is! The unofficial \"TheFatRat\" Music Pack in Beat Saber - with all beatmaps being singlehandedly made by me!\n\nAll songs included in TheFatRat Music Pack:\nMonody (ft. Laura Brehm) \nUnity \nWindfall \nXenogenesis \nTime Lapse \n\nGet the full song pack here: https://bsaber.com/thefatrat-music-pack/\n(Or you should just be able to find all the other ones on my beatsaver profile as well. Heres a link to my profile: https://beatsaver.com/uploader/5d47d586c5301900060b2f6c)\n\nSongcore mod is recommended (for custom colours)\nPlays best on Origins Environment\n\nUnity Stats:\nExpert+ - 1013 Notes | 4.74 NPS\nExpert - 869 Notes | 4.07 NPS\nHard - 608 Notes | 2.85 NPS\nNormal - 373 Notes | 1.75 NPS\nEasy - 264 Notes | 1.24 NPS\n\nRoughly 8-9 Hours of work\nGameplay: https://youtu.be/8lIoHcrm3wQ\n\nObviously - A huge thanks to TheFatRat himself, for not only producing the songs in the first place (and allowing free access to use them for big and small content creators), but also being a huge inspiration to lots of artists out there and for making music that everyone can jam out to! We love you, TheFatRat!","uploader":{"id":4284197,"name":"timeweaver","uniqueSet":true,"hash":"5d47d586c5301900060b2f6c","avatar":"https://cdn.beatsaver.com/avatar/607399708121366529.png","type":"DISCORD"},"metadata":{"bpm":105.0,"duration":213,"songName":"Unity","songSubName":"","songAuthorName":"TheFatRat","levelAuthorName":"Timeweaver"},"stats":{"plays":0,"downloads":11605,"upvotes":3186,"downvotes":78,"score":0.9344},"uploaded":"2020-05-22T13:28:31.075Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"296946437e2194823129d88e7c457202e4c7f281","key":"a908","state":"Published","createdAt":"2020-05-22T13:28:31.075Z","sageScore":5,"diffs":[{"njs":10.0,"offset":1.0,"notes":264,"bombs":0,"obstacles":17,"nps":1.262,"length":366.0,"characteristic":"Standard","difficulty":"Easy","events":3460,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":209.143,"paritySummary":{"errors":48,"warns":26,"resets":0}},{"njs":10.0,"offset":1.0,"notes":373,"bombs":0,"obstacles":16,"nps":1.783,"length":366.0,"characteristic":"Standard","difficulty":"Normal","events":3460,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":209.143,"paritySummary":{"errors":55,"warns":24,"resets":0}},{"njs":12.5,"offset":0.0,"notes":608,"bombs":0,"obstacles":19,"nps":2.907,"length":366.0,"characteristic":"Standard","difficulty":"Hard","events":3460,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":209.143,"paritySummary":{"errors":22,"warns":8,"resets":0}},{"njs":15.0,"offset":-0.25,"notes":869,"bombs":0,"obstacles":17,"nps":4.155,"length":366.0,"characteristic":"Standard","difficulty":"Expert","events":3460,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":209.143,"paritySummary":{"errors":3,"warns":0,"resets":0}},{"njs":16.0,"offset":0.5,"notes":1013,"bombs":0,"obstacles":24,"nps":4.844,"length":366.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":3460,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":209.143,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/296946437e2194823129d88e7c457202e4c7f281.zip","coverURL":"https://cdn.beatsaver.com/296946437e2194823129d88e7c457202e4c7f281.jpg","previewURL":"https://cdn.beatsaver.com/296946437e2194823129d88e7c457202e4c7f281.mp3"}],"createdAt":"2020-05-22T13:28:31.075Z","updatedAt":"2020-05-22T13:28:31.075Z","lastPublishedAt":"2020-05-22T13:28:31.075Z"},{"id":"a465","name":"The Chain - Fleetwood Mac","description":"Today (May 9) is my mapperversary! I released my first map - Comfort Eagle - a year ago today. Since then, I've released another 50 maps - almost one a week for a year! And of course, one of those is Little Shop, which is really 13 songs in one monster map. Help me celebrate my mapperversary by playing this map of Fleetwood Mac's 1977 classic, The Chain. Normal and Expert Standard, and Expert Plus 360 levels.\n\nThanks Beat Saber community for a really fun year of mapping and having fun with y’all! Thanks to the Beat Saber Modding Group for helping me get started in the beginning - especially CyanSnow and HelenCarnate - you guys were a great help to me at the beginning, despite being new mappers yourselves! Thanks to the Ramen Noodle crew for letting this old guy hang out and pretend he’s one of the cool mappers. Thanks to Darkuni and Maybeemae for being awesome friends! Extra special thanks to my mapping buddy, MajorPickle – you da man! Here’s to many more years to come!\n\nMy initial post for this map mentioned that any videos would be insta-blocked on youtube, because mine was. Since then, several people have posted videos of it without problem, so apparently it's okay.\n\nhttps://bittube.tv/post/0d3e4790-7a77-498b-9223-3d70c3ac9234","uploader":{"id":78593,"name":"techbutterfly","uniqueSet":true,"hash":"5cff0b7798cc5a672c8566f7","avatar":"https://cdn.beatsaver.com/avatar/527111497617506304.png","type":"DISCORD"},"metadata":{"bpm":152.0,"duration":252,"songName":"The Chain","songSubName":"","songAuthorName":"Fleetwood Mac","levelAuthorName":"TechButterfly"},"stats":{"plays":0,"downloads":7216,"upvotes":1873,"downvotes":30,"score":0.9344},"uploaded":"2020-05-09T11:53:28.520Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"4db96dd119b51d7f7124b6055db2ee1131452667","key":"a465","state":"Published","createdAt":"2020-05-09T11:53:28.520Z","sageScore":3,"diffs":[{"njs":10.0,"offset":0.0,"notes":469,"bombs":0,"obstacles":135,"nps":1.883,"length":631.0,"characteristic":"Standard","difficulty":"Normal","events":555,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":249.079,"paritySummary":{"errors":57,"warns":51,"resets":0}},{"njs":13.0,"offset":0.3,"notes":851,"bombs":68,"obstacles":113,"nps":3.417,"length":631.0,"characteristic":"Standard","difficulty":"Expert","events":554,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":249.079,"paritySummary":{"errors":36,"warns":33,"resets":9}},{"njs":13.0,"offset":0.5,"notes":851,"bombs":63,"obstacles":116,"nps":3.417,"length":631.0,"characteristic":"360Degree","difficulty":"ExpertPlus","events":766,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":249.079,"paritySummary":{"errors":36,"warns":33,"resets":9}}],"downloadURL":"https://cdn.beatsaver.com/4db96dd119b51d7f7124b6055db2ee1131452667.zip","coverURL":"https://cdn.beatsaver.com/4db96dd119b51d7f7124b6055db2ee1131452667.jpg","previewURL":"https://cdn.beatsaver.com/4db96dd119b51d7f7124b6055db2ee1131452667.mp3"}],"createdAt":"2020-05-09T11:53:28.520Z","updatedAt":"2020-05-09T11:53:28.520Z","lastPublishedAt":"2020-05-09T11:53:28.520Z"},{"id":"6100","name":"Keina Suda - veil [Fire Force Ending]","description":"Fire Force is rad\nBoth the op and ed are also rad\n\nBPM 150 | Length 1:30\nExpert+\nExpert\nHard\nNormal\n\nplease enjoy\n\nDM any feedback on Discord\nETAN#8341","uploader":{"id":4235140,"name":"etan","uniqueSet":true,"hash":"5cff0b7798cc5a672c855775","avatar":"https://cdn.beatsaver.com/avatar/136373107559497728.png","type":"DISCORD"},"metadata":{"bpm":150.0,"duration":91,"songName":"veil","songSubName":"","songAuthorName":"Keina Suda","levelAuthorName":"ETAN"},"stats":{"plays":0,"downloads":5151,"upvotes":1646,"downvotes":23,"score":0.9341},"uploaded":"2019-09-03T00:05:16.685Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"f8bd8b3b1fecc3834a6ea88da39a055c98013823","key":"6100","state":"Published","createdAt":"2019-09-03T00:05:16.685Z","sageScore":3,"diffs":[{"njs":11.0,"offset":0.0,"notes":155,"bombs":0,"obstacles":6,"nps":1.872,"length":207.0,"characteristic":"Standard","difficulty":"Normal","events":2814,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":82.8,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":12.0,"offset":0.0,"notes":203,"bombs":0,"obstacles":6,"nps":2.452,"length":207.0,"characteristic":"Standard","difficulty":"Hard","events":2814,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":82.8,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":14.0,"offset":0.0,"notes":280,"bombs":0,"obstacles":6,"nps":3.373,"length":207.5,"characteristic":"Standard","difficulty":"Expert","events":2814,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":83.0,"paritySummary":{"errors":7,"warns":6,"resets":0}},{"njs":18.0,"offset":0.0,"notes":366,"bombs":5,"obstacles":6,"nps":4.41,"length":207.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":2822,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":83.0,"paritySummary":{"errors":8,"warns":9,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/f8bd8b3b1fecc3834a6ea88da39a055c98013823.zip","coverURL":"https://cdn.beatsaver.com/f8bd8b3b1fecc3834a6ea88da39a055c98013823.jpg","previewURL":"https://cdn.beatsaver.com/f8bd8b3b1fecc3834a6ea88da39a055c98013823.mp3"}],"createdAt":"2019-09-03T00:05:16.685Z","updatedAt":"2019-09-03T00:05:16.685Z","lastPublishedAt":"2019-09-03T00:05:16.685Z"},{"id":"b","name":"Imagine Dragons - Believer","description":"Currently expert only. Events included.","uploader":{"id":12996,"name":"rustic","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e8c4","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro","type":"SIMPLE"},"metadata":{"bpm":125.0,"duration":205,"songName":"Believer","songSubName":"Imagine Dragons","songAuthorName":"Rustic","levelAuthorName":"rustic"},"stats":{"plays":0,"downloads":19970,"upvotes":11803,"downvotes":476,"score":0.9341},"uploaded":"2018-05-08T18:56:36Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"19f2879d11a91b51a5c090d63471c3e8d9b7aee3","key":"b","state":"Published","createdAt":"2018-05-08T18:56:36Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":546,"bombs":0,"obstacles":10,"nps":2.754,"length":413.0,"characteristic":"Standard","difficulty":"Expert","events":551,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":198.24,"paritySummary":{"errors":130,"warns":49,"resets":0},"stars":1.44}],"downloadURL":"https://cdn.beatsaver.com/19f2879d11a91b51a5c090d63471c3e8d9b7aee3.zip","coverURL":"https://cdn.beatsaver.com/19f2879d11a91b51a5c090d63471c3e8d9b7aee3.jpg","previewURL":"https://cdn.beatsaver.com/19f2879d11a91b51a5c090d63471c3e8d9b7aee3.mp3"}],"createdAt":"2018-05-08T18:56:36Z","updatedAt":"2018-05-08T18:56:36Z","lastPublishedAt":"2018-05-08T18:56:36Z"},{"id":"8115","name":"Los! Los! Los! (German Ver.) [Youjo Senki Ending] - Selphius","description":"German cover of Los! Los! Los! performed by Selphius. It was originally performed by Aoi Yuuki, the voice actress of Tanya Degurechaff. \n\nHearing this song in German just feels so right! The original song was also has German lyrics but it was sung by a Japanese so it really didn't fit.","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":119.0,"duration":215,"songName":"Los! Los! Los! (German Ver.)","songSubName":"","songAuthorName":"Selphius","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":10730,"upvotes":1513,"downvotes":19,"score":0.934},"uploaded":"2020-01-25T01:56:05.274Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"cdfd561127d3a71c02af0996c215242fcb789f79","key":"8115","state":"Published","createdAt":"2020-01-25T01:56:05.274Z","sageScore":5,"diffs":[{"njs":12.0,"offset":0.0,"notes":723,"bombs":26,"obstacles":13,"nps":3.468,"length":413.5,"characteristic":"Standard","difficulty":"Hard","events":4753,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":208.487,"paritySummary":{"errors":27,"warns":29,"resets":4}},{"njs":16.0,"offset":0.0,"notes":974,"bombs":16,"obstacles":25,"nps":4.672,"length":413.5,"characteristic":"Standard","difficulty":"Expert","events":4753,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":208.487,"paritySummary":{"errors":21,"warns":12,"resets":4}},{"njs":20.0,"offset":0.5,"notes":1098,"bombs":16,"obstacles":14,"nps":5.267,"length":413.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":4753,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":208.487,"paritySummary":{"errors":20,"warns":13,"resets":2}}],"downloadURL":"https://cdn.beatsaver.com/cdfd561127d3a71c02af0996c215242fcb789f79.zip","coverURL":"https://cdn.beatsaver.com/cdfd561127d3a71c02af0996c215242fcb789f79.jpg","previewURL":"https://cdn.beatsaver.com/cdfd561127d3a71c02af0996c215242fcb789f79.mp3"}],"createdAt":"2020-01-25T01:56:05.274Z","updatedAt":"2020-01-25T01:56:05.274Z","lastPublishedAt":"2020-01-25T01:56:05.274Z"},{"id":"31fa","name":"Joji - SLOW DANCING IN THE DARK","description":"89 BPM / 3:31 Runtime\r\nEasy / 223 Notes\r\nNormal / 327 Notes\r\nHard / 441 Notes\r\nExpert / 631 Notes\r\nExpert+ / ???\r\n\r\nIf this lags your computer, I'm sorry! I tried the best I could to add the walls while also optimizing for performance. Try playing with No Obstacles, that will fix the issue. Should be fine for most people.\r\n\r\nGameplay: https://youtu.be/Pweso54qcwk","uploader":{"id":4284981,"name":"skylerwallace","uniqueSet":true,"hash":"5cff0b7298cc5a672c84ea67","avatar":"https://cdn.beatsaver.com/avatar/398344856868487168.png","type":"DISCORD"},"metadata":{"bpm":89.0,"duration":212,"songName":"SLOW DANCING IN THE DARK","songSubName":"Joji","songAuthorName":"Skyler Wallace","levelAuthorName":"skylerwallace"},"stats":{"plays":0,"downloads":7575,"upvotes":2691,"downvotes":61,"score":0.9338},"uploaded":"2019-01-28T22:17:59Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"c983fa1786f03be4965b2319daa86f74ce0be831","key":"31fa","state":"Published","createdAt":"2019-01-28T22:17:59Z","sageScore":6,"diffs":[{"njs":12.0,"offset":0.0,"notes":223,"bombs":0,"obstacles":55,"nps":1.095,"length":302.0,"characteristic":"Standard","difficulty":"Easy","events":2312,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":203.596,"paritySummary":{"errors":75,"warns":8,"resets":0}},{"njs":10.0,"offset":0.0,"notes":327,"bombs":0,"obstacles":55,"nps":1.601,"length":303.0,"characteristic":"Standard","difficulty":"Normal","events":2312,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":204.27,"paritySummary":{"errors":79,"warns":25,"resets":0}},{"njs":12.0,"offset":0.0,"notes":441,"bombs":0,"obstacles":165,"nps":2.159,"length":303.0,"characteristic":"Standard","difficulty":"Hard","events":2312,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":204.27,"paritySummary":{"errors":55,"warns":38,"resets":0}},{"njs":12.0,"offset":0.0,"notes":631,"bombs":16,"obstacles":258,"nps":3.099,"length":302.0,"characteristic":"Standard","difficulty":"Expert","events":2312,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":203.596,"paritySummary":{"errors":49,"warns":46,"resets":4}}],"downloadURL":"https://cdn.beatsaver.com/c983fa1786f03be4965b2319daa86f74ce0be831.zip","coverURL":"https://cdn.beatsaver.com/c983fa1786f03be4965b2319daa86f74ce0be831.jpg","previewURL":"https://cdn.beatsaver.com/c983fa1786f03be4965b2319daa86f74ce0be831.mp3"}],"createdAt":"2019-01-28T22:17:59Z","updatedAt":"2019-01-28T22:17:59Z","lastPublishedAt":"2019-01-28T22:17:59Z"},{"id":"32d4","name":"MariannE (Lanota Edit) - Yooh","description":"Lanota Edit (2:43)\r\nNotes per Second / Video Play-through (All Full Combo):\r\nEasy: 1.4 / https://streamable.com/6y473\r\nNormal: 1.5 / https://streamable.com/ctc6c\r\nHard: 2.6 / https://streamable.com/ot9ws\r\nExpert: 3.8 / https://streamable.com/4gsdz\r\nExpert+: 6.1 / https://streamable.com/rizv3 (1st Person) \r\n\r\nThe jump in difficulty from Expert to Expert+ is substantial, so watch out!\r\nAll difficulties as always!","uploader":{"id":11373,"name":"redmagi","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e9d2","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9d2?d=retro","type":"SIMPLE"},"metadata":{"bpm":191.0,"duration":164,"songName":"MariannE (Lanota Edit)","songSubName":"Yooh","songAuthorName":"Redmagi","levelAuthorName":"redmagi"},"stats":{"plays":0,"downloads":7763,"upvotes":5249,"downvotes":168,"score":0.9337},"uploaded":"2019-02-01T16:17:26Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"afb47d1abb417a76a4293d29a725d6dd74d76782","key":"32d4","state":"Published","createdAt":"2019-02-01T16:17:26Z","sageScore":8,"diffs":[{"njs":10.0,"offset":1.0,"notes":235,"bombs":0,"obstacles":2,"nps":1.508,"length":496.0,"characteristic":"Standard","difficulty":"Easy","events":8433,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":155.812,"paritySummary":{"errors":19,"warns":19,"resets":0},"stars":0.94},{"njs":12.0,"offset":1.0,"notes":246,"bombs":32,"obstacles":6,"nps":1.579,"length":496.0,"characteristic":"Standard","difficulty":"Normal","events":8433,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":155.812,"paritySummary":{"errors":19,"warns":24,"resets":5},"stars":1.08},{"njs":14.0,"offset":1.0,"notes":435,"bombs":48,"obstacles":4,"nps":2.792,"length":496.0,"characteristic":"Standard","difficulty":"Hard","events":8435,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":155.812,"paritySummary":{"errors":23,"warns":37,"resets":10},"stars":1.65},{"njs":16.0,"offset":1.0,"notes":622,"bombs":86,"obstacles":4,"nps":3.992,"length":496.0,"characteristic":"Standard","difficulty":"Expert","events":8433,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":155.812,"paritySummary":{"errors":43,"warns":39,"resets":5},"stars":2.64},{"njs":18.0,"offset":0.0,"notes":1011,"bombs":0,"obstacles":0,"nps":6.489,"length":496.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":8431,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":155.812,"paritySummary":{"errors":44,"warns":71,"resets":0},"stars":5.71}],"downloadURL":"https://cdn.beatsaver.com/afb47d1abb417a76a4293d29a725d6dd74d76782.zip","coverURL":"https://cdn.beatsaver.com/afb47d1abb417a76a4293d29a725d6dd74d76782.jpg","previewURL":"https://cdn.beatsaver.com/afb47d1abb417a76a4293d29a725d6dd74d76782.mp3"}],"createdAt":"2019-02-01T16:17:26Z","updatedAt":"2019-02-01T16:17:26Z","lastPublishedAt":"2019-02-01T16:17:26Z"},{"id":"a68b","name":"[Noodle Touhou] Masayoshi Minoshima - Bad Apple!! (Nhato Remix)","description":"Expert+ Preview: https://www.youtube.com/watch?v=CpfdPKtiYXs\n\nThis song makes me nostalgic to my first exposure to Touhou. I hope this brings back that nostalgia in a new light before we all fade to black.\n\nThis map is part of the first Touhou map pack brought to you by the Ramen Noodle mapper group! It contains all sorts of covers, arrangements and remix of the original Touhou soundtrack. We hope you enjoy it a lot!\nCheckout the playlist here: https://bsaber.com/noodle-touhou/\n\nComments? Like it? Hate it? Let me know on Discord @Bloodcloak#5725 !","uploader":{"id":71661,"name":"bloodcloak","uniqueSet":true,"hash":"5cff0b7698cc5a672c8551d3","avatar":"https://cdn.beatsaver.com/avatar/205707707187986442.png","type":"DISCORD"},"metadata":{"bpm":138.0,"duration":369,"songName":"Bad Apple!!","songSubName":"ft. nomico (Nhato Remix)","songAuthorName":"Masayoshi Minoshima","levelAuthorName":"Bloodcloak"},"stats":{"plays":0,"downloads":6326,"upvotes":2755,"downvotes":64,"score":0.9336},"uploaded":"2020-05-15T18:01:27.405Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"3b86d374847b41800d8b3aebb2043138db06ad64","key":"a68b","state":"Published","createdAt":"2020-05-15T18:01:27.405Z","sageScore":4,"diffs":[{"njs":12.0,"offset":0.7,"notes":1161,"bombs":0,"obstacles":307,"nps":3.21,"length":832.0,"characteristic":"Standard","difficulty":"Hard","events":6683,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":361.739,"paritySummary":{"errors":6,"warns":6,"resets":0}},{"njs":16.0,"offset":0.0,"notes":1341,"bombs":0,"obstacles":281,"nps":3.707,"length":832.0,"characteristic":"Standard","difficulty":"Expert","events":6683,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":361.739,"paritySummary":{"errors":7,"warns":9,"resets":0}},{"njs":20.0,"offset":-0.4,"notes":1560,"bombs":0,"obstacles":239,"nps":4.312,"length":832.063,"characteristic":"Standard","difficulty":"ExpertPlus","events":6683,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":361.766,"paritySummary":{"errors":16,"warns":24,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/3b86d374847b41800d8b3aebb2043138db06ad64.zip","coverURL":"https://cdn.beatsaver.com/3b86d374847b41800d8b3aebb2043138db06ad64.jpg","previewURL":"https://cdn.beatsaver.com/3b86d374847b41800d8b3aebb2043138db06ad64.mp3"}],"createdAt":"2020-05-15T18:01:27.405Z","updatedAt":"2020-05-15T18:01:27.405Z","lastPublishedAt":"2020-05-15T18:01:27.405Z"},{"id":"1ff4","name":"Sheppard - Geronimo (100K Contest)","description":"This community is amazing, in just 6 months we've reached 100,000 members with no signs of slowing down. To celebrate, this map was created with 21 others to bring you the 100K contest! Here, you can win over $7000 in prizes!!\r\n\r\nTo enter, you need to go to the following website and download the mod installer: https://bsaber.com/100k-contest/\r\n\r\nThe competition is now over, but the maps remain!\r\nVideo Preview: https://www.youtube.com/watch?v=k4nEgDrI0vU","uploader":{"id":4785,"name":"stumi","uniqueSet":false,"hash":"5cff0b7398cc5a672c84f720","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro","type":"SIMPLE"},"metadata":{"bpm":142.0,"duration":219,"songName":"Geronimo","songSubName":"Sheppard","songAuthorName":"Stumi","levelAuthorName":"stumi"},"stats":{"plays":0,"downloads":6998,"upvotes":2775,"downvotes":65,"score":0.9336},"uploaded":"2018-11-12T18:28:10Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"41a84fc21bdbfea8ca03021237662596d798f662","key":"1ff4","state":"Published","createdAt":"2018-11-12T18:28:10Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":293,"bombs":20,"obstacles":21,"nps":1.421,"length":488.0,"characteristic":"Standard","difficulty":"Easy","events":1188,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":206.197,"paritySummary":{"errors":29,"warns":16,"resets":0}},{"njs":10.0,"offset":0.0,"notes":338,"bombs":20,"obstacles":21,"nps":1.639,"length":488.0,"characteristic":"Standard","difficulty":"Normal","events":1188,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":206.197,"paritySummary":{"errors":32,"warns":26,"resets":0}},{"njs":10.0,"offset":0.0,"notes":570,"bombs":20,"obstacles":21,"nps":2.764,"length":488.0,"characteristic":"Standard","difficulty":"Hard","events":1190,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":206.197,"paritySummary":{"errors":33,"warns":30,"resets":0}},{"njs":12.0,"offset":0.0,"notes":707,"bombs":20,"obstacles":21,"nps":3.429,"length":488.0,"characteristic":"Standard","difficulty":"Expert","events":1192,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":206.197,"paritySummary":{"errors":55,"warns":50,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/41a84fc21bdbfea8ca03021237662596d798f662.zip","coverURL":"https://cdn.beatsaver.com/41a84fc21bdbfea8ca03021237662596d798f662.jpg","previewURL":"https://cdn.beatsaver.com/41a84fc21bdbfea8ca03021237662596d798f662.mp3"}],"createdAt":"2018-11-12T18:28:10Z","updatedAt":"2018-11-12T18:28:10Z","lastPublishedAt":"2018-11-12T18:28:10Z"},{"id":"4e86","name":"Zero to Hero - Hercules","description":"E+ FC: https://www.youtube.com/watch?v=SVzMwvrsQa0","uploader":{"id":4285169,"name":"ryger","uniqueSet":true,"hash":"5cff0b7798cc5a672c855a42","avatar":"https://cdn.beatsaver.com/avatar/169266024502263808.png","type":"DISCORD"},"metadata":{"bpm":120.0,"duration":140,"songName":"Zero to Hero","songSubName":"Hercules","songAuthorName":"Ryger","levelAuthorName":"Ryger"},"stats":{"plays":0,"downloads":5259,"upvotes":2235,"downvotes":45,"score":0.9334},"uploaded":"2019-05-22T16:18:18Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"0b4cda7dd0b19972b9965f7c39ad3a04ceb9f110","key":"4e86","state":"Published","createdAt":"2019-05-22T16:18:18Z","sageScore":2,"diffs":[{"njs":12.0,"offset":0.0,"notes":477,"bombs":0,"obstacles":0,"nps":3.529,"length":376.19,"characteristic":"Standard","difficulty":"Hard","events":2354,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":188.095,"paritySummary":{"errors":26,"warns":16,"resets":0}},{"njs":14.0,"offset":0.0,"notes":604,"bombs":0,"obstacles":0,"nps":4.469,"length":376.19,"characteristic":"Standard","difficulty":"Expert","events":2354,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":188.095,"paritySummary":{"errors":30,"warns":19,"resets":0}},{"njs":15.0,"offset":0.0,"notes":644,"bombs":0,"obstacles":0,"nps":4.752,"length":377.206,"characteristic":"Standard","difficulty":"ExpertPlus","events":2354,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":188.603,"paritySummary":{"errors":30,"warns":32,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/0b4cda7dd0b19972b9965f7c39ad3a04ceb9f110.zip","coverURL":"https://cdn.beatsaver.com/0b4cda7dd0b19972b9965f7c39ad3a04ceb9f110.jpg","previewURL":"https://cdn.beatsaver.com/0b4cda7dd0b19972b9965f7c39ad3a04ceb9f110.mp3"}],"createdAt":"2019-05-22T16:18:18Z","updatedAt":"2019-05-22T16:18:18Z","lastPublishedAt":"2019-05-22T16:18:18Z"},{"id":"3700","name":"U Got That","description":"","uploader":{"id":27874,"name":"serenity","uniqueSet":true,"hash":"5cff0b7798cc5a672c855426","avatar":"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855426?d=retro","type":"SIMPLE"},"metadata":{"bpm":124.0,"duration":190,"songName":"U Got That","songSubName":"Halogen","songAuthorName":"Serenity","levelAuthorName":"Serenity"},"stats":{"plays":0,"downloads":6766,"upvotes":7958,"downvotes":296,"score":0.9334},"uploaded":"2019-02-17T05:53:20Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"b671c2401d1b8af29efe71e448f586223e6ca70a","key":"3700","state":"Published","createdAt":"2019-02-17T05:53:20Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":732,"bombs":24,"obstacles":55,"nps":3.96,"length":382.0,"characteristic":"Standard","difficulty":"Expert","events":1040,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":184.839,"paritySummary":{"errors":108,"warns":73,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/b671c2401d1b8af29efe71e448f586223e6ca70a.zip","coverURL":"https://cdn.beatsaver.com/b671c2401d1b8af29efe71e448f586223e6ca70a.jpg","previewURL":"https://cdn.beatsaver.com/b671c2401d1b8af29efe71e448f586223e6ca70a.mp3"}],"createdAt":"2019-02-17T05:53:20Z","updatedAt":"2019-02-17T05:53:20Z","lastPublishedAt":"2019-02-17T05:53:20Z"},{"id":"77e9","name":"Jingo Jungle [Saga of Tanya the Evil Opening] - AmaLee","description":"AmaLee's English cover of \"Jingo Jungle\", the opening from Saga of Tanya the Evil (Youjo Senki). Original song by MYTH & ROID.","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":130.0,"duration":225,"songName":"Jingo Jungle","songSubName":"","songAuthorName":"AmaLee","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":2875,"upvotes":1595,"downvotes":23,"score":0.9333},"uploaded":"2019-12-21T02:44:34.295Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"f90a2e4f8ee7b1f33543cddccb8baea660253d4a","key":"77e9","state":"Published","createdAt":"2019-12-21T02:44:34.295Z","sageScore":5,"diffs":[{"njs":12.0,"offset":0.0,"notes":581,"bombs":104,"obstacles":28,"nps":2.647,"length":475.5,"characteristic":"Standard","difficulty":"Hard","events":5987,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":219.462,"paritySummary":{"errors":35,"warns":15,"resets":10}},{"njs":15.0,"offset":0.0,"notes":950,"bombs":78,"obstacles":14,"nps":4.329,"length":475.5,"characteristic":"Standard","difficulty":"Expert","events":5987,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":219.462,"paritySummary":{"errors":42,"warns":48,"resets":8}},{"njs":17.0,"offset":0.0,"notes":1184,"bombs":105,"obstacles":17,"nps":5.395,"length":475.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":5987,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":219.462,"paritySummary":{"errors":32,"warns":43,"resets":16}}],"downloadURL":"https://cdn.beatsaver.com/f90a2e4f8ee7b1f33543cddccb8baea660253d4a.zip","coverURL":"https://cdn.beatsaver.com/f90a2e4f8ee7b1f33543cddccb8baea660253d4a.jpg","previewURL":"https://cdn.beatsaver.com/f90a2e4f8ee7b1f33543cddccb8baea660253d4a.mp3"}],"createdAt":"2019-12-21T02:44:34.295Z","updatedAt":"2019-12-21T02:44:34.295Z","lastPublishedAt":"2019-12-21T02:44:34.295Z"},{"id":"16ff","name":"Little Swing - AronChupa","description":"Preview: https://youtu.be/_IERvrKBKB0\r\nI wasn't happy with all the other versions of this song, so I made my own.","uploader":{"id":4285668,"name":"connorjc","uniqueSet":true,"hash":"5cff0b7398cc5a672c84fb89","avatar":"https://cdn.beatsaver.com/avatar/99724057217355776.png","type":"DISCORD"},"metadata":{"bpm":126.0,"duration":165,"songName":"Little Swing","songSubName":"AronChupa feat. Little Sis Nora","songAuthorName":"ConnorJC","levelAuthorName":"ConnorJC"},"stats":{"plays":0,"downloads":4721,"upvotes":2877,"downvotes":70,"score":0.9333},"uploaded":"2018-09-24T14:51:17Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"235336f468a6290c87d724616e9b1d952ae3b8f2","key":"16ff","state":"Published","createdAt":"2018-09-24T14:51:17Z","sageScore":4,"diffs":[{"njs":12.0,"offset":0.0,"notes":669,"bombs":0,"obstacles":28,"nps":4.216,"length":333.25,"characteristic":"Standard","difficulty":"Expert","events":460,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":158.69,"paritySummary":{"errors":37,"warns":55,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/235336f468a6290c87d724616e9b1d952ae3b8f2.zip","coverURL":"https://cdn.beatsaver.com/235336f468a6290c87d724616e9b1d952ae3b8f2.jpg","previewURL":"https://cdn.beatsaver.com/235336f468a6290c87d724616e9b1d952ae3b8f2.mp3"}],"createdAt":"2018-09-24T14:51:17Z","updatedAt":"2018-09-24T14:51:17Z","lastPublishedAt":"2018-09-24T14:51:17Z"},{"id":"1230","name":"Hymn for the Weekend - Coldplay","description":"Hymn for the weekend by Coldplay\r\nBPM: 90 (AHH SLOW)\r\nRuntime: 4m3s\r\nDifficulties: Easy, Normal, Hard, Expert\r\n\r\nDemo : https://vimeo.com/286997137","uploader":{"id":47059,"name":"rocket","uniqueSet":true,"hash":"5cff0b7398cc5a672c84f1c0","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f1c0?d=retro","type":"SIMPLE"},"metadata":{"bpm":90.0,"duration":244,"songName":"Hymn For The Weekend","songSubName":"Coldplay","songAuthorName":"Rocket","levelAuthorName":"rocket"},"stats":{"plays":0,"downloads":9700,"upvotes":3156,"downvotes":81,"score":0.9333},"uploaded":"2018-08-28T01:41:15Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"f050cd142882f102226efb614cca3a1ac1368fff","key":"1230","state":"Published","createdAt":"2018-08-28T01:41:15Z","sageScore":5,"diffs":[{"njs":12.0,"offset":0.0,"notes":202,"bombs":0,"obstacles":8,"nps":0.935,"length":324.0,"characteristic":"Standard","difficulty":"Easy","events":892,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":216.0,"paritySummary":{"errors":35,"warns":7,"resets":0}},{"njs":12.0,"offset":0.0,"notes":377,"bombs":0,"obstacles":8,"nps":1.745,"length":324.0,"characteristic":"Standard","difficulty":"Normal","events":895,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":216.0,"paritySummary":{"errors":49,"warns":39,"resets":0}},{"njs":12.0,"offset":0.0,"notes":573,"bombs":0,"obstacles":8,"nps":2.617,"length":328.375,"characteristic":"Standard","difficulty":"Hard","events":893,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":218.917,"paritySummary":{"errors":50,"warns":56,"resets":0}},{"njs":12.0,"offset":0.0,"notes":729,"bombs":0,"obstacles":8,"nps":3.33,"length":328.375,"characteristic":"Standard","difficulty":"Expert","events":893,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":218.917,"paritySummary":{"errors":78,"warns":87,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/f050cd142882f102226efb614cca3a1ac1368fff.zip","coverURL":"https://cdn.beatsaver.com/f050cd142882f102226efb614cca3a1ac1368fff.jpg","previewURL":"https://cdn.beatsaver.com/f050cd142882f102226efb614cca3a1ac1368fff.mp3"}],"createdAt":"2018-08-28T01:41:15Z","updatedAt":"2018-08-28T01:41:15Z","lastPublishedAt":"2018-08-28T01:41:15Z"},{"id":"276a","name":"Ain't Nothin' like a Funky Beat - Hideki Naganuma","description":"BAH BAH BAAAH BAH\r\nBAHBAH BUBAH BAH BAH BAAAAH BAH\r\nAint nothin like a funky beat\r\nMy Camera plus mod wasnt working :(\r\n\r\nDifficulties - Expert, Hard, Normal, , Easy\r\nBPM - 142\r\nPreview: https://youtu.be/92pCsIPxv10","uploader":{"id":47059,"name":"rocket","uniqueSet":true,"hash":"5cff0b7398cc5a672c84f1c0","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f1c0?d=retro","type":"SIMPLE"},"metadata":{"bpm":142.0,"duration":205,"songName":"AIN'T NOTHIN' LIKE A FUNKY BEAT","songSubName":"Hideki Naganuma","songAuthorName":"Rocket","levelAuthorName":"rocket"},"stats":{"plays":0,"downloads":5635,"upvotes":2795,"downvotes":67,"score":0.9332},"uploaded":"2018-12-22T17:07:11Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"a2c21a3a478f14422185f77cc8f9030f638fcf06","key":"276a","state":"Published","createdAt":"2018-12-22T17:07:11Z","sageScore":6,"diffs":[{"njs":15.0,"offset":0.0,"notes":237,"bombs":0,"obstacles":14,"nps":1.214,"length":462.0,"characteristic":"Standard","difficulty":"Easy","events":1171,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":195.211,"paritySummary":{"errors":30,"warns":16,"resets":0}},{"njs":15.0,"offset":0.0,"notes":441,"bombs":0,"obstacles":14,"nps":2.239,"length":466.25,"characteristic":"Standard","difficulty":"Normal","events":1171,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":197.007,"paritySummary":{"errors":75,"warns":40,"resets":0}},{"njs":15.0,"offset":0.0,"notes":684,"bombs":0,"obstacles":14,"nps":3.472,"length":466.25,"characteristic":"Standard","difficulty":"Hard","events":1171,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":197.007,"paritySummary":{"errors":70,"warns":95,"resets":0}},{"njs":15.0,"offset":0.0,"notes":838,"bombs":0,"obstacles":14,"nps":4.254,"length":466.25,"characteristic":"Standard","difficulty":"Expert","events":1171,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":197.007,"paritySummary":{"errors":66,"warns":76,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/a2c21a3a478f14422185f77cc8f9030f638fcf06.zip","coverURL":"https://cdn.beatsaver.com/a2c21a3a478f14422185f77cc8f9030f638fcf06.jpg","previewURL":"https://cdn.beatsaver.com/a2c21a3a478f14422185f77cc8f9030f638fcf06.mp3"}],"createdAt":"2018-12-22T17:07:11Z","updatedAt":"2018-12-22T17:07:11Z","lastPublishedAt":"2018-12-22T17:07:11Z"},{"id":"46d4","name":"Rap God - Eminem","description":"","uploader":{"id":4285169,"name":"ryger","uniqueSet":true,"hash":"5cff0b7798cc5a672c855a42","avatar":"https://cdn.beatsaver.com/avatar/169266024502263808.png","type":"DISCORD"},"metadata":{"bpm":148.0,"duration":366,"songName":"Rap God","songSubName":"Eminem","songAuthorName":"Ryger","levelAuthorName":"Ryger"},"stats":{"plays":0,"downloads":17173,"upvotes":8866,"downvotes":344,"score":0.933},"uploaded":"2019-04-18T16:38:34Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"a38fd8581eb892cc7090f78bfe61e9c256478cf3","key":"46d4","state":"Published","createdAt":"2019-04-18T16:38:34Z","sageScore":6,"diffs":[{"njs":15.0,"offset":0.0,"notes":2060,"bombs":6,"obstacles":2,"nps":5.724,"length":887.75,"characteristic":"Standard","difficulty":"Expert","events":9351,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":359.899,"paritySummary":{"errors":80,"warns":66,"resets":0}},{"njs":15.0,"offset":0.0,"notes":2060,"bombs":6,"obstacles":2,"nps":5.724,"length":887.75,"characteristic":"Standard","difficulty":"ExpertPlus","events":9351,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":359.899,"paritySummary":{"errors":80,"warns":70,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/a38fd8581eb892cc7090f78bfe61e9c256478cf3.zip","coverURL":"https://cdn.beatsaver.com/a38fd8581eb892cc7090f78bfe61e9c256478cf3.jpg","previewURL":"https://cdn.beatsaver.com/a38fd8581eb892cc7090f78bfe61e9c256478cf3.mp3"}],"createdAt":"2019-04-18T16:38:34Z","updatedAt":"2019-04-18T16:38:34Z","lastPublishedAt":"2019-04-18T16:38:34Z"},{"id":"1188e","name":"Fox Stevenson - All Eyes On Me","description":"Man I love Stan, had a lot of fun making this :p\n\nhas Chroma lights","uploader":{"id":4284201,"name":"nitronikexe","uniqueSet":true,"hash":"5cff0b7798cc5a672c855d84","avatar":"https://cdn.beatsaver.com/avatar/428230049704181760.png","type":"DISCORD"},"metadata":{"bpm":172.0,"duration":181,"songName":"All Eyes On Me","songSubName":"","songAuthorName":"Fox Stevenson","levelAuthorName":"nitronik.exe"},"stats":{"plays":0,"downloads":7649,"upvotes":1891,"downvotes":34,"score":0.9328},"uploaded":"2020-11-30T15:14:16.512Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"77300a040e85107d5a745f2f9f2e5ced43205f4a","key":"1188e","state":"Published","createdAt":"2020-11-30T15:14:16.512Z","sageScore":5,"diffs":[{"njs":14.0,"offset":1.0,"notes":491,"bombs":12,"obstacles":66,"nps":2.779,"length":506.5,"characteristic":"Standard","difficulty":"Hard","events":4370,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":176.686,"paritySummary":{"errors":0,"warns":0,"resets":6}},{"njs":17.0,"offset":0.2,"notes":748,"bombs":0,"obstacles":27,"nps":4.213,"length":509.0,"characteristic":"Standard","difficulty":"Expert","events":4370,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":177.558,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":21.0,"offset":-0.3,"notes":951,"bombs":0,"obstacles":27,"nps":5.382,"length":506.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":4370,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":176.686,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/77300a040e85107d5a745f2f9f2e5ced43205f4a.zip","coverURL":"https://cdn.beatsaver.com/77300a040e85107d5a745f2f9f2e5ced43205f4a.jpg","previewURL":"https://cdn.beatsaver.com/77300a040e85107d5a745f2f9f2e5ced43205f4a.mp3"}],"createdAt":"2020-11-30T15:14:16.512Z","updatedAt":"2020-11-30T15:14:16.512Z","lastPublishedAt":"2020-11-30T15:14:16.512Z"},{"id":"2c3","name":"Koto - Clozee","description":"Here it is finally, Koto - Clozee from LIV's announcement featuring their depth camera so you don't have to have a green screen! https://twitter.com/LIV/status/1001490921295417345\r\n\r\nIf you love my maps and want to support me, heres my patreon!\r\nhttps://www.patreon.com/purphorosVR","uploader":{"id":49373,"name":"purphoros","uniqueSet":true,"hash":"5cff0b7298cc5a672c84ea98","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ea98?d=retro","type":"SIMPLE"},"metadata":{"bpm":100.0,"duration":253,"songName":"Koto","songSubName":"CloZee","songAuthorName":"Purphoros","levelAuthorName":"purphoros"},"stats":{"plays":0,"downloads":5247,"upvotes":3689,"downvotes":105,"score":0.9328},"uploaded":"2018-05-29T17:19:09Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"c1638525606ecb7aea6d6a71d124aa79296ab842","key":"2c3","state":"Published","createdAt":"2018-05-29T17:19:09Z","sageScore":4,"diffs":[{"njs":10.0,"offset":0.0,"notes":858,"bombs":0,"obstacles":12,"nps":3.575,"length":400.0,"characteristic":"Standard","difficulty":"Expert","events":72,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":240.0,"paritySummary":{"errors":108,"warns":55,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/c1638525606ecb7aea6d6a71d124aa79296ab842.zip","coverURL":"https://cdn.beatsaver.com/c1638525606ecb7aea6d6a71d124aa79296ab842.jpg","previewURL":"https://cdn.beatsaver.com/c1638525606ecb7aea6d6a71d124aa79296ab842.mp3"}],"createdAt":"2018-05-29T17:19:09Z","updatedAt":"2018-05-29T17:19:09Z","lastPublishedAt":"2018-05-29T17:19:09Z"},{"id":"15b16","name":"Codly - Lucy, The God Of Time [Wall Map]","description":"This map has 2 diffs Expert and ExpertPlus\nExpert - Reddek\nExpertPlus - shan_man\n\nLink to preview: https://youtu.be/_LUXKlcpue4\n\nLink to original song: https://youtu.be/kyCXzxmebB4\nSong By: Codly and Sakuzyo\n\nOkay, I put way to much time into this...\n\nHuge thanks to Shan_Man for making a diff in this\n\nAlso thank you Reaxt for your help with the last drop\n\nMade with \n-Demo.js script\n-ScuffedWalls\n\nshan_man: https://beatsaver.com/uploader/5ec5aaa616c9680006500e0a\n\nWould love some feedback in the dms!:\nReddek#5864\nshan_man#7777","uploader":{"id":4233941,"name":"reddek","uniqueSet":true,"hash":"5dbfb4426dea0b0006bd328d","avatar":"https://cdn.beatsaver.com/avatar/177436487086768129.png","type":"DISCORD"},"metadata":{"bpm":170.0,"duration":267,"songName":"Lucy, The God of Time","songSubName":"","songAuthorName":"Codly","levelAuthorName":"Shan_Man & Reddek"},"stats":{"plays":0,"downloads":3574,"upvotes":1185,"downvotes":11,"score":0.9327},"uploaded":"2021-03-21T02:47:31.861Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"dd4a025f814b8570f2726939b1c5b000ed210ecf","key":"15b16","state":"Published","createdAt":"2021-03-21T02:47:31.861Z","sageScore":3,"diffs":[{"njs":20.0,"offset":-0.4,"notes":873,"bombs":117,"obstacles":4342,"nps":3.654,"length":677.0,"characteristic":"Standard","difficulty":"Expert","events":31216,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":238.941,"paritySummary":{"errors":0,"warns":0,"resets":3}},{"njs":20.0,"offset":-0.4,"notes":1353,"bombs":44,"obstacles":4342,"nps":5.662,"length":677.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":31217,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":238.941,"paritySummary":{"errors":0,"warns":0,"resets":3}}],"downloadURL":"https://cdn.beatsaver.com/dd4a025f814b8570f2726939b1c5b000ed210ecf.zip","coverURL":"https://cdn.beatsaver.com/dd4a025f814b8570f2726939b1c5b000ed210ecf.jpg","previewURL":"https://cdn.beatsaver.com/dd4a025f814b8570f2726939b1c5b000ed210ecf.mp3"}],"createdAt":"2021-03-21T02:47:31.861Z","updatedAt":"2021-03-21T02:47:31.861Z","lastPublishedAt":"2021-03-21T02:47:31.861Z"},{"id":"2c3e","name":"Pump It - Black Eyed Peas","description":"Map #9. This was a special request by RedMagi, and he certainly deserves it for tirelessly testing all the other garbage we throw at him. Baxter with the funky patterns, RedMagi with some challenging streams in Expert+, and ALSO the amazing lighting effects! (Oh and of course a heck of a lot of play testing and feedback for fine tuning.) Hope you enjoy it as much as we do.\r\n\r\nAlso a big thank you to all our playtesters for the useful feedback: ManDynasty, Trolav, Crankor, Scrappy, and TurtleSquared\r\n\r\nhttps://youtu.be/YJnL0gq1z7s (Easy)\r\nhttps://youtu.be/U0DIjo4_ZE0 (Normal)\r\nhttps://youtu.be/zks4TgpfoR4 (Hard)\r\nhttps://youtu.be/rRq_fHRSCoI (Expert 3rd person)\r\nhttps://youtu.be/9ThPg99Xm9A (Expert 1st person)\r\nhttps://youtu.be/NPOPWH8bb10 (Expert+)","uploader":{"id":27595,"name":"baxter395","uniqueSet":true,"hash":"5cff0b7598cc5a672c852f7b","avatar":"https://www.gravatar.com/avatar/5cff0b7598cc5a672c852f7b?d=retro","type":"SIMPLE"},"metadata":{"bpm":154.0,"duration":215,"songName":"Pump It","songSubName":"Black Eyed Peas","songAuthorName":"baxter395 (M) RedMagi (M, L)","levelAuthorName":"baxter395"},"stats":{"plays":0,"downloads":12322,"upvotes":4839,"downvotes":156,"score":0.9327},"uploaded":"2019-01-09T05:13:56Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"2884021451135e751d3c442ae92243697744b349","key":"2c3e","state":"Published","createdAt":"2019-01-09T05:13:56Z","sageScore":4,"diffs":[{"njs":10.0,"offset":0.0,"notes":306,"bombs":0,"obstacles":15,"nps":1.144,"length":686.679,"characteristic":"Standard","difficulty":"Easy","events":9156,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":267.537,"paritySummary":{"errors":72,"warns":22,"resets":0}},{"njs":11.0,"offset":0.0,"notes":393,"bombs":0,"obstacles":22,"nps":1.877,"length":537.407,"characteristic":"Standard","difficulty":"Normal","events":9156,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":209.38,"paritySummary":{"errors":77,"warns":43,"resets":0}},{"njs":12.0,"offset":0.0,"notes":583,"bombs":0,"obstacles":16,"nps":2.779,"length":538.36,"characteristic":"Standard","difficulty":"Hard","events":9156,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":209.751,"paritySummary":{"errors":63,"warns":68,"resets":0}},{"njs":16.0,"offset":0.0,"notes":890,"bombs":40,"obstacles":59,"nps":4.243,"length":538.36,"characteristic":"Standard","difficulty":"Expert","events":9156,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":209.751,"paritySummary":{"errors":88,"warns":125,"resets":7}},{"njs":18.0,"offset":0.0,"notes":1048,"bombs":24,"obstacles":63,"nps":4.996,"length":538.392,"characteristic":"Standard","difficulty":"ExpertPlus","events":9156,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":209.763,"paritySummary":{"errors":93,"warns":104,"resets":2}}],"downloadURL":"https://cdn.beatsaver.com/2884021451135e751d3c442ae92243697744b349.zip","coverURL":"https://cdn.beatsaver.com/2884021451135e751d3c442ae92243697744b349.jpg","previewURL":"https://cdn.beatsaver.com/2884021451135e751d3c442ae92243697744b349.mp3"}],"createdAt":"2019-01-09T05:13:56Z","updatedAt":"2019-01-09T05:13:56Z","lastPublishedAt":"2019-01-09T05:13:56Z"},{"id":"3f38","name":"Sk8er Boi - Avril Lavigne","description":"\"Sk8er Boi\" (pronounced \"skater boy\") is a song by Canadian singer-songwriter Avril Lavigne.\r\n\r\nThis song was on my list of songs to map and I was excited when I saw someone had made one today, and after playing it I decided to make my own map of it.","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":150.0,"duration":206,"songName":"Sk8er Boi","songSubName":"Avril Lavigne","songAuthorName":"Joetastic","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":8202,"upvotes":2443,"downvotes":55,"score":0.9326},"uploaded":"2019-03-20T18:01:26Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"1078f8128effc0b79f19adf2b7aeed613afabac6","key":"3f38","state":"Published","createdAt":"2019-03-20T18:01:26Z","sageScore":6,"diffs":[{"njs":15.0,"offset":0.0,"notes":893,"bombs":0,"obstacles":0,"nps":4.71,"length":474.0,"characteristic":"Standard","difficulty":"Expert","events":1410,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":189.6,"paritySummary":{"errors":41,"warns":34,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/1078f8128effc0b79f19adf2b7aeed613afabac6.zip","coverURL":"https://cdn.beatsaver.com/1078f8128effc0b79f19adf2b7aeed613afabac6.jpg","previewURL":"https://cdn.beatsaver.com/1078f8128effc0b79f19adf2b7aeed613afabac6.mp3"}],"createdAt":"2019-03-20T18:01:26Z","updatedAt":"2019-03-20T18:01:26Z","lastPublishedAt":"2019-03-20T18:01:26Z"},{"id":"19f3","name":"PONPONPON - Kyary Pamyu Pamyu","description":"Everyday PON\nEvery time is PON\n\nExpert is relatively easy, pretty close to OST standards\nHard is pretty close to OST as well\nNormal -- first time doing Normal, give any feedback on bsaber dot com\n\nExpert Preview: https://youtu.be/4AMzxcWDqPM\nFollow me on Twitter u won't\nhttps://twitter.com/aggrogahu\n\nShoutout to Geb and RedMagi for playtesting","uploader":{"id":4284613,"name":"aggrogahu","uniqueSet":true,"hash":"5cff0b7398cc5a672c84fdad","avatar":"https://cdn.beatsaver.com/avatar/158363872649150464.png","type":"DISCORD"},"metadata":{"bpm":128.0,"duration":247,"songName":"PONPONPON","songSubName":"Kyary Pamyu Pamyu","songAuthorName":"aggrogahu","levelAuthorName":"aggrogahu"},"stats":{"plays":0,"downloads":4544,"upvotes":2285,"downvotes":49,"score":0.9326},"uploaded":"2018-10-12T23:21:38Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"c1b08e5c05c9e6dad4096f3ff04d1e0497a0a339","key":"19f3","state":"Published","createdAt":"2018-10-12T23:21:38Z","sageScore":4,"diffs":[{"njs":10.0,"offset":0.0,"notes":432,"bombs":2,"obstacles":38,"nps":1.832,"length":503.0,"characteristic":"Standard","difficulty":"Normal","events":636,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":235.781,"paritySummary":{"errors":101,"warns":37,"resets":1}},{"njs":10.0,"offset":0.0,"notes":541,"bombs":1,"obstacles":38,"nps":2.29,"length":504.0,"characteristic":"Standard","difficulty":"Hard","events":636,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":236.25,"paritySummary":{"errors":133,"warns":61,"resets":0}},{"njs":10.0,"offset":0.0,"notes":714,"bombs":2,"obstacles":48,"nps":3.022,"length":504.0,"characteristic":"Standard","difficulty":"Expert","events":636,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":236.25,"paritySummary":{"errors":120,"warns":84,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/c1b08e5c05c9e6dad4096f3ff04d1e0497a0a339.zip","coverURL":"https://cdn.beatsaver.com/c1b08e5c05c9e6dad4096f3ff04d1e0497a0a339.jpg","previewURL":"https://cdn.beatsaver.com/c1b08e5c05c9e6dad4096f3ff04d1e0497a0a339.mp3"}],"createdAt":"2018-10-12T23:21:38Z","updatedAt":"2018-10-12T23:21:38Z","lastPublishedAt":"2018-10-12T23:21:38Z"},{"id":"11b7a","name":"Still Alive - Portal","description":"I've wanted to map this song for a while now. And since this one's probably the last Portal song I'll map, I gave it my best. \r\n\r\nP.S. - I'm so glad to be back mapping this month. I had to take a break due to overwhelming stress, but now I'm feeling ready again.\r\nI hope you enjoy.\r\n\r\nPortal on Steam:\r\nhttps://store.steampowered.com/app/400/Portal/","uploader":{"id":4284694,"name":"jokidum","uniqueSet":true,"hash":"5e15518d47f1600006e912cc","avatar":"https://cdn.beatsaver.com/avatar/494282373094047745.png","type":"DISCORD"},"metadata":{"bpm":120.0,"duration":176,"songName":"Still Alive","songSubName":"- Portal","songAuthorName":"Jonathan Coulton","levelAuthorName":"Jokidum"},"stats":{"plays":0,"downloads":5965,"upvotes":1927,"downvotes":36,"score":0.9325},"uploaded":"2020-12-04T20:30:44.132Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"8c03b43484b0dd1fc7d8a3104a82f0992a001c6c","key":"11b7a","state":"Published","createdAt":"2020-12-04T20:30:44.132Z","sageScore":4,"diffs":[{"njs":12.0,"offset":0.0,"notes":490,"bombs":0,"obstacles":13,"nps":2.853,"length":343.5,"characteristic":"Standard","difficulty":"Expert","events":1060,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":171.75,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":16.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"Lightshow","difficulty":"Easy","events":1060,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/8c03b43484b0dd1fc7d8a3104a82f0992a001c6c.zip","coverURL":"https://cdn.beatsaver.com/8c03b43484b0dd1fc7d8a3104a82f0992a001c6c.jpg","previewURL":"https://cdn.beatsaver.com/8c03b43484b0dd1fc7d8a3104a82f0992a001c6c.mp3"}],"createdAt":"2020-12-04T20:30:44.132Z","updatedAt":"2020-12-04T20:30:44.132Z","lastPublishedAt":"2020-12-04T20:30:44.132Z"},{"id":"1ff9","name":"Thaehan - Circus | - 100k Contest","description":"This is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes. Go to https://bsaber.com/100k-contest/ to register!\r\n\r\nI have changed some parts of the map since\r\n\r\nPreview: https://www.youtube.com/watch?v=e4stySCsNIM","uploader":{"id":4286278,"name":"ruckus","uniqueSet":true,"hash":"5cff0b7398cc5a672c84f1d8","avatar":"https://cdn.beatsaver.com/avatar/239082462083284992.png","type":"DISCORD"},"metadata":{"bpm":196.0,"duration":148,"songName":"Circus","songSubName":"Thaehan","songAuthorName":"Ruckus","levelAuthorName":"ruckus"},"stats":{"plays":0,"downloads":4649,"upvotes":2448,"downvotes":56,"score":0.9324},"uploaded":"2018-11-12T20:35:47Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"e2934fbc194a51aa3579613bd88dc47503016c8a","key":"1ff9","state":"Published","createdAt":"2018-11-12T20:35:47Z","sageScore":7,"diffs":[{"njs":11.0,"offset":0.0,"notes":251,"bombs":0,"obstacles":12,"nps":1.83,"length":448.0,"characteristic":"Standard","difficulty":"Easy","events":2733,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":137.143,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":11.0,"offset":0.0,"notes":462,"bombs":0,"obstacles":0,"nps":3.369,"length":448.0,"characteristic":"Standard","difficulty":"Normal","events":2735,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":137.143,"paritySummary":{"errors":29,"warns":27,"resets":0}},{"njs":12.0,"offset":0.0,"notes":513,"bombs":0,"obstacles":0,"nps":3.741,"length":448.0,"characteristic":"Standard","difficulty":"Hard","events":2735,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":137.143,"paritySummary":{"errors":62,"warns":42,"resets":0}},{"njs":14.0,"offset":0.0,"notes":719,"bombs":0,"obstacles":0,"nps":5.24,"length":448.273,"characteristic":"Standard","difficulty":"Expert","events":2736,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":137.226,"paritySummary":{"errors":60,"warns":73,"resets":0}},{"njs":17.0,"offset":0.0,"notes":739,"bombs":0,"obstacles":0,"nps":5.386,"length":448.25,"characteristic":"Standard","difficulty":"ExpertPlus","events":3278,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":137.219,"paritySummary":{"errors":58,"warns":79,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/e2934fbc194a51aa3579613bd88dc47503016c8a.zip","coverURL":"https://cdn.beatsaver.com/e2934fbc194a51aa3579613bd88dc47503016c8a.jpg","previewURL":"https://cdn.beatsaver.com/e2934fbc194a51aa3579613bd88dc47503016c8a.mp3"}],"createdAt":"2018-11-12T20:35:47Z","updatedAt":"2018-11-12T20:35:47Z","lastPublishedAt":"2018-11-12T20:35:47Z"},{"id":"943e","name":"The Only Thing They Fear is You - Mick Gordon DOOM OST","description":"THE 360 MAP REQUIRES THE MAPPING EXTENSIONS MOD FOR BEAT SABER v1.8.0 OR GREATER (the Timbaland Update). OLDER VERSIONS OF MAPPING EXTENSIONS WILL NOT WORK.\n\nEpilepsy warning. Play with Static Lights or dim Custom Colors if prone to epileptic attacks.\nLightshow nerfed on Hard, Expert, and 360 difficulties.\n\nThis map’s Custom Colors are enabled via SongCore. To disable them, go to Mod Settings > SongCore from the ingame Main Menu.\n\n103 BPM / 3:20 Duration\n\nStandard (No Mapping Extensions)\nI'm too young to die - 482 notes (2.41 NPS)\nHurt me plenty - 603 notes (3.02 NPS)\nUltra-Violence - 713 notes (3.57 NPS)\n\n360 (Mapping Extensions)\nNightmare - 713 notes (3.57 NPS) ~6k rotations\n\nLightshow (No Mapping Extensions / SongCore required)\nLightshow - 20359 events\n\nTougeVR's Mixed Reality Playthrough: https://youtu.be/8arRphzeiDE\nMapping Extensions for pre-v1.8.0: https://drive.google.com/file/d/1-59-n3OLqNk4LOZ7MHo9AJ87-2__tEFo/view?usp=sharing","uploader":{"id":4284981,"name":"skylerwallace","uniqueSet":true,"hash":"5cff0b7298cc5a672c84ea67","avatar":"https://cdn.beatsaver.com/avatar/398344856868487168.png","type":"DISCORD"},"metadata":{"bpm":103.0,"duration":200,"songName":"The Only Thing They Fear is You","songSubName":"","songAuthorName":"Mick Gordon","levelAuthorName":"Skyler Wallace"},"stats":{"plays":0,"downloads":13590,"upvotes":4650,"downvotes":150,"score":0.9322},"uploaded":"2020-03-27T08:59:46.875Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"ac3976bd01d289aaacf03423706010e843a824d5","key":"943e","state":"Published","createdAt":"2020-03-27T08:59:46.875Z","sageScore":6,"diffs":[{"njs":13.0,"offset":-0.25,"notes":482,"bombs":370,"obstacles":376,"nps":2.556,"length":323.688,"characteristic":"Standard","difficulty":"Hard","events":17272,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":188.556,"paritySummary":{"errors":25,"warns":33,"resets":0}},{"njs":16.0,"offset":0.5,"notes":603,"bombs":721,"obstacles":375,"nps":3.193,"length":324.187,"characteristic":"Standard","difficulty":"Expert","events":17272,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":188.847,"paritySummary":{"errors":3,"warns":10,"resets":97}},{"njs":19.0,"offset":0.25,"notes":713,"bombs":769,"obstacles":379,"nps":3.635,"length":336.689,"characteristic":"Standard","difficulty":"ExpertPlus","events":20359,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":196.13,"paritySummary":{"errors":10,"warns":52,"resets":95}},{"njs":19.0,"offset":0.25,"notes":713,"bombs":7824,"obstacles":9601,"nps":3.623,"length":337.843,"characteristic":"360Degree","difficulty":"ExpertPlus","events":25883,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":196.802,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":10.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"Lightshow","difficulty":"Easy","events":20359,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/ac3976bd01d289aaacf03423706010e843a824d5.zip","coverURL":"https://cdn.beatsaver.com/ac3976bd01d289aaacf03423706010e843a824d5.jpg","previewURL":"https://cdn.beatsaver.com/ac3976bd01d289aaacf03423706010e843a824d5.mp3"}],"createdAt":"2020-03-27T08:59:46.875Z","updatedAt":"2020-03-27T08:59:46.875Z","lastPublishedAt":"2020-03-27T08:59:46.875Z"},{"id":"4274","name":"Flesh - Nightcore (RubyChan)","description":"BPM: 152.674\r\nNPS: N: 1.92 H: 2.91 E: 3.71 E+: 4.26\r\nNotes: N: 425 H: 644 E: 819 E+: 942\r\nWalls: N: 80 H:82 E:96 E+: 85\r\nBombs: N: 20 H:34 E: 50 E+: 60\r\n\r\nNormal/Hard tend to follow the beat, while Expert/Expert+ tend to follow the vocals. Thanks to Redmagi and helencarnate for play testing!","uploader":{"id":4285188,"name":"fruhead","uniqueSet":true,"hash":"5cff0b7598cc5a672c852683","avatar":"https://cdn.beatsaver.com/avatar/174000100413145090.png","type":"DISCORD"},"metadata":{"bpm":153.0,"duration":221,"songName":"Flesh","songSubName":"Nighctore (RubyChan)","songAuthorName":"fruhead","levelAuthorName":"fruhead"},"stats":{"plays":0,"downloads":3291,"upvotes":1693,"downvotes":29,"score":0.9319},"uploaded":"2019-03-31T18:25:07Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"0acc713b47e8228b242fb42c0db29959014f8124","key":"4274","state":"Published","createdAt":"2019-03-31T18:25:07Z","sageScore":3,"diffs":[{"njs":12.0,"offset":0.0,"notes":425,"bombs":20,"obstacles":80,"nps":2.116,"length":511.0,"characteristic":"Standard","difficulty":"Normal","events":7207,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":200.392,"paritySummary":{"errors":13,"warns":0,"resets":10}},{"njs":14.0,"offset":0.0,"notes":644,"bombs":34,"obstacles":82,"nps":3.207,"length":511.0,"characteristic":"Standard","difficulty":"Hard","events":7207,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":200.392,"paritySummary":{"errors":14,"warns":14,"resets":18}},{"njs":16.0,"offset":0.0,"notes":819,"bombs":50,"obstacles":96,"nps":4.078,"length":511.0,"characteristic":"Standard","difficulty":"Expert","events":7207,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":200.392,"paritySummary":{"errors":32,"warns":56,"resets":19}},{"njs":16.0,"offset":0.0,"notes":942,"bombs":60,"obstacles":85,"nps":4.691,"length":511.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":7207,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":200.392,"paritySummary":{"errors":23,"warns":66,"resets":23}}],"downloadURL":"https://cdn.beatsaver.com/0acc713b47e8228b242fb42c0db29959014f8124.zip","coverURL":"https://cdn.beatsaver.com/0acc713b47e8228b242fb42c0db29959014f8124.jpg","previewURL":"https://cdn.beatsaver.com/0acc713b47e8228b242fb42c0db29959014f8124.mp3"}],"createdAt":"2019-03-31T18:25:07Z","updatedAt":"2019-03-31T18:25:07Z","lastPublishedAt":"2019-03-31T18:25:07Z"},{"id":"5fda","name":"Mr. Blue Sky","description":"After a certain streamer asked for this to be re-made I put it on my list, needed a break from the current harder maps I'm working on so made this feel-good classic. Hope you enjoy :D\n\nSpecial thanks to those who tested, especially Sehria for her suggestions, and thanks to my little sister for testing Hard diff :P","uploader":{"id":4285633,"name":"edmard","uniqueSet":true,"hash":"5cff0b7798cc5a672c856604","avatar":"https://cdn.beatsaver.com/avatar/157188812462620672.png","type":"DISCORD"},"metadata":{"bpm":174.0,"duration":222,"songName":"Mr. Blue Sky","songSubName":"","songAuthorName":"Electric Light Orchestra","levelAuthorName":"Edmard"},"stats":{"plays":0,"downloads":4883,"upvotes":2486,"downvotes":59,"score":0.9318},"uploaded":"2019-08-28T15:45:05.788Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"0039a0c02e9e0ac1761445caadefdfdd989f5316","key":"5fda","state":"Published","createdAt":"2019-08-28T15:45:05.788Z","sageScore":5,"diffs":[{"njs":14.0,"offset":0.0,"notes":742,"bombs":0,"obstacles":24,"nps":3.579,"length":601.25,"characteristic":"Standard","difficulty":"Hard","events":816,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":207.328,"paritySummary":{"errors":2,"warns":2,"resets":0}},{"njs":16.0,"offset":0.0,"notes":772,"bombs":0,"obstacles":28,"nps":3.724,"length":601.25,"characteristic":"Standard","difficulty":"Expert","events":816,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":207.328,"paritySummary":{"errors":2,"warns":2,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/0039a0c02e9e0ac1761445caadefdfdd989f5316.zip","coverURL":"https://cdn.beatsaver.com/0039a0c02e9e0ac1761445caadefdfdd989f5316.jpg","previewURL":"https://cdn.beatsaver.com/0039a0c02e9e0ac1761445caadefdfdd989f5316.mp3"}],"createdAt":"2019-08-28T15:45:05.788Z","updatedAt":"2019-08-28T15:45:05.788Z","lastPublishedAt":"2019-08-28T15:45:05.788Z"},{"id":"57c2","name":"Rockefeller Street (Nightcore) - Getter Jaani","description":"Hey this is reuploaded since it broke before\nhave fun","uploader":{"id":16388,"name":"rinkusenpai","uniqueSet":true,"hash":"5cff0b7398cc5a672c84f6cc","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f6cc?d=retro","type":"SIMPLE"},"metadata":{"bpm":162.5,"duration":145,"songName":"Rockefeller Street (Nightcore)","songSubName":"","songAuthorName":"Getter Jaani","levelAuthorName":"RinkuSenpai"},"stats":{"plays":0,"downloads":10267,"upvotes":7867,"downvotes":306,"score":0.9318},"uploaded":"2019-07-18T21:40:09.204Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"b8c98ffc598703aadb4a3cb921d2830d270b57a5","key":"57c2","state":"Published","createdAt":"2019-07-18T21:40:09.204Z","sageScore":6,"diffs":[{"njs":13.0,"offset":0.0,"notes":545,"bombs":0,"obstacles":8,"nps":3.884,"length":380.0,"characteristic":"Standard","difficulty":"Hard","events":2247,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":140.308,"paritySummary":{"errors":73,"warns":61,"resets":0},"stars":3.06},{"njs":17.0,"offset":0.0,"notes":709,"bombs":0,"obstacles":6,"nps":5.053,"length":380.0,"characteristic":"Standard","difficulty":"Expert","events":2247,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":140.308,"paritySummary":{"errors":87,"warns":75,"resets":0},"stars":4.39}],"downloadURL":"https://cdn.beatsaver.com/b8c98ffc598703aadb4a3cb921d2830d270b57a5.zip","coverURL":"https://cdn.beatsaver.com/b8c98ffc598703aadb4a3cb921d2830d270b57a5.jpg","previewURL":"https://cdn.beatsaver.com/b8c98ffc598703aadb4a3cb921d2830d270b57a5.mp3"}],"createdAt":"2019-07-18T21:40:09.204Z","updatedAt":"2019-07-18T21:40:09.204Z","lastPublishedAt":"2019-07-18T21:40:09.204Z"},{"id":"2693","name":"I Want You - DJMAX","description":"I love this song.","uploader":{"id":4285521,"name":"ejiejidayo","uniqueSet":true,"hash":"5cff0b7398cc5a672c84fc58","avatar":"https://cdn.beatsaver.com/avatar/224894241279574016.png","type":"DISCORD"},"metadata":{"bpm":140.0,"duration":109,"songName":"I Want You","songSubName":"DJMAX","songAuthorName":"ejiejidayo","levelAuthorName":"ejiejidayo"},"stats":{"plays":0,"downloads":6675,"upvotes":2356,"downvotes":54,"score":0.9318},"uploaded":"2018-12-18T12:09:51Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"bb9de13539a2ab9a21f7ff68a2669f7887011456","key":"2693","state":"Published","createdAt":"2018-12-18T12:09:51Z","sageScore":4,"diffs":[{"njs":11.0,"offset":0.0,"notes":115,"bombs":0,"obstacles":25,"nps":1.209,"length":222.0,"characteristic":"Standard","difficulty":"Easy","events":108,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":95.143,"paritySummary":{"errors":23,"warns":12,"resets":0},"stars":1.08},{"njs":12.0,"offset":0.0,"notes":173,"bombs":0,"obstacles":24,"nps":1.786,"length":226.031,"characteristic":"Standard","difficulty":"Normal","events":108,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":96.871,"paritySummary":{"errors":13,"warns":18,"resets":0},"stars":1.26},{"njs":13.0,"offset":0.0,"notes":225,"bombs":2,"obstacles":42,"nps":2.292,"length":229.031,"characteristic":"Standard","difficulty":"Hard","events":108,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":98.156,"paritySummary":{"errors":15,"warns":24,"resets":0},"stars":1.71},{"njs":14.0,"offset":0.0,"notes":405,"bombs":2,"obstacles":32,"nps":4.126,"length":229.031,"characteristic":"Standard","difficulty":"Expert","events":106,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":98.156,"paritySummary":{"errors":33,"warns":80,"resets":0},"stars":2.85}],"downloadURL":"https://cdn.beatsaver.com/bb9de13539a2ab9a21f7ff68a2669f7887011456.zip","coverURL":"https://cdn.beatsaver.com/bb9de13539a2ab9a21f7ff68a2669f7887011456.jpg","previewURL":"https://cdn.beatsaver.com/bb9de13539a2ab9a21f7ff68a2669f7887011456.mp3"}],"createdAt":"2018-12-18T12:09:51Z","updatedAt":"2018-12-18T12:09:51Z","lastPublishedAt":"2018-12-18T12:09:51Z"},{"id":"a907","name":"[TheFatRat Pack] Monody (ft. Laura Brehm) - TheFatRat","description":"Here it is! The unofficial \"TheFatRat\" Music Pack in Beat Saber - with all beatmaps being singlehandedly made by me!\n\nAll songs included in TheFatRat Music Pack:\nMonody (ft. Laura Brehm) \nUnity \nWindfall \nXenogenesis \nTime Lapse \n\nGet the full song pack here: https://bsaber.com/thefatrat-music-pack/\n(Or you should just be able to find all the other ones on my beatsaver profile as well. Heres a link to my profile: https://beatsaver.com/uploader/5d47d586c5301900060b2f6c)\n\nSongcore mod is recommended (for custom colours)\nPlays best on Origins Environment\n\nMonody Stats:\nExpert+ - 1058 Notes | 3.73 NPS\nExpert - 907 Notes | 3.19 NPS\nHard - 677 Notes | 2.38 NPS\nNormal - 421 Notes | 1.48 NPS\nEasy - 283 Notes | 1.00 NPS\n\nRoughly 11-12 Hours of work\nGameplay: https://youtu.be/5LvJXf4Co4w\n\nObviously - A huge thanks to TheFatRat himself, for not only producing the songs in the first place (and allowing free access to use them for big and small content creators), but also being a huge inspiration to lots of artists out there and for making music that everyone can jam out to! We love you, TheFatRat!","uploader":{"id":4284197,"name":"timeweaver","uniqueSet":true,"hash":"5d47d586c5301900060b2f6c","avatar":"https://cdn.beatsaver.com/avatar/607399708121366529.png","type":"DISCORD"},"metadata":{"bpm":107.0,"duration":283,"songName":"Monody","songSubName":"ft. Laura Brehm","songAuthorName":"TheFatRat","levelAuthorName":"Timeweaver"},"stats":{"plays":0,"downloads":9449,"upvotes":2084,"downvotes":44,"score":0.9316},"uploaded":"2020-05-22T13:28:13.182Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"8e82872941abe8c99e9ac86d9c063fc5aee57d52","key":"a907","state":"Published","createdAt":"2020-05-22T13:28:13.182Z","sageScore":7,"diffs":[{"njs":10.0,"offset":1.0,"notes":283,"bombs":0,"obstacles":63,"nps":1.048,"length":481.689,"characteristic":"Standard","difficulty":"Easy","events":3844,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":270.106,"paritySummary":{"errors":43,"warns":21,"resets":0}},{"njs":10.0,"offset":1.0,"notes":421,"bombs":0,"obstacles":62,"nps":1.559,"length":481.689,"characteristic":"Standard","difficulty":"Normal","events":3844,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":270.106,"paritySummary":{"errors":33,"warns":16,"resets":0}},{"njs":12.0,"offset":0.25,"notes":677,"bombs":0,"obstacles":61,"nps":2.507,"length":481.656,"characteristic":"Standard","difficulty":"Hard","events":3844,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":270.087,"paritySummary":{"errors":8,"warns":6,"resets":0}},{"njs":15.0,"offset":-0.3,"notes":907,"bombs":0,"obstacles":58,"nps":3.358,"length":481.689,"characteristic":"Standard","difficulty":"Expert","events":3844,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":270.106,"paritySummary":{"errors":5,"warns":3,"resets":0}},{"njs":18.0,"offset":0.4,"notes":1058,"bombs":0,"obstacles":59,"nps":3.917,"length":481.689,"characteristic":"Standard","difficulty":"ExpertPlus","events":3844,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":270.106,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/8e82872941abe8c99e9ac86d9c063fc5aee57d52.zip","coverURL":"https://cdn.beatsaver.com/8e82872941abe8c99e9ac86d9c063fc5aee57d52.jpg","previewURL":"https://cdn.beatsaver.com/8e82872941abe8c99e9ac86d9c063fc5aee57d52.mp3"}],"createdAt":"2020-05-22T13:28:13.182Z","updatedAt":"2020-05-22T13:28:13.182Z","lastPublishedAt":"2020-05-22T13:28:13.182Z"},{"id":"9cd2","name":"Grant - Are We Still Young","description":"i can't get enough grant in my life, send help\r\n\r\nif you don't like dodge walls, check the lawless diff @whipstickgostop","uploader":{"id":4284569,"name":"checkthepan","uniqueSet":true,"hash":"5cff0b7398cc5a672c84f3d5","avatar":"https://cdn.beatsaver.com/avatar/184355369189900290.png","type":"DISCORD"},"metadata":{"bpm":110.0,"duration":216,"songName":"Are We Still Young","songSubName":"","songAuthorName":"grant","levelAuthorName":"Checkthepan"},"stats":{"plays":0,"downloads":6474,"upvotes":1642,"downvotes":28,"score":0.9315},"uploaded":"2020-04-19T21:24:40.430Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"d03086c064a4546e4c5bfe6ef79545850fd1ac98","key":"9cd2","state":"Published","createdAt":"2020-04-19T21:24:40.430Z","sageScore":7,"diffs":[{"njs":10.0,"offset":0.0,"notes":270,"bombs":0,"obstacles":14,"nps":1.292,"length":383.0,"characteristic":"Standard","difficulty":"Easy","events":8571,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":208.909,"paritySummary":{"errors":88,"warns":19,"resets":0}},{"njs":10.0,"offset":0.0,"notes":407,"bombs":0,"obstacles":13,"nps":1.948,"length":383.0,"characteristic":"Standard","difficulty":"Normal","events":8571,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":208.909,"paritySummary":{"errors":51,"warns":15,"resets":0}},{"njs":12.0,"offset":0.0,"notes":576,"bombs":0,"obstacles":140,"nps":2.746,"length":384.5,"characteristic":"Standard","difficulty":"Hard","events":8571,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":209.727,"paritySummary":{"errors":4,"warns":3,"resets":0}},{"njs":15.0,"offset":-0.25,"notes":721,"bombs":16,"obstacles":138,"nps":3.442,"length":384.0,"characteristic":"Standard","difficulty":"Expert","events":8571,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":209.455,"paritySummary":{"errors":0,"warns":0,"resets":3}},{"njs":17.0,"offset":0.2,"notes":928,"bombs":46,"obstacles":186,"nps":4.431,"length":384.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":8571,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":209.455,"paritySummary":{"errors":0,"warns":0,"resets":5}},{"njs":10.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"Lightshow","difficulty":"Easy","events":8571,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":17.0,"offset":0.2,"notes":928,"bombs":46,"obstacles":145,"nps":4.431,"length":384.0,"characteristic":"Lawless","difficulty":"ExpertPlus","events":8571,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":209.455,"paritySummary":{"errors":0,"warns":0,"resets":5}}],"downloadURL":"https://cdn.beatsaver.com/d03086c064a4546e4c5bfe6ef79545850fd1ac98.zip","coverURL":"https://cdn.beatsaver.com/d03086c064a4546e4c5bfe6ef79545850fd1ac98.jpg","previewURL":"https://cdn.beatsaver.com/d03086c064a4546e4c5bfe6ef79545850fd1ac98.mp3"}],"createdAt":"2020-04-19T21:24:40.430Z","updatedAt":"2020-04-19T21:24:40.430Z","lastPublishedAt":"2020-04-19T21:24:40.430Z"},{"id":"6d63","name":"Take on Me - a-ha","description":"This song may be older than I am, but it still rocks even to this date. This made me compelled in making a map worthy of it for modern times. Mapped in a similar dancy style as some of my other maps.\n\nAudio: The album version is used but with the music video ending/outro.\n\nPreview Video:\nhttps://youtu.be/ouhgRepxZMk\n\nBPM: 168-169\nDuration: 3:39\nEasy, Normal, Hard and Expert difficulties:\n\nEasy:\n277 notes, 29 obstacles, 0 mines\n\nNormal:\n359 notes, 26 obstacles, 0 mines\n\nHard:\n549 notes, 26 obstacles, 0 mines\n\nExpert:\n852 notes, 23 obstacles, 0 mines\n\nThanks to Jessi81, Thomas, Kival Evan, Redmagi and Storm Knight for playtesting!\n\nEnjoy!","uploader":{"id":4285318,"name":"kolezan","uniqueSet":true,"hash":"5cff0b7398cc5a672c84fcbb","avatar":"https://cdn.beatsaver.com/avatar/220513618763055106.png","type":"DISCORD"},"metadata":{"bpm":168.868,"duration":219,"songName":"Take On Me","songSubName":"","songAuthorName":"A-ha","levelAuthorName":"Kolezan"},"stats":{"plays":0,"downloads":15253,"upvotes":3615,"downvotes":108,"score":0.9314},"uploaded":"2019-11-01T07:20:59.352Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"ac7d867dccb85bd28eea0787eda92c25f849dcef","key":"6d63","state":"Published","createdAt":"2019-11-01T07:20:59.352Z","sageScore":6,"diffs":[{"njs":10.0,"offset":1.0,"notes":277,"bombs":0,"obstacles":29,"nps":1.325,"length":588.521,"characteristic":"Standard","difficulty":"Easy","events":2868,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":209.106,"paritySummary":{"errors":63,"warns":26,"resets":0}},{"njs":12.0,"offset":1.0,"notes":359,"bombs":0,"obstacles":26,"nps":1.711,"length":590.521,"characteristic":"Standard","difficulty":"Normal","events":2868,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":209.816,"paritySummary":{"errors":63,"warns":61,"resets":0}},{"njs":15.0,"offset":1.0,"notes":549,"bombs":0,"obstacles":26,"nps":2.617,"length":590.521,"characteristic":"Standard","difficulty":"Hard","events":2868,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":209.816,"paritySummary":{"errors":62,"warns":70,"resets":0}},{"njs":18.0,"offset":1.0,"notes":852,"bombs":0,"obstacles":23,"nps":4.061,"length":590.521,"characteristic":"Standard","difficulty":"Expert","events":2868,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":209.816,"paritySummary":{"errors":30,"warns":67,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/ac7d867dccb85bd28eea0787eda92c25f849dcef.zip","coverURL":"https://cdn.beatsaver.com/ac7d867dccb85bd28eea0787eda92c25f849dcef.jpg","previewURL":"https://cdn.beatsaver.com/ac7d867dccb85bd28eea0787eda92c25f849dcef.mp3"}],"createdAt":"2019-11-01T07:20:59.352Z","updatedAt":"2019-11-01T07:20:59.352Z","lastPublishedAt":"2019-11-01T07:20:59.352Z"},{"id":"9956","name":"Or3o - Help Me","description":"Help Me, by Or3o\nThis was really fun to map but took a little longer than expected.\nAnother full diff spread map. Hope you enjoy!\nThanks to the testplayers: Sorukun, Wolfb34, and Johnny Dee","uploader":{"id":15650,"name":"alzaraf","uniqueSet":true,"hash":"5cff0b7798cc5a672c855ce3","avatar":"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855ce3?d=retro","type":"SIMPLE"},"metadata":{"bpm":110.0,"duration":188,"songName":"Help Me","songSubName":"","songAuthorName":"Or3o","levelAuthorName":"Alzaraf"},"stats":{"plays":0,"downloads":2316,"upvotes":1519,"downvotes":24,"score":0.9313},"uploaded":"2020-04-10T16:34:49.265Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"c56040e307335a3e7116de76e4f07d472cfe28d3","key":"9956","state":"Published","createdAt":"2020-04-10T16:34:49.265Z","sageScore":7,"diffs":[{"njs":10.0,"offset":0.0,"notes":216,"bombs":0,"obstacles":0,"nps":1.189,"length":333.0,"characteristic":"Standard","difficulty":"Easy","events":2212,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":181.636,"paritySummary":{"errors":56,"warns":2,"resets":0}},{"njs":12.0,"offset":0.0,"notes":283,"bombs":0,"obstacles":0,"nps":1.558,"length":333.0,"characteristic":"Standard","difficulty":"Normal","events":2212,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":181.636,"paritySummary":{"errors":61,"warns":0,"resets":0}},{"njs":14.0,"offset":0.0,"notes":497,"bombs":0,"obstacles":0,"nps":2.72,"length":335.0,"characteristic":"Standard","difficulty":"Hard","events":2212,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":182.727,"paritySummary":{"errors":28,"warns":0,"resets":0}},{"njs":16.0,"offset":0.0,"notes":729,"bombs":0,"obstacles":0,"nps":3.984,"length":335.5,"characteristic":"Standard","difficulty":"Expert","events":2212,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":183.0,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":19.0,"offset":0.3,"notes":816,"bombs":0,"obstacles":0,"nps":4.459,"length":335.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":2212,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":183.0,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/c56040e307335a3e7116de76e4f07d472cfe28d3.zip","coverURL":"https://cdn.beatsaver.com/c56040e307335a3e7116de76e4f07d472cfe28d3.jpg","previewURL":"https://cdn.beatsaver.com/c56040e307335a3e7116de76e4f07d472cfe28d3.mp3"}],"createdAt":"2020-04-10T16:34:49.265Z","updatedAt":"2020-04-10T16:34:49.265Z","lastPublishedAt":"2020-04-10T16:34:49.265Z"},{"id":"6360","name":"Shirobon - Into the Zone","description":"","uploader":{"id":12996,"name":"rustic","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e8c4","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro","type":"SIMPLE"},"metadata":{"bpm":122.0,"duration":180,"songName":"Into the Zone","songSubName":"","songAuthorName":"Shirobon","levelAuthorName":"Rustic"},"stats":{"plays":0,"downloads":2366,"upvotes":1312,"downvotes":17,"score":0.9313},"uploaded":"2019-09-14T17:32:19.835Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"c22b89db9dfef084c62412def48cdace57226f5e","key":"6360","state":"Published","createdAt":"2019-09-14T17:32:19.835Z","sageScore":6,"diffs":[{"njs":18.0,"offset":0.0,"notes":428,"bombs":0,"obstacles":615,"nps":2.67,"length":326.0,"characteristic":"Standard","difficulty":"Expert","events":5077,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":160.328,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/c22b89db9dfef084c62412def48cdace57226f5e.zip","coverURL":"https://cdn.beatsaver.com/c22b89db9dfef084c62412def48cdace57226f5e.jpg","previewURL":"https://cdn.beatsaver.com/c22b89db9dfef084c62412def48cdace57226f5e.mp3"}],"createdAt":"2019-09-14T17:32:19.835Z","updatedAt":"2019-09-14T17:32:19.835Z","lastPublishedAt":"2019-09-14T17:32:19.835Z"},{"id":"7de1","name":"Emergency (Nightcore Mix) - Kim Leoni","description":"78","uploader":{"id":4285521,"name":"ejiejidayo","uniqueSet":true,"hash":"5cff0b7398cc5a672c84fc58","avatar":"https://cdn.beatsaver.com/avatar/224894241279574016.png","type":"DISCORD"},"metadata":{"bpm":174.0,"duration":148,"songName":"Emergency (Nightcore Mix)","songSubName":"","songAuthorName":"Kim Leoni","levelAuthorName":"ejiejidayo"},"stats":{"plays":0,"downloads":7439,"upvotes":2274,"downvotes":52,"score":0.9313},"uploaded":"2020-01-12T09:33:57.766Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"c28ac0c2eac67c79b893ba3a1f432a27dd3a368b","key":"7de1","state":"Published","createdAt":"2020-01-12T09:33:57.766Z","sageScore":4,"diffs":[{"njs":14.0,"offset":0.6,"notes":542,"bombs":58,"obstacles":187,"nps":3.806,"length":413.0,"characteristic":"Standard","difficulty":"Easy","events":1749,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":142.414,"paritySummary":{"errors":67,"warns":79,"resets":23}},{"njs":13.0,"offset":0.0,"notes":428,"bombs":0,"obstacles":126,"nps":3.005,"length":413.0,"characteristic":"Standard","difficulty":"Hard","events":1749,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":142.414,"paritySummary":{"errors":2,"warns":2,"resets":0}},{"njs":16.0,"offset":0.1,"notes":599,"bombs":0,"obstacles":126,"nps":4.196,"length":414.0,"characteristic":"Standard","difficulty":"Expert","events":1749,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":142.759,"paritySummary":{"errors":14,"warns":44,"resets":0}},{"njs":17.0,"offset":0.0,"notes":805,"bombs":0,"obstacles":126,"nps":5.639,"length":414.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":1749,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":142.759,"paritySummary":{"errors":18,"warns":27,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/c28ac0c2eac67c79b893ba3a1f432a27dd3a368b.zip","coverURL":"https://cdn.beatsaver.com/c28ac0c2eac67c79b893ba3a1f432a27dd3a368b.jpg","previewURL":"https://cdn.beatsaver.com/c28ac0c2eac67c79b893ba3a1f432a27dd3a368b.mp3"}],"createdAt":"2020-01-12T09:33:57.766Z","updatedAt":"2020-01-12T09:33:57.766Z","lastPublishedAt":"2020-01-12T09:33:57.766Z"},{"id":"557f","name":"Enormous Penis - Da Vinci's Notebook","description":"This is my first time working on a A Capella song! which means no instruments and mapping to lyrics or lip noises. which means its usually not following the bpm closely (some parts are 1/8 faster or slower). I did like the challenge though and it was a nice change of pace! Thanks Austin for giving me a reason to try mapping A Capella.\n\n“Enormous Penis” is an A Capella song performed by the group Da Vinci’s Notebook for their album Brontosaurus, which was released in 2002. ","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":119.0,"duration":164,"songName":"Enormous Penis","songSubName":"","songAuthorName":"Da Vinci's Notebook","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":2614,"upvotes":1367,"downvotes":19,"score":0.9312},"uploaded":"2019-07-04T13:21:52.797Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"2b61e7bd12379b9c1c193de7e28d1e816942c948","key":"557f","state":"Published","createdAt":"2019-07-04T13:21:52.797Z","sageScore":5,"diffs":[{"njs":12.0,"offset":0.0,"notes":518,"bombs":55,"obstacles":36,"nps":3.252,"length":315.875,"characteristic":"Standard","difficulty":"Hard","events":714,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":159.265,"paritySummary":{"errors":29,"warns":25,"resets":10}}],"downloadURL":"https://cdn.beatsaver.com/2b61e7bd12379b9c1c193de7e28d1e816942c948.zip","coverURL":"https://cdn.beatsaver.com/2b61e7bd12379b9c1c193de7e28d1e816942c948.jpg","previewURL":"https://cdn.beatsaver.com/2b61e7bd12379b9c1c193de7e28d1e816942c948.mp3"}],"createdAt":"2019-07-04T13:21:52.797Z","updatedAt":"2019-07-04T13:21:52.797Z","lastPublishedAt":"2019-07-04T13:21:52.797Z"},{"id":"5373","name":"Chito (CV: Minase Inori), Yuuri (CV: Kubo Yurika) - Ugoku, Ugoku","description":"A nice, chill map of the opening to one of my favorite animes to let you know that I haven't stopped mapping yet. I have quite a few maps I've been slowly making progress on and they should be coming out sometime soon!\n\nIn case you need a way to contact me or let me know of any issues: discord.gg/EVU9At2","uploader":{"id":4288620,"name":"hexagonial","uniqueSet":true,"hash":"5cff0b7398cc5a672c84f2fb","avatar":"https://cdn.beatsaver.com/avatar/221442943045599232.png","type":"DISCORD"},"metadata":{"bpm":128.0,"duration":91,"songName":"Ugoku, Ugoku","songSubName":"","songAuthorName":"Chito (CV: Minase Inori), Yuuri (CV: Kubo Yurika)","levelAuthorName":"Hexagonial"},"stats":{"plays":0,"downloads":3196,"upvotes":1684,"downvotes":30,"score":0.9312},"uploaded":"2019-06-19T01:42:05.315Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"7ac2bd85723acb7d4fd9957e62a7769700755c04","key":"5373","state":"Published","createdAt":"2019-06-19T01:42:05.315Z","sageScore":7,"diffs":[{"njs":10.0,"offset":0.0,"notes":95,"bombs":8,"obstacles":45,"nps":1.081,"length":187.5,"characteristic":"Standard","difficulty":"Easy","events":1220,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":87.891,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":10.0,"offset":0.0,"notes":152,"bombs":8,"obstacles":45,"nps":1.729,"length":187.5,"characteristic":"Standard","difficulty":"Normal","events":1220,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":87.891,"paritySummary":{"errors":14,"warns":0,"resets":0}},{"njs":13.0,"offset":0.0,"notes":243,"bombs":4,"obstacles":43,"nps":2.765,"length":187.5,"characteristic":"Standard","difficulty":"Hard","events":1220,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":87.891,"paritySummary":{"errors":8,"warns":0,"resets":0}},{"njs":15.0,"offset":0.0,"notes":326,"bombs":0,"obstacles":36,"nps":3.709,"length":187.5,"characteristic":"Standard","difficulty":"Expert","events":1220,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":87.891,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":16.0,"offset":0.0,"notes":393,"bombs":0,"obstacles":39,"nps":4.471,"length":187.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":1220,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":87.891,"paritySummary":{"errors":1,"warns":9,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/7ac2bd85723acb7d4fd9957e62a7769700755c04.zip","coverURL":"https://cdn.beatsaver.com/7ac2bd85723acb7d4fd9957e62a7769700755c04.jpg","previewURL":"https://cdn.beatsaver.com/7ac2bd85723acb7d4fd9957e62a7769700755c04.mp3"}],"createdAt":"2019-06-19T01:42:05.315Z","updatedAt":"2019-06-19T01:42:05.315Z","lastPublishedAt":"2019-06-19T01:42:05.315Z"},{"id":"10dcc","name":"The Chonk Chart™","description":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n(account definitely isn't a Mawntee alt account no sir)","uploader":{"id":1602,"name":"chief-queef","uniqueSet":true,"hash":"5f9a4d2a030219000627c2bf","avatar":"https://cdn.beatsaver.com/avatar/1602.jpg","type":"SIMPLE"},"metadata":{"bpm":69.0,"duration":23,"songName":"Chonk Chart","songSubName":"","songAuthorName":"Gyan Ko","levelAuthorName":"Chief Queef"},"stats":{"plays":0,"downloads":3653,"upvotes":1784,"downvotes":34,"score":0.9311},"uploaded":"2020-11-12T09:20:18.282Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"b966edcba3f8187dacd633dabbf05e128e57d21b","key":"10dcc","state":"Published","createdAt":"2020-11-12T09:20:18.282Z","sageScore":4,"diffs":[{"njs":6.9,"offset":6.9,"notes":7,"bombs":0,"obstacles":0,"nps":0.447,"length":18.0,"characteristic":"Standard","difficulty":"Easy","events":312,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":15.652,"paritySummary":{"errors":6,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/b966edcba3f8187dacd633dabbf05e128e57d21b.zip","coverURL":"https://cdn.beatsaver.com/b966edcba3f8187dacd633dabbf05e128e57d21b.jpg","previewURL":"https://cdn.beatsaver.com/b966edcba3f8187dacd633dabbf05e128e57d21b.mp3"}],"createdAt":"2020-11-12T09:20:18.282Z","updatedAt":"2020-11-12T09:20:18.282Z","lastPublishedAt":"2020-11-12T09:20:18.282Z"},{"id":"6b8c","name":"TheFatRat - MAYDAY feat. Laura Brehm","description":"--- PLEASE HAVE CHROMALITE INSTALLED FOR THE LIGHTSHOW AND LIGHTING EVENTS ---\n\nExpert+ (M A Y D A Y): Oddloop\nEasy - Expert: RedMagi\nLights: Aaltopahwi","uploader":{"id":4284400,"name":"oddloop","uniqueSet":true,"hash":"5cff0b7398cc5a672c84fd45","avatar":"https://cdn.beatsaver.com/avatar/173241614192476161.png","type":"DISCORD"},"metadata":{"bpm":150.0,"duration":249,"songName":"MAYDAY","songSubName":"feat. Laura Brehm","songAuthorName":"TheFatRat","levelAuthorName":"Oddloop, RedMagi & AaltopahWi"},"stats":{"plays":0,"downloads":8888,"upvotes":4606,"downvotes":154,"score":0.9311},"uploaded":"2019-10-22T19:11:34.707Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"58e760690ffb379864d76b06505f4056e84fbe84","key":"6b8c","state":"Published","createdAt":"2019-10-22T19:11:34.707Z","sageScore":8,"diffs":[{"njs":10.0,"offset":1.0,"notes":251,"bombs":0,"obstacles":0,"nps":1.077,"length":582.5,"characteristic":"Standard","difficulty":"Easy","events":20350,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":233.0,"paritySummary":{"errors":7,"warns":6,"resets":0},"stars":0.8},{"njs":12.0,"offset":1.0,"notes":434,"bombs":0,"obstacles":0,"nps":1.863,"length":582.5,"characteristic":"Standard","difficulty":"Normal","events":20350,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":233.0,"paritySummary":{"errors":11,"warns":10,"resets":0},"stars":1.16},{"njs":14.0,"offset":1.0,"notes":541,"bombs":16,"obstacles":0,"nps":2.322,"length":582.5,"characteristic":"Standard","difficulty":"Hard","events":20350,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":233.0,"paritySummary":{"errors":7,"warns":8,"resets":1},"stars":1.53},{"njs":16.0,"offset":0.5,"notes":769,"bombs":12,"obstacles":0,"nps":3.204,"length":600.0,"characteristic":"Standard","difficulty":"Expert","events":20350,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":240.0,"paritySummary":{"errors":10,"warns":9,"resets":1},"stars":2.17},{"njs":23.0,"offset":0.5,"notes":1655,"bombs":0,"obstacles":49,"nps":6.896,"length":600.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":20314,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":240.0,"paritySummary":{"errors":2,"warns":0,"resets":0},"stars":5.3},{"njs":10.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"Lightshow","difficulty":"Easy","events":20350,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/58e760690ffb379864d76b06505f4056e84fbe84.zip","coverURL":"https://cdn.beatsaver.com/58e760690ffb379864d76b06505f4056e84fbe84.jpg","previewURL":"https://cdn.beatsaver.com/58e760690ffb379864d76b06505f4056e84fbe84.mp3"}],"createdAt":"2019-10-22T19:11:34.707Z","updatedAt":"2019-10-22T19:11:34.707Z","lastPublishedAt":"2019-10-22T19:11:34.707Z"},{"id":"1ff0","name":"Flux Pavilion - I can't stop | 100k Contest","description":"This is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes. Go to https://bsaber.com/100k-contest/ to register!","uploader":{"id":12996,"name":"rustic","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e8c4","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro","type":"SIMPLE"},"metadata":{"bpm":140.0,"duration":148,"songName":"I can't stop","songSubName":"Flux Pavilion","songAuthorName":"Rustic","levelAuthorName":"rustic"},"stats":{"plays":0,"downloads":11299,"upvotes":4364,"downvotes":143,"score":0.9311},"uploaded":"2018-11-12T17:55:03Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"8d9df176c94ecf5c7725457525b6f959f5ef9296","key":"1ff0","state":"Published","createdAt":"2018-11-12T17:55:03Z","sageScore":6,"diffs":[{"njs":10.0,"offset":0.0,"notes":145,"bombs":0,"obstacles":0,"nps":1.057,"length":320.0,"characteristic":"Standard","difficulty":"Easy","events":1045,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":137.143,"paritySummary":{"errors":52,"warns":3,"resets":0},"stars":0.69},{"njs":10.0,"offset":0.0,"notes":212,"bombs":0,"obstacles":0,"nps":1.546,"length":320.0,"characteristic":"Standard","difficulty":"Normal","events":0,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":137.143,"paritySummary":{"errors":8,"warns":17,"resets":0},"stars":0.92},{"njs":12.0,"offset":0.0,"notes":342,"bombs":0,"obstacles":0,"nps":2.509,"length":318.0,"characteristic":"Standard","difficulty":"Hard","events":2634,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":136.286,"paritySummary":{"errors":5,"warns":29,"resets":0},"stars":1.78},{"njs":14.0,"offset":0.0,"notes":372,"bombs":0,"obstacles":15,"nps":2.73,"length":318.0,"characteristic":"Standard","difficulty":"Expert","events":2634,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":136.286,"paritySummary":{"errors":17,"warns":34,"resets":0},"stars":1.78}],"downloadURL":"https://cdn.beatsaver.com/8d9df176c94ecf5c7725457525b6f959f5ef9296.zip","coverURL":"https://cdn.beatsaver.com/8d9df176c94ecf5c7725457525b6f959f5ef9296.jpg","previewURL":"https://cdn.beatsaver.com/8d9df176c94ecf5c7725457525b6f959f5ef9296.mp3"}],"createdAt":"2018-11-12T17:55:03Z","updatedAt":"2018-11-12T17:55:03Z","lastPublishedAt":"2018-11-12T17:55:03Z"},{"id":"e01a","name":"The Spectre - Wallmap","description":"Have you ever seen a call of duty montage from the early 2010's? maybe Russian guy playing a piano in public? \n \nIf you've ever heard of the name Alan Walker then you've heard of \"The Spectre\" so thanks to some help from a friend I'm here to bring you my newest masterpiece. A song with decently placed blocks... wow you'd think by now id actually do a new song but no. I'm here to fix The Spectre and give it the attention it deserves.\n\nOfficial Release Video:\nhttps://youtu.be/ljxO7plPgpA\n\nLight did a little play-through here if you curious\nhttps://www.youtube.com/watch?v=l4qjiqE-hqQ&t=12s","uploader":{"id":3449,"name":"rizthesnuggie","uniqueSet":true,"hash":"5f051045c51ba90006d92da9","avatar":"https://www.gravatar.com/avatar/5f051045c51ba90006d92da9?d=retro","type":"SIMPLE"},"metadata":{"bpm":128.0,"duration":190,"songName":"The Spectre","songSubName":"[Non NCS]","songAuthorName":"Alan Walker","levelAuthorName":"Riz and KyleT"},"stats":{"plays":0,"downloads":2423,"upvotes":1381,"downvotes":20,"score":0.9309},"uploaded":"2020-08-29T19:50:28.236Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"f11409e4e08f2463be65c0e56dfc6f6b00e25aeb","key":"e01a","state":"Published","createdAt":"2020-08-29T19:50:28.236Z","sageScore":1,"diffs":[{"njs":16.0,"offset":-0.5,"notes":749,"bombs":25,"obstacles":34105,"nps":4.048,"length":394.75,"characteristic":"Standard","difficulty":"Expert","events":1,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":185.039,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":16.0,"offset":-0.5,"notes":0,"bombs":0,"obstacles":34105,"nps":0.0,"length":0.0,"characteristic":"Lightshow","difficulty":"Expert","events":1,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/f11409e4e08f2463be65c0e56dfc6f6b00e25aeb.zip","coverURL":"https://cdn.beatsaver.com/f11409e4e08f2463be65c0e56dfc6f6b00e25aeb.jpg","previewURL":"https://cdn.beatsaver.com/f11409e4e08f2463be65c0e56dfc6f6b00e25aeb.mp3"}],"createdAt":"2020-08-29T19:50:28.236Z","updatedAt":"2020-08-29T19:50:28.236Z","lastPublishedAt":"2020-08-29T19:50:28.236Z"},{"id":"67a8","name":"world.execute(me); - Mili (Fixed)","description":"71","uploader":{"id":4285521,"name":"ejiejidayo","uniqueSet":true,"hash":"5cff0b7398cc5a672c84fc58","avatar":"https://cdn.beatsaver.com/avatar/224894241279574016.png","type":"DISCORD"},"metadata":{"bpm":130.0,"duration":209,"songName":"world.execute (me) ;","songSubName":"","songAuthorName":"Mili","levelAuthorName":"ejiejidayo"},"stats":{"plays":0,"downloads":4119,"upvotes":1832,"downvotes":36,"score":0.9309},"uploaded":"2019-10-03T22:51:56.567Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"cfc9d5013d12adb3ca5e0a4a31d8a06f2081dbe6","key":"67a8","state":"Published","createdAt":"2019-10-03T22:51:56.567Z","sageScore":5,"diffs":[{"njs":15.0,"offset":0.0,"notes":462,"bombs":0,"obstacles":610,"nps":2.239,"length":447.0,"characteristic":"Standard","difficulty":"Hard","events":1025,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":206.308,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":16.0,"offset":0.0,"notes":984,"bombs":0,"obstacles":610,"nps":4.764,"length":447.5,"characteristic":"Standard","difficulty":"Expert","events":1025,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":206.538,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/cfc9d5013d12adb3ca5e0a4a31d8a06f2081dbe6.zip","coverURL":"https://cdn.beatsaver.com/cfc9d5013d12adb3ca5e0a4a31d8a06f2081dbe6.jpg","previewURL":"https://cdn.beatsaver.com/cfc9d5013d12adb3ca5e0a4a31d8a06f2081dbe6.mp3"}],"createdAt":"2019-10-03T22:51:56.567Z","updatedAt":"2019-10-03T22:51:56.567Z","lastPublishedAt":"2019-10-03T22:51:56.567Z"},{"id":"36bf","name":"Daft Punk - Aerodynamic","description":"An essential classic. You might want to stretch first...\r\nExpert+ and Hard.\r\n\r\nPreview: https://youtu.be/1dAwipwIgDg\r\n\r\nCheck out my other maps, too! If you like them, consider subscribing on YouTube to find out when new maps go live.\r\n\r\nThanks for playing!\r\n\r\nhttps://www.twitch.tv/syntheseizure","uploader":{"id":31265,"name":"syntheseizure","uniqueSet":true,"hash":"5cff0b7698cc5a672c8546bd","avatar":"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8546bd?d=retro","type":"SIMPLE"},"metadata":{"bpm":123.0,"duration":214,"songName":"Aerodynamic","songSubName":"Daft Punk","songAuthorName":"Syntheseizure","levelAuthorName":"Syntheseizure"},"stats":{"plays":0,"downloads":5893,"upvotes":2763,"downvotes":73,"score":0.9309},"uploaded":"2019-02-16T17:49:39Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"092840ca9a391f34c6af32ac1d6475498de74407","key":"36bf","state":"Published","createdAt":"2019-02-16T17:49:39Z","sageScore":5,"diffs":[{"njs":12.0,"offset":0.0,"notes":650,"bombs":0,"obstacles":48,"nps":3.2,"length":416.0,"characteristic":"Standard","difficulty":"Hard","events":2022,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":202.927,"paritySummary":{"errors":32,"warns":11,"resets":0}},{"njs":14.0,"offset":0.0,"notes":1022,"bombs":0,"obstacles":48,"nps":5.031,"length":416.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":2022,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":202.927,"paritySummary":{"errors":48,"warns":27,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/092840ca9a391f34c6af32ac1d6475498de74407.zip","coverURL":"https://cdn.beatsaver.com/092840ca9a391f34c6af32ac1d6475498de74407.jpg","previewURL":"https://cdn.beatsaver.com/092840ca9a391f34c6af32ac1d6475498de74407.mp3"}],"createdAt":"2019-02-16T17:49:39Z","updatedAt":"2019-02-16T17:49:39Z","lastPublishedAt":"2019-02-16T17:49:39Z"},{"id":"381a","name":"Deep in Abyss [Made in Abyss Opening] - Riko (CV: Miyu Tomita), Reg (CV: Ise Mariya)","description":"Deep in Abyss is the opening song for Made in Abyss and is sung by Riko voiced by Miyu Tomita and Reg voiced by Ise Mariya.\r\n\r\nCheckout the map preview: https://www.youtube.com/watch?v=ZMQz-z57kKo","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":135.0,"duration":221,"songName":"Deep in Abyss","songSubName":"Riko (CV: Miyu Tomita), Reg (CV: Ise Mariya)","songAuthorName":"Joetastic","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":3012,"upvotes":1850,"downvotes":37,"score":0.9308},"uploaded":"2019-02-21T01:04:41Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"c586288044251cc2b2e1d6ac3817214a9ea02302","key":"381a","state":"Published","createdAt":"2019-02-21T01:04:41Z","sageScore":6,"diffs":[{"njs":15.0,"offset":0.0,"notes":1013,"bombs":0,"obstacles":33,"nps":4.685,"length":486.5,"characteristic":"Standard","difficulty":"Expert","events":2230,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":216.222,"paritySummary":{"errors":41,"warns":46,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/c586288044251cc2b2e1d6ac3817214a9ea02302.zip","coverURL":"https://cdn.beatsaver.com/c586288044251cc2b2e1d6ac3817214a9ea02302.jpg","previewURL":"https://cdn.beatsaver.com/c586288044251cc2b2e1d6ac3817214a9ea02302.mp3"}],"createdAt":"2019-02-21T01:04:41Z","updatedAt":"2019-02-21T01:04:41Z","lastPublishedAt":"2019-02-21T01:04:41Z"},{"id":"a168","name":"Yunomi - Oedo Controller/大江戸コントローラー feat. TORIENA【Wall Map】","description":"【requires】 Noodle Extensions Chroma\nhttps://youtu.be/5D1WTufQ5dM ","uploader":{"id":4285467,"name":"fefy","uniqueSet":true,"hash":"5cff0b7798cc5a672c856908","avatar":"https://cdn.beatsaver.com/avatar/380656936460484620.png","type":"DISCORD"},"metadata":{"bpm":115.0,"duration":257,"songName":"Oedo Controller","songSubName":"feat. TORIENA","songAuthorName":"Yunomi","levelAuthorName":"Fefy"},"stats":{"plays":0,"downloads":2659,"upvotes":1344,"downvotes":19,"score":0.9307},"uploaded":"2020-05-02T09:37:24.020Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"cc3e7aefe1e878057f83d9018eaf977d9f69a1bb","key":"a168","state":"Published","createdAt":"2020-05-02T09:37:24.020Z","sageScore":7,"diffs":[{"njs":15.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":55472,"nps":0.0,"length":0.0,"characteristic":"Standard","difficulty":"Easy","events":2395,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":15.0,"offset":0.0,"notes":816,"bombs":0,"obstacles":55472,"nps":3.265,"length":479.0,"characteristic":"Standard","difficulty":"Expert","events":2395,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":249.913,"paritySummary":{"errors":20,"warns":12,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/cc3e7aefe1e878057f83d9018eaf977d9f69a1bb.zip","coverURL":"https://cdn.beatsaver.com/cc3e7aefe1e878057f83d9018eaf977d9f69a1bb.jpg","previewURL":"https://cdn.beatsaver.com/cc3e7aefe1e878057f83d9018eaf977d9f69a1bb.mp3"}],"createdAt":"2020-05-02T09:37:24.020Z","updatedAt":"2020-05-02T09:37:24.020Z","lastPublishedAt":"2020-05-02T09:37:24.020Z"},{"id":"6adc","name":"Rasputin (Funk Overload)","description":"Huge thanks to Whipstickgostop for remastering the audio of this funky beat!","uploader":{"id":4285169,"name":"ryger","uniqueSet":true,"hash":"5cff0b7798cc5a672c855a42","avatar":"https://cdn.beatsaver.com/avatar/169266024502263808.png","type":"DISCORD"},"metadata":{"bpm":152.0,"duration":225,"songName":"Rasputin (Funk Overload)","songSubName":"","songAuthorName":"Boney M","levelAuthorName":"Ryger"},"stats":{"plays":0,"downloads":10264,"upvotes":4935,"downvotes":173,"score":0.9305},"uploaded":"2019-10-19T23:00:58.938Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"e979073ecfbb283675d03453af39109957819f35","key":"6adc","state":"Published","createdAt":"2019-10-19T23:00:58.938Z","sageScore":5,"diffs":[{"njs":16.0,"offset":0.0,"notes":988,"bombs":0,"obstacles":0,"nps":4.542,"length":551.125,"characteristic":"Standard","difficulty":"Hard","events":4202,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":217.549,"paritySummary":{"errors":15,"warns":14,"resets":0}},{"njs":16.0,"offset":0.0,"notes":1080,"bombs":0,"obstacles":0,"nps":4.964,"length":551.125,"characteristic":"Standard","difficulty":"Expert","events":4202,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":217.549,"paritySummary":{"errors":25,"warns":21,"resets":0}},{"njs":18.0,"offset":0.0,"notes":1164,"bombs":0,"obstacles":0,"nps":5.351,"length":551.125,"characteristic":"Standard","difficulty":"ExpertPlus","events":4196,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":217.549,"paritySummary":{"errors":21,"warns":27,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/e979073ecfbb283675d03453af39109957819f35.zip","coverURL":"https://cdn.beatsaver.com/e979073ecfbb283675d03453af39109957819f35.jpg","previewURL":"https://cdn.beatsaver.com/e979073ecfbb283675d03453af39109957819f35.mp3"}],"createdAt":"2019-10-19T23:00:58.938Z","updatedAt":"2019-10-19T23:00:58.938Z","lastPublishedAt":"2019-10-19T23:00:58.938Z"},{"id":"3ae2","name":"I Don't Wanna Be In Love (Dance Floor Anthem) - Good Charlotte","description":"I Dont Wanna Be In Love (Dance Floor Anthem) - Good Charlotte\r\nhttps://www.youtube.com/watch?v=pbpeMN_vFRM","uploader":{"id":4285982,"name":"downycat","uniqueSet":true,"hash":"5cff0b7398cc5a672c84ede5","avatar":"https://cdn.beatsaver.com/avatar/173538829888782336.png","type":"DISCORD"},"metadata":{"bpm":125.0,"duration":243,"songName":"I Don't Wanna Be In Love (Dance Floor Anthem)","songSubName":"Good Charlotte","songAuthorName":"DownyCat","levelAuthorName":"downycat"},"stats":{"plays":0,"downloads":4672,"upvotes":991,"downvotes":8,"score":0.9305},"uploaded":"2019-03-02T17:41:39Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"f0bef11ce8866052770c42ed855e5d21e935614c","key":"3ae2","state":"Published","createdAt":"2019-03-02T17:41:39Z","sageScore":6,"diffs":[{"njs":10.0,"offset":0.0,"notes":372,"bombs":0,"obstacles":29,"nps":1.563,"length":496.0,"characteristic":"Standard","difficulty":"Normal","events":5639,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":238.08,"paritySummary":{"errors":19,"warns":7,"resets":0}},{"njs":12.0,"offset":0.0,"notes":796,"bombs":0,"obstacles":20,"nps":3.343,"length":496.0,"characteristic":"Standard","difficulty":"Hard","events":5639,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":238.08,"paritySummary":{"errors":18,"warns":26,"resets":0}},{"njs":14.0,"offset":0.0,"notes":1174,"bombs":0,"obstacles":10,"nps":4.931,"length":496.0,"characteristic":"Standard","difficulty":"Expert","events":5639,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":238.08,"paritySummary":{"errors":27,"warns":36,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/f0bef11ce8866052770c42ed855e5d21e935614c.zip","coverURL":"https://cdn.beatsaver.com/f0bef11ce8866052770c42ed855e5d21e935614c.jpg","previewURL":"https://cdn.beatsaver.com/f0bef11ce8866052770c42ed855e5d21e935614c.mp3"}],"createdAt":"2019-03-02T17:41:39Z","updatedAt":"2019-03-02T17:41:39Z","lastPublishedAt":"2019-03-02T17:41:39Z"},{"id":"706b","name":"Guren No Yumiya (TV Size) [Attack On Titan Opening] - Linked Horizon","description":"This map was converted from one of my old maps.\n\nFeel free to DM me on discord @Joetastic#2501","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":180.676,"duration":93,"songName":"Guren no Yumiya (TV Size)","songSubName":"","songAuthorName":"Linked Horizon","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":8096,"upvotes":2435,"downvotes":61,"score":0.9304},"uploaded":"2019-11-17T07:01:53.007Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"c00412845c48fb65fc30f16d902af542ca2c88ac","key":"706b","state":"Published","createdAt":"2019-11-17T07:01:53.007Z","sageScore":4,"diffs":[{"njs":11.0,"offset":0.0,"notes":299,"bombs":0,"obstacles":0,"nps":3.545,"length":253.998,"characteristic":"Standard","difficulty":"Hard","events":2393,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":84.349,"paritySummary":{"errors":10,"warns":7,"resets":0}},{"njs":13.0,"offset":0.0,"notes":375,"bombs":0,"obstacles":0,"nps":4.446,"length":253.998,"characteristic":"Standard","difficulty":"Expert","events":2472,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":84.349,"paritySummary":{"errors":21,"warns":20,"resets":0}},{"njs":15.0,"offset":0.0,"notes":460,"bombs":0,"obstacles":0,"nps":5.454,"length":253.998,"characteristic":"Standard","difficulty":"ExpertPlus","events":2472,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":84.349,"paritySummary":{"errors":22,"warns":20,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/c00412845c48fb65fc30f16d902af542ca2c88ac.zip","coverURL":"https://cdn.beatsaver.com/c00412845c48fb65fc30f16d902af542ca2c88ac.jpg","previewURL":"https://cdn.beatsaver.com/c00412845c48fb65fc30f16d902af542ca2c88ac.mp3"}],"createdAt":"2019-11-17T07:01:53.007Z","updatedAt":"2019-11-17T07:01:53.007Z","lastPublishedAt":"2019-11-17T07:01:53.007Z"},{"id":"88bd","name":"Pornhub Intro","description":"182nd Map\nCollab with Monteblanco, Neko, shuuxruri, Suzuki.dll, Zoinkai & Kalmer\n\nYoutube Preview : https://www.youtube.com/watch?v=7V8go6p4P2E","uploader":{"id":4284588,"name":"rigid","uniqueSet":true,"hash":"5cff0b7598cc5a672c852224","avatar":"https://cdn.beatsaver.com/avatar/295613108947386368.png","type":"DISCORD"},"metadata":{"bpm":120.0,"duration":5,"songName":"Pornhub Intro","songSubName":"","songAuthorName":"Yes","levelAuthorName":"Rigid, Monteblanco, Neko, shuuxruri, Suzuki.dll, Zoinkai & Kalmer"},"stats":{"plays":0,"downloads":3144,"upvotes":2182,"downvotes":51,"score":0.9303},"uploaded":"2020-02-19T21:36:55.060Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"3ff5c30044bc8d0dfe5aae6b9c665a6367732242","key":"88bd","state":"Published","createdAt":"2020-02-19T21:36:55.060Z","sageScore":3,"diffs":[{"njs":14.0,"offset":0.0,"notes":10,"bombs":0,"obstacles":0,"nps":4.706,"length":4.25,"characteristic":"Standard","difficulty":"ExpertPlus","events":93,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":2.125,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/3ff5c30044bc8d0dfe5aae6b9c665a6367732242.zip","coverURL":"https://cdn.beatsaver.com/3ff5c30044bc8d0dfe5aae6b9c665a6367732242.jpg","previewURL":"https://cdn.beatsaver.com/3ff5c30044bc8d0dfe5aae6b9c665a6367732242.mp3"}],"createdAt":"2020-02-19T21:36:55.060Z","updatedAt":"2020-02-19T21:36:55.060Z","lastPublishedAt":"2020-02-19T21:36:55.060Z"},{"id":"3f79","name":"Here With Me (feat. CHVRCHES) - Marshmello","description":"Expert Playthrough : https://youtu.be/okOkJ55es8A","uploader":{"id":13320,"name":"novashaft","uniqueSet":true,"hash":"5cff0b7398cc5a672c84ee55","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee55?d=retro","type":"SIMPLE"},"metadata":{"bpm":100.0,"duration":158,"songName":"Here With Me (feat. CHVRCHES)","songSubName":"Marshmello","songAuthorName":"NovaShaft","levelAuthorName":"novashaft"},"stats":{"plays":0,"downloads":6739,"upvotes":2077,"downvotes":47,"score":0.9303},"uploaded":"2019-03-21T15:12:40Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"bae9f42e64c14c8b1740c5bedc0e1c1db8c33c7d","key":"3f79","state":"Published","createdAt":"2019-03-21T15:12:40Z","sageScore":5,"diffs":[{"njs":11.0,"offset":0.0,"notes":253,"bombs":0,"obstacles":35,"nps":1.67,"length":252.5,"characteristic":"Standard","difficulty":"Normal","events":626,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":151.5,"paritySummary":{"errors":27,"warns":6,"resets":0}},{"njs":12.0,"offset":0.0,"notes":306,"bombs":0,"obstacles":35,"nps":2.02,"length":252.5,"characteristic":"Standard","difficulty":"Hard","events":627,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":151.5,"paritySummary":{"errors":13,"warns":8,"resets":0}},{"njs":14.0,"offset":0.0,"notes":450,"bombs":0,"obstacles":35,"nps":2.97,"length":252.5,"characteristic":"Standard","difficulty":"Expert","events":627,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":151.5,"paritySummary":{"errors":28,"warns":24,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/bae9f42e64c14c8b1740c5bedc0e1c1db8c33c7d.zip","coverURL":"https://cdn.beatsaver.com/bae9f42e64c14c8b1740c5bedc0e1c1db8c33c7d.jpg","previewURL":"https://cdn.beatsaver.com/bae9f42e64c14c8b1740c5bedc0e1c1db8c33c7d.mp3"}],"createdAt":"2019-03-21T15:12:40Z","updatedAt":"2019-03-21T15:12:40Z","lastPublishedAt":"2019-03-21T15:12:40Z"},{"id":"238a","name":"Dance of the Sugar Plum Fairy - Lindsey Stirling","description":"EDIT: Thanks to everyone who voted for this map in the Christmas contest!\n\nTheme from the nutcracker.\n\nExpert+ preview: https://youtu.be/naaei24FZAY\nFollow me on Twitter u won't\nhttps://twitter.com/aggrogahu\n\nHard and Normal are kinda close to OST standards, so might be easier for custom standards.\n\nThanks to Redmagi, baxter395, AaltopahWi, and Kolezan for their help and feedback.","uploader":{"id":4284613,"name":"aggrogahu","uniqueSet":true,"hash":"5cff0b7398cc5a672c84fdad","avatar":"https://cdn.beatsaver.com/avatar/158363872649150464.png","type":"DISCORD"},"metadata":{"bpm":140.0,"duration":158,"songName":"Dance of the Sugar Plum Fairy","songSubName":"Lindsey Stirling","songAuthorName":"aggrogahu","levelAuthorName":"aggrogahu"},"stats":{"plays":0,"downloads":4103,"upvotes":1711,"downvotes":33,"score":0.9302},"uploaded":"2018-12-03T09:40:02Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"6b901c30686a9fa2935271177fc1b57dd072aae8","key":"238a","state":"Published","createdAt":"2018-12-03T09:40:02Z","sageScore":4,"diffs":[{"njs":10.0,"offset":0.0,"notes":219,"bombs":2,"obstacles":29,"nps":1.494,"length":342.0,"characteristic":"Standard","difficulty":"Normal","events":547,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":146.571,"paritySummary":{"errors":89,"warns":12,"resets":0}},{"njs":10.0,"offset":0.0,"notes":373,"bombs":2,"obstacles":16,"nps":2.545,"length":342.0,"characteristic":"Standard","difficulty":"Hard","events":547,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":146.571,"paritySummary":{"errors":54,"warns":10,"resets":0}},{"njs":15.0,"offset":0.0,"notes":721,"bombs":4,"obstacles":32,"nps":4.919,"length":342.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":547,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":146.571,"paritySummary":{"errors":51,"warns":67,"resets":1}}],"downloadURL":"https://cdn.beatsaver.com/6b901c30686a9fa2935271177fc1b57dd072aae8.zip","coverURL":"https://cdn.beatsaver.com/6b901c30686a9fa2935271177fc1b57dd072aae8.jpg","previewURL":"https://cdn.beatsaver.com/6b901c30686a9fa2935271177fc1b57dd072aae8.mp3"}],"createdAt":"2018-12-03T09:40:02Z","updatedAt":"2018-12-03T09:40:02Z","lastPublishedAt":"2018-12-03T09:40:02Z"},{"id":"ebb","name":"Do I Wanna Know? - Arctic Monkeys","description":"X/H/N/E difficulties, full manual lighting.\r\n\r\nExpert Playthrough: https://www.youtube.com/watch?v=ejmDJxe1Vzg\r\n\r\nCreated on twitch in one sitting during a tutorial stream.\r\nFollow us and come say hi on twitch! https://www.twitch.tv/freeek\r\n\r\nHave fun :)\r\n\r\nFreeek!","uploader":{"id":47581,"name":"freeek","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e8ad","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8ad?d=retro","type":"SIMPLE"},"metadata":{"bpm":85.0,"duration":273,"songName":"Do I Wanna Know?","songSubName":"Arctic Monkeys","songAuthorName":"Freeek","levelAuthorName":"freeek"},"stats":{"plays":0,"downloads":6011,"upvotes":2491,"downvotes":64,"score":0.9302},"uploaded":"2018-08-09T18:05:46Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"0fa854bb295e56d8c77da226a3ca41c0070cc793","key":"ebb","state":"Published","createdAt":"2018-08-09T18:05:46Z","sageScore":6,"diffs":[{"njs":10.0,"offset":0.0,"notes":372,"bombs":0,"obstacles":71,"nps":1.387,"length":380.0,"characteristic":"Standard","difficulty":"Easy","events":1154,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":268.235,"paritySummary":{"errors":84,"warns":10,"resets":0}},{"njs":10.0,"offset":0.0,"notes":522,"bombs":0,"obstacles":72,"nps":1.946,"length":380.0,"characteristic":"Standard","difficulty":"Normal","events":1154,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":268.235,"paritySummary":{"errors":53,"warns":54,"resets":0}},{"njs":10.0,"offset":0.0,"notes":708,"bombs":0,"obstacles":72,"nps":2.639,"length":380.0,"characteristic":"Standard","difficulty":"Hard","events":1154,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":268.235,"paritySummary":{"errors":56,"warns":74,"resets":0}},{"njs":10.0,"offset":0.0,"notes":863,"bombs":0,"obstacles":75,"nps":3.217,"length":380.0,"characteristic":"Standard","difficulty":"Expert","events":1154,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":268.235,"paritySummary":{"errors":79,"warns":105,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/0fa854bb295e56d8c77da226a3ca41c0070cc793.zip","coverURL":"https://cdn.beatsaver.com/0fa854bb295e56d8c77da226a3ca41c0070cc793.jpg","previewURL":"https://cdn.beatsaver.com/0fa854bb295e56d8c77da226a3ca41c0070cc793.mp3"}],"createdAt":"2018-08-09T18:05:46Z","updatedAt":"2018-08-09T18:05:46Z","lastPublishedAt":"2018-08-09T18:05:46Z"},{"id":"80fb","name":"[Noodlegames] Lifelight (Camellia's Hardstyle Bootleg)","description":"The Ramen Noodle group is here to bring you a map pack full of our favorite video game soundtracks and game-inspired music!\r\n\r\nCamellia + Iconic Song = PepeJam\r\nHas RGB lights (use chromalite pls, you'll make me cry if you don't)\r\n\r\nStandard mapped by +1 Rabbit\r\nLots of love provided by CyanSnow\r\nOne Saber and Lights mapped by Aeroluna\r\n\r\n150 BPM / 3:47 Duration\r\n\r\n[Standard]:\r\nEasy - 284 notes (1.16 NPS)\r\nNormal - 355 notes (1.56 NPS)\r\nHard - 661 notes (2.91 NPS)\r\nExpert - 899 notes (3.96 NPS)\r\nExpert+ - 1036 notes (4.56 NPS)\r\n\r\n[One Saber]:\r\nExpert - 622 notes (2.73 NPS)\r\nExpert+ - 692 notes (3.05 NPS)\r\n\r\nLights preview: https://youtu.be/qk06uZpgr7E","uploader":{"id":4284266,"name":"aeroluna","uniqueSet":true,"hash":"5cff0b7698cc5a672c854907","avatar":"https://cdn.beatsaver.com/avatar/193636171497209856.png","type":"DISCORD"},"metadata":{"bpm":150.0,"duration":227,"songName":"Lifelight","songSubName":"(Camellia's Hardstyle Bootleg)","songAuthorName":"Camellia","levelAuthorName":"+1 Rabbit & Aeroluna"},"stats":{"plays":0,"downloads":4528,"upvotes":1540,"downvotes":27,"score":0.9301},"uploaded":"2020-01-24T23:00:27.676Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"bb2bd82208d452badc4acaf877dc2c4abd0fab15","key":"80fb","state":"Published","createdAt":"2020-01-24T23:00:27.676Z","sageScore":4,"diffs":[{"njs":12.0,"offset":0.0,"notes":264,"bombs":0,"obstacles":8,"nps":1.231,"length":536.0,"characteristic":"Standard","difficulty":"Easy","events":27741,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":214.4,"paritySummary":{"errors":116,"warns":8,"resets":0}},{"njs":12.0,"offset":0.0,"notes":355,"bombs":0,"obstacles":55,"nps":1.656,"length":536.0,"characteristic":"Standard","difficulty":"Normal","events":27741,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":214.4,"paritySummary":{"errors":77,"warns":24,"resets":0}},{"njs":14.0,"offset":0.0,"notes":661,"bombs":0,"obstacles":99,"nps":3.083,"length":536.0,"characteristic":"Standard","difficulty":"Hard","events":27741,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":214.4,"paritySummary":{"errors":39,"warns":29,"resets":0}},{"njs":16.0,"offset":0.25,"notes":899,"bombs":0,"obstacles":103,"nps":4.193,"length":536.0,"characteristic":"Standard","difficulty":"Expert","events":27741,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":214.4,"paritySummary":{"errors":2,"warns":0,"resets":0}},{"njs":19.0,"offset":-0.2,"notes":1036,"bombs":0,"obstacles":46,"nps":4.832,"length":536.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":27741,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":214.4,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":16.0,"offset":0.0,"notes":622,"bombs":0,"obstacles":0,"nps":2.777,"length":560.0,"characteristic":"OneSaber","difficulty":"Expert","events":27741,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":224.0,"paritySummary":{"errors":7,"warns":1,"resets":0}},{"njs":18.0,"offset":0.0,"notes":692,"bombs":0,"obstacles":0,"nps":3.089,"length":560.0,"characteristic":"OneSaber","difficulty":"ExpertPlus","events":27741,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":224.0,"paritySummary":{"errors":3,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/bb2bd82208d452badc4acaf877dc2c4abd0fab15.zip","coverURL":"https://cdn.beatsaver.com/bb2bd82208d452badc4acaf877dc2c4abd0fab15.jpg","previewURL":"https://cdn.beatsaver.com/bb2bd82208d452badc4acaf877dc2c4abd0fab15.mp3"}],"createdAt":"2020-01-24T23:00:27.676Z","updatedAt":"2020-01-24T23:00:27.676Z","lastPublishedAt":"2020-01-24T23:00:27.676Z"},{"id":"d410","name":"[FUTURE FUNK PACK] Disco Lady - Nanidato","description":"FUTURE FUNK MAP PACK\n2 songs uploaded everyday through August 10th - 14th!\n\n\"Disco Lady\" by Nanidato was sampled from Tomato n' Pine's \"Wanna Dance!\" \n\nPlease look forward to the upcoming maps!\n\nDM any feedback on Discord\nETAN#8341","uploader":{"id":4235140,"name":"etan","uniqueSet":true,"hash":"5cff0b7798cc5a672c855775","avatar":"https://cdn.beatsaver.com/avatar/136373107559497728.png","type":"DISCORD"},"metadata":{"bpm":120.0,"duration":189,"songName":"Disco Lady","songSubName":"","songAuthorName":"Nanidato","levelAuthorName":"ETAN"},"stats":{"plays":0,"downloads":4750,"upvotes":1097,"downvotes":12,"score":0.9299},"uploaded":"2020-08-11T17:46:48.109Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"601f29bdee0f10a29f1ad1520bd296930c7ad3d4","key":"d410","state":"Published","createdAt":"2020-08-11T17:46:48.109Z","sageScore":6,"diffs":[{"njs":10.0,"offset":1.0,"notes":191,"bombs":0,"obstacles":1,"nps":1.051,"length":363.5,"characteristic":"Standard","difficulty":"Easy","events":7333,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":181.75,"paritySummary":{"errors":8,"warns":6,"resets":0}},{"njs":10.0,"offset":1.0,"notes":321,"bombs":0,"obstacles":1,"nps":1.733,"length":370.5,"characteristic":"Standard","difficulty":"Normal","events":7333,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":185.25,"paritySummary":{"errors":2,"warns":0,"resets":0}},{"njs":12.0,"offset":0.3,"notes":494,"bombs":0,"obstacles":1,"nps":2.667,"length":370.5,"characteristic":"Standard","difficulty":"Hard","events":7333,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":185.25,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":14.0,"offset":0.0,"notes":661,"bombs":0,"obstacles":1,"nps":3.568,"length":370.5,"characteristic":"Standard","difficulty":"Expert","events":7333,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":185.25,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":17.0,"offset":-0.5,"notes":924,"bombs":0,"obstacles":1,"nps":4.988,"length":370.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":7333,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":185.25,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/601f29bdee0f10a29f1ad1520bd296930c7ad3d4.zip","coverURL":"https://cdn.beatsaver.com/601f29bdee0f10a29f1ad1520bd296930c7ad3d4.jpg","previewURL":"https://cdn.beatsaver.com/601f29bdee0f10a29f1ad1520bd296930c7ad3d4.mp3"}],"createdAt":"2020-08-11T17:46:48.109Z","updatedAt":"2020-08-11T17:46:48.109Z","lastPublishedAt":"2020-08-11T17:46:48.109Z"},{"id":"130e6","name":"Geoxor - Faerie [wall map]","description":"Wall map collab with Reddek lets go!!\nThis turned out so much better than I thought it would, I hope you enjoy it as much as I do\n\nMap preview: https://youtu.be/uOdpWjTdGCU \n\nFeedback welcome at shan_man#7777 and Reddek#5864","uploader":{"id":75261,"name":"shan_man","uniqueSet":true,"hash":"5ec5aaa616c9680006500e0a","avatar":"https://cdn.beatsaver.com/avatar/345431512658739200.png","type":"DISCORD"},"metadata":{"bpm":150.0,"duration":244,"songName":"Faerie","songSubName":"","songAuthorName":"Geoxor","levelAuthorName":"Reddek & Shan_Man"},"stats":{"plays":0,"downloads":2988,"upvotes":1092,"downvotes":12,"score":0.9298},"uploaded":"2021-01-23T05:09:19.779Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"57c96c82897a73c495758fa494875dce6bdab869","key":"130e6","state":"Published","createdAt":"2021-01-23T05:09:19.779Z","sageScore":5,"diffs":[{"njs":20.0,"offset":-0.5,"notes":1269,"bombs":42,"obstacles":0,"nps":5.513,"length":575.5,"characteristic":"Standard","difficulty":"Expert","events":9327,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":230.2,"paritySummary":{"errors":0,"warns":0,"resets":15}},{"njs":20.0,"offset":-0.5,"notes":1650,"bombs":42,"obstacles":3239,"nps":7.118,"length":579.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":9327,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":231.8,"paritySummary":{"errors":37,"warns":1,"resets":15}}],"downloadURL":"https://cdn.beatsaver.com/57c96c82897a73c495758fa494875dce6bdab869.zip","coverURL":"https://cdn.beatsaver.com/57c96c82897a73c495758fa494875dce6bdab869.jpg","previewURL":"https://cdn.beatsaver.com/57c96c82897a73c495758fa494875dce6bdab869.mp3"}],"createdAt":"2021-01-23T05:09:19.779Z","updatedAt":"2021-01-23T05:09:19.779Z","lastPublishedAt":"2021-01-23T05:09:19.779Z"},{"id":"4a36","name":"[Anniversary] Backbone (ft. Nevve) - Droeloe [Fafurion & Skyler Wallace]","description":"Part of the Anniversary Song Pack","uploader":{"id":37070,"name":"anniversaryteam","uniqueSet":true,"hash":"5cff0b7798cc5a672c8565a3","avatar":"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro","type":"SIMPLE"},"metadata":{"bpm":151.0,"duration":171,"songName":"Backbone","songSubName":"Droeloe","songAuthorName":"Fafurion & Skyler Wallace","levelAuthorName":"AnniversaryTeam"},"stats":{"plays":0,"downloads":3767,"upvotes":2308,"downvotes":58,"score":0.9296},"uploaded":"2019-05-03T14:08:11Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"376abe290620e443e9451366accb30e5095edbce","key":"4a36","state":"Published","createdAt":"2019-05-03T14:08:11Z","sageScore":7,"diffs":[{"njs":10.0,"offset":0.0,"notes":190,"bombs":0,"obstacles":4,"nps":1.248,"length":383.0,"characteristic":"Standard","difficulty":"Easy","events":909,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":152.185,"paritySummary":{"errors":36,"warns":31,"resets":0}},{"njs":12.0,"offset":0.0,"notes":265,"bombs":0,"obstacles":7,"nps":1.746,"length":382.0,"characteristic":"Standard","difficulty":"Normal","events":909,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":151.788,"paritySummary":{"errors":43,"warns":49,"resets":0}},{"njs":12.0,"offset":0.0,"notes":417,"bombs":0,"obstacles":12,"nps":2.747,"length":382.0,"characteristic":"Standard","difficulty":"Hard","events":909,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":151.788,"paritySummary":{"errors":65,"warns":40,"resets":0}},{"njs":12.0,"offset":1.0,"notes":552,"bombs":0,"obstacles":1,"nps":3.632,"length":382.5,"characteristic":"Standard","difficulty":"Expert","events":909,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":151.987,"paritySummary":{"errors":36,"warns":42,"resets":0}},{"njs":14.0,"offset":1.0,"notes":592,"bombs":0,"obstacles":3,"nps":3.895,"length":382.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":909,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":151.987,"paritySummary":{"errors":45,"warns":59,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/376abe290620e443e9451366accb30e5095edbce.zip","coverURL":"https://cdn.beatsaver.com/376abe290620e443e9451366accb30e5095edbce.jpg","previewURL":"https://cdn.beatsaver.com/376abe290620e443e9451366accb30e5095edbce.mp3"}],"createdAt":"2019-05-03T14:08:11Z","updatedAt":"2019-05-03T14:08:11Z","lastPublishedAt":"2019-05-03T14:08:11Z"},{"id":"75ba","name":"Savior - Rise Against","description":"\"Savior\" is punk rock song by American rock band Rise Against, featured on their fifth studio album Appeal to Reason (2008). In contrast to the social and political topics normally discussed in Rise Against songs, \"Savior\" is about forgiveness and broken relationships.","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":169.0,"duration":244,"songName":"Savior","songSubName":"","songAuthorName":"Rise Against","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":3854,"upvotes":1458,"downvotes":25,"score":0.9295},"uploaded":"2019-12-11T15:27:50.619Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"20527803675e3a3d7721c0b8d05a1439a02a580d","key":"75ba","state":"Published","createdAt":"2019-12-11T15:27:50.619Z","sageScore":5,"diffs":[{"njs":15.0,"offset":0.0,"notes":925,"bombs":30,"obstacles":6,"nps":3.912,"length":664.996,"characteristic":"Standard","difficulty":"Expert","events":3686,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":236.093,"paritySummary":{"errors":20,"warns":13,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/20527803675e3a3d7721c0b8d05a1439a02a580d.zip","coverURL":"https://cdn.beatsaver.com/20527803675e3a3d7721c0b8d05a1439a02a580d.jpg","previewURL":"https://cdn.beatsaver.com/20527803675e3a3d7721c0b8d05a1439a02a580d.mp3"}],"createdAt":"2019-12-11T15:27:50.619Z","updatedAt":"2019-12-11T15:27:50.619Z","lastPublishedAt":"2019-12-11T15:27:50.619Z"},{"id":"affa","name":"Zomboy - Endgame [NE/CHROMA]","description":"Can you survive?\r\n\r\nPreview: https://youtu.be/t4bk8ym3fIQ","uploader":{"id":26361,"name":"spookyghost","uniqueSet":true,"hash":"5cff0b7798cc5a672c8561a5","avatar":"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8561a5?d=retro","type":"SIMPLE"},"metadata":{"bpm":200.0,"duration":310,"songName":"End Game","songSubName":"Rott n' Roll","songAuthorName":"Zomboy","levelAuthorName":"Spooky Ghost & Exce"},"stats":{"plays":0,"downloads":2617,"upvotes":2099,"downvotes":50,"score":0.9294},"uploaded":"2020-06-08T17:04:09.275Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"c28ffc53acd2c89329b5a7ff3d57a2b32bca416e","key":"affa","state":"Published","createdAt":"2020-06-08T17:04:09.275Z","sageScore":4,"diffs":[{"njs":22.0,"offset":0.0,"notes":1493,"bombs":5376,"obstacles":50000,"nps":5.068,"length":982.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":12193,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":294.6,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/c28ffc53acd2c89329b5a7ff3d57a2b32bca416e.zip","coverURL":"https://cdn.beatsaver.com/c28ffc53acd2c89329b5a7ff3d57a2b32bca416e.jpg","previewURL":"https://cdn.beatsaver.com/c28ffc53acd2c89329b5a7ff3d57a2b32bca416e.mp3"}],"createdAt":"2020-06-08T17:04:09.275Z","updatedAt":"2020-06-08T17:04:09.275Z","lastPublishedAt":"2020-06-08T17:04:09.275Z"},{"id":"475","name":"Ride - Twenty One Pilots","description":"Expert and Normal Charts\nLighting Events\n\nhttps://twitter.com/TheDownyCat\nhttps://www.twitch.tv/downycat\nhttps://streamlabs.com/downycat/tip","uploader":{"id":4285982,"name":"downycat","uniqueSet":true,"hash":"5cff0b7398cc5a672c84ede5","avatar":"https://cdn.beatsaver.com/avatar/173538829888782336.png","type":"DISCORD"},"metadata":{"bpm":150.0,"duration":213,"songName":"Ride","songSubName":"Twenty One Pilots","songAuthorName":"DownyCat","levelAuthorName":"downycat"},"stats":{"plays":0,"downloads":5957,"upvotes":2990,"downvotes":88,"score":0.9294},"uploaded":"2018-06-09T11:24:50Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"05c4b1fc955756d2672ce322417ad2fadb416af6","key":"475","state":"Published","createdAt":"2018-06-09T11:24:50Z","sageScore":4,"diffs":[{"njs":10.0,"offset":0.0,"notes":377,"bombs":0,"obstacles":32,"nps":1.844,"length":511.0,"characteristic":"Standard","difficulty":"Normal","events":859,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":204.4,"paritySummary":{"errors":109,"warns":26,"resets":0}},{"njs":10.0,"offset":0.0,"notes":674,"bombs":0,"obstacles":32,"nps":3.297,"length":511.0,"characteristic":"Standard","difficulty":"Expert","events":859,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":204.4,"paritySummary":{"errors":96,"warns":102,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/05c4b1fc955756d2672ce322417ad2fadb416af6.zip","coverURL":"https://cdn.beatsaver.com/05c4b1fc955756d2672ce322417ad2fadb416af6.jpg","previewURL":"https://cdn.beatsaver.com/05c4b1fc955756d2672ce322417ad2fadb416af6.mp3"}],"createdAt":"2018-06-09T11:24:50Z","updatedAt":"2018-06-09T11:24:50Z","lastPublishedAt":"2018-06-09T11:24:50Z"},{"id":"5725","name":"Livin' La Vida Loca - Ricky Martin","description":"\"Livin' la Vida Loca\" (Livin' A Crazy Life) is the number-one hit song performed by Ricky Martin. It was released on March 23, 1999, from Martin's self-titled debut English-language album.\n\nI actually heard this song first from Eddie Murphy and Antonio Banderas at the end of Shrek 2 lol. Gotta say, its pretty catchy.\n\nEDIT: Fixed one mismapped note on chorus section and added two more notes at the very start of the song","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":178.0,"duration":242,"songName":"Livin' La Vida Loca","songSubName":"","songAuthorName":"Ricky Martin","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":7458,"upvotes":2396,"downvotes":63,"score":0.9292},"uploaded":"2019-07-15T07:01:36.333Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"13d4f57a62f8725b39e607914637625e1edaf58d","key":"5725","state":"Published","createdAt":"2019-07-15T07:01:36.333Z","sageScore":6,"diffs":[{"njs":14.0,"offset":0.0,"notes":932,"bombs":0,"obstacles":20,"nps":3.908,"length":707.5,"characteristic":"Standard","difficulty":"Expert","events":2683,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":238.483,"paritySummary":{"errors":87,"warns":58,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/13d4f57a62f8725b39e607914637625e1edaf58d.zip","coverURL":"https://cdn.beatsaver.com/13d4f57a62f8725b39e607914637625e1edaf58d.jpg","previewURL":"https://cdn.beatsaver.com/13d4f57a62f8725b39e607914637625e1edaf58d.mp3"}],"createdAt":"2019-07-15T07:01:36.333Z","updatedAt":"2019-07-15T07:01:36.333Z","lastPublishedAt":"2019-07-15T07:01:36.333Z"},{"id":"5efe","name":"Welcome to the Club - Nightcore (Manian)","description":"Been a while since I released, but I'm back with a brand new map! Welcome to the club everyone! We've got it goin on, til the break of dawn, so put the record on!\n\nBPM: 182.39\nNPS: N - 2.46 ; H - 2.91 ; Ex - 4.03 ; Ex+ - 4.51\nNotes: N - 396 ; H - 468 ; Ex - 648 ; Ex+ - 725\nWalls: N - 131 ; H - 48 ; Ex - 27 ; Ex+ - 31\nBombs: N - 24 ; H - 0 ; Ex - 0 ; Ex+ - 0\n\nThanks to Redmagi, Kival Evan, helencarnate, and redhq for testing, and to Skeelie and Ryger (RaynArch) for helping with timing!","uploader":{"id":4285188,"name":"fruhead","uniqueSet":true,"hash":"5cff0b7598cc5a672c852683","avatar":"https://cdn.beatsaver.com/avatar/174000100413145090.png","type":"DISCORD"},"metadata":{"bpm":182.39,"duration":161,"songName":"Welcome to the Club","songSubName":"","songAuthorName":"Nightcore","levelAuthorName":"fruhead"},"stats":{"plays":0,"downloads":3613,"upvotes":2226,"downvotes":56,"score":0.9291},"uploaded":"2019-08-25T06:45:04.972Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"f42e4fb7ea9a439bdf295ee1cf4459e52d15b520","key":"5efe","state":"Published","createdAt":"2019-08-25T06:45:04.972Z","sageScore":4,"diffs":[{"njs":12.0,"offset":0.0,"notes":396,"bombs":24,"obstacles":131,"nps":2.556,"length":471.0,"characteristic":"Standard","difficulty":"Normal","events":5134,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":154.943,"paritySummary":{"errors":42,"warns":4,"resets":4}},{"njs":14.0,"offset":0.5,"notes":468,"bombs":0,"obstacles":48,"nps":3.018,"length":471.375,"characteristic":"Standard","difficulty":"Hard","events":5134,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":155.066,"paritySummary":{"errors":14,"warns":1,"resets":0}},{"njs":17.0,"offset":0.5,"notes":648,"bombs":0,"obstacles":27,"nps":4.179,"length":471.375,"characteristic":"Standard","difficulty":"Expert","events":5134,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":155.066,"paritySummary":{"errors":18,"warns":2,"resets":0}},{"njs":18.0,"offset":0.5,"notes":725,"bombs":0,"obstacles":31,"nps":4.675,"length":471.375,"characteristic":"Standard","difficulty":"ExpertPlus","events":5134,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":155.066,"paritySummary":{"errors":27,"warns":3,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/f42e4fb7ea9a439bdf295ee1cf4459e52d15b520.zip","coverURL":"https://cdn.beatsaver.com/f42e4fb7ea9a439bdf295ee1cf4459e52d15b520.jpg","previewURL":"https://cdn.beatsaver.com/f42e4fb7ea9a439bdf295ee1cf4459e52d15b520.mp3"}],"createdAt":"2019-08-25T06:45:04.972Z","updatedAt":"2019-08-25T06:45:04.972Z","lastPublishedAt":"2019-08-25T06:45:04.972Z"},{"id":"58b7","name":"The Twist - Chubby Checker","description":"Do the Twist!\n\nThere's a twist to this map ;) it has zero down slash notes (I always wanted to try making a map with no down slashes and I think I found the perfect song to try that)","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":155.0,"duration":158,"songName":"The Twist","songSubName":"","songAuthorName":"Chubby Checker","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":2345,"upvotes":998,"downvotes":10,"score":0.929},"uploaded":"2019-07-24T18:00:19.429Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"1c2af7c45bb55bfb19401ac619bded30c4cf01c6","key":"58b7","state":"Published","createdAt":"2019-07-24T18:00:19.429Z","sageScore":6,"diffs":[{"njs":14.0,"offset":0.0,"notes":591,"bombs":0,"obstacles":4,"nps":3.834,"length":398.188,"characteristic":"Standard","difficulty":"Expert","events":2280,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":154.137,"paritySummary":{"errors":15,"warns":93,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/1c2af7c45bb55bfb19401ac619bded30c4cf01c6.zip","coverURL":"https://cdn.beatsaver.com/1c2af7c45bb55bfb19401ac619bded30c4cf01c6.jpg","previewURL":"https://cdn.beatsaver.com/1c2af7c45bb55bfb19401ac619bded30c4cf01c6.mp3"}],"createdAt":"2019-07-24T18:00:19.429Z","updatedAt":"2019-07-24T18:00:19.429Z","lastPublishedAt":"2019-07-24T18:00:19.429Z"},{"id":"11e9c","name":"Tsuki No Waltz (Standard and FeetSaber)","description":"*****Attention!!*****\nThis map will take SO LONG to finish loading, since it has 2 standard and 3 FeetSaber difficulties which are all wallmaps... Please be patient.\n読み込みがものすごく長いです。2刀譜面2つ、足譜面3つ、すべて壁譜面なので…。\n*********************\n\nRequirements :\nNoodle Extensions\nChroma\nFeet Saber (NalulunaModifier)\n\nBig thanks to Rinka Michibiki for making standard difficulties.\n2刀譜面を提供していただいた導祈りんか様に、心からの感謝を。\n\nFeetmap and wall: henomohesan @henomohesan\nStandard difficulty: Rinka Michibiki @rinka_michibiki\n\nDemo :\n(Standard) https://youtu.be/4Q_PJ7tg3LA\n(Feet Saber) https://youtu.be/PngIJAleFTQ\n\nYou can download NalulunaModifier from official page :\nhttps://youtu.be/QtLNweiiQPU\n\nSpecial Thanks:\nMapping Club JP Discord by kamy @kamy_0811\nChromapper JP manual by 姚明 @gensouyou_39\nBeatwall JP manual by Kamy @kamy_0811 and FaZPi @FaZ_Pi","uploader":{"id":4285472,"name":"henomohesan","uniqueSet":true,"hash":"5ece0766d87e5800060a4635","avatar":"https://cdn.beatsaver.com/avatar/483262661245796352.png","type":"DISCORD"},"metadata":{"bpm":173.0,"duration":183,"songName":"Tsuki No Waltz (Standard and FeetSaber)","songSubName":"","songAuthorName":"Mio Isayama","levelAuthorName":"henomohesan"},"stats":{"plays":0,"downloads":2241,"upvotes":723,"downvotes":2,"score":0.9288},"uploaded":"2020-12-22T07:56:06.804Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"c967a5862a8602ebacebe44b6ac5c2422c3e90bb","key":"11e9c","state":"Published","createdAt":"2020-12-22T07:56:06.804Z","sageScore":4,"diffs":[{"njs":10.0,"offset":0.7,"notes":218,"bombs":0,"obstacles":13839,"nps":1.318,"length":477.0,"characteristic":"Standard","difficulty":"Normal","events":6,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":165.434,"paritySummary":{"errors":6,"warns":0,"resets":0}},{"njs":11.0,"offset":-0.5,"notes":398,"bombs":0,"obstacles":13839,"nps":2.406,"length":477.0,"characteristic":"Standard","difficulty":"Hard","events":6,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":165.434,"paritySummary":{"errors":3,"warns":7,"resets":0}},{"njs":8.0,"offset":0.0,"notes":206,"bombs":0,"obstacles":13859,"nps":1.245,"length":477.0,"characteristic":"NoArrows","difficulty":"Easy","events":6,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":165.434,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":10.0,"offset":0.0,"notes":333,"bombs":0,"obstacles":13839,"nps":2.013,"length":477.0,"characteristic":"NoArrows","difficulty":"Normal","events":6,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":165.434,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":10.0,"offset":0.0,"notes":408,"bombs":0,"obstacles":13839,"nps":2.466,"length":477.0,"characteristic":"NoArrows","difficulty":"Expert","events":6,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":165.434,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/c967a5862a8602ebacebe44b6ac5c2422c3e90bb.zip","coverURL":"https://cdn.beatsaver.com/c967a5862a8602ebacebe44b6ac5c2422c3e90bb.jpg","previewURL":"https://cdn.beatsaver.com/c967a5862a8602ebacebe44b6ac5c2422c3e90bb.mp3"}],"createdAt":"2020-12-22T07:56:06.804Z","updatedAt":"2020-12-22T07:56:06.804Z","lastPublishedAt":"2020-12-22T07:56:06.804Z"},{"id":"44f6","name":"Blumenkranz - Cyua & Hiroyuki Sawano [Kill la Kill OST]","description":"Smol fix in Exp.\r\n\r\nExp+ Gameplay: https://youtu.be/lAi_xIWoQsc\r\n\r\nVocals by Cyua.\r\nMusic by Hiroyuki Sawano.\r\nLyrics by Rie Sawano.\r\nCheck out Kill la Kill, it's awesome! And has more awesome music!\r\nhttps://myanimelist.net/anime/18679/Kill_la_Kill\r\n\r\nCover from the Kill la Kill OST.","uploader":{"id":4286005,"name":"mandynasty","uniqueSet":true,"hash":"5cff0b7398cc5a672c84ffaa","avatar":"https://cdn.beatsaver.com/avatar/307589087030673408.png","type":"DISCORD"},"metadata":{"bpm":160.0,"duration":259,"songName":"Blumenkranz","songSubName":"Cyua & Hiroyuki Sawano","songAuthorName":"ManDynasty","levelAuthorName":"ManDynasty"},"stats":{"plays":0,"downloads":2635,"upvotes":1171,"downvotes":16,"score":0.9288},"uploaded":"2019-04-11T19:30:09Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"01f7b442e2f206d1611fe45e297c216fe07da78e","key":"44f6","state":"Published","createdAt":"2019-04-11T19:30:09Z","sageScore":4,"diffs":[{"njs":10.0,"offset":0.0,"notes":462,"bombs":52,"obstacles":94,"nps":1.839,"length":670.0,"characteristic":"Standard","difficulty":"Normal","events":4169,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":251.25,"paritySummary":{"errors":23,"warns":15,"resets":1}},{"njs":14.0,"offset":1.0,"notes":633,"bombs":101,"obstacles":89,"nps":2.519,"length":670.0,"characteristic":"Standard","difficulty":"Hard","events":4169,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":251.25,"paritySummary":{"errors":44,"warns":53,"resets":1}},{"njs":15.0,"offset":1.0,"notes":947,"bombs":66,"obstacles":77,"nps":3.764,"length":671.0,"characteristic":"Standard","difficulty":"Expert","events":4169,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":251.625,"paritySummary":{"errors":85,"warns":116,"resets":2}},{"njs":16.0,"offset":0.0,"notes":1054,"bombs":66,"obstacles":83,"nps":4.189,"length":671.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":4169,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":251.625,"paritySummary":{"errors":80,"warns":108,"resets":2}}],"downloadURL":"https://cdn.beatsaver.com/01f7b442e2f206d1611fe45e297c216fe07da78e.zip","coverURL":"https://cdn.beatsaver.com/01f7b442e2f206d1611fe45e297c216fe07da78e.jpg","previewURL":"https://cdn.beatsaver.com/01f7b442e2f206d1611fe45e297c216fe07da78e.mp3"}],"createdAt":"2019-04-11T19:30:09Z","updatedAt":"2019-04-11T19:30:09Z","lastPublishedAt":"2019-04-11T19:30:09Z"},{"id":"4377","name":"The Greatest - Sia","description":"YouTube Preview: https://youtu.be/huUMotlFpig","uploader":{"id":30311,"name":"bennydabeast","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e98d","avatar":"https://cdn.beatsaver.com/avatar/30311.jpg","type":"SIMPLE"},"metadata":{"bpm":192.0,"duration":191,"songName":"The Greatest (ft. Kendrick Lamar)","songSubName":"Sia","songAuthorName":"BennyDaBeast","levelAuthorName":"bennydabeast"},"stats":{"plays":0,"downloads":6436,"upvotes":2325,"downvotes":61,"score":0.9288},"uploaded":"2019-04-04T21:20:03Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"58cd8ddf99600d967bca61285e9e0c429138009d","key":"4377","state":"Published","createdAt":"2019-04-04T21:20:03Z","sageScore":6,"diffs":[{"njs":12.0,"offset":0.0,"notes":822,"bombs":16,"obstacles":20,"nps":4.355,"length":604.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":3165,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":188.75,"paritySummary":{"errors":91,"warns":108,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/58cd8ddf99600d967bca61285e9e0c429138009d.zip","coverURL":"https://cdn.beatsaver.com/58cd8ddf99600d967bca61285e9e0c429138009d.jpg","previewURL":"https://cdn.beatsaver.com/58cd8ddf99600d967bca61285e9e0c429138009d.mp3"}],"createdAt":"2019-04-04T21:20:03Z","updatedAt":"2019-04-04T21:20:03Z","lastPublishedAt":"2019-04-04T21:20:03Z"},{"id":"110ac","name":"Madeon - The Prince","description":"*CHROMA RECOMMENDED*\n\nThis map was originally going to have autolights. Imagine.\n\nDg: \"When I began lighting this map, I did it with the intention of copying the colors and vibe of the official visualizer by Madeon, with my own twists to bring it up to Beat Saber level. The amount of time and effort that went into literally lighting thermal cam... unreal.\"\n\nYou can check out the visualizer here:https://www.youtube.com/watch?v=AOhFzDN3eMI\n\nBearly#5259\nDGRJ4Life#6510","uploader":{"id":2381,"name":"bearly","uniqueSet":true,"hash":"5ea9efbf16c968000636dba4","avatar":"https://www.gravatar.com/avatar/5ea9efbf16c968000636dba4?d=retro","type":"SIMPLE"},"metadata":{"bpm":95.0,"duration":223,"songName":"The Prince","songSubName":"","songAuthorName":"Madeon","levelAuthorName":"Bearly & dgrj4life"},"stats":{"plays":0,"downloads":8424,"upvotes":1707,"downvotes":36,"score":0.9287},"uploaded":"2020-11-16T23:34:00.851Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"cf3243d6fc63c77a3b864414314ca4fb36f69e77","key":"110ac","state":"Published","createdAt":"2020-11-16T23:34:00.851Z","sageScore":5,"diffs":[{"njs":17.0,"offset":0.15,"notes":917,"bombs":8,"obstacles":30,"nps":4.27,"length":340.0,"characteristic":"Standard","difficulty":"Expert","events":33893,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":214.737,"paritySummary":{"errors":0,"warns":0,"resets":3}},{"njs":18.5,"offset":-0.2,"notes":990,"bombs":3,"obstacles":21,"nps":4.61,"length":340.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":33893,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":214.737,"paritySummary":{"errors":0,"warns":0,"resets":1}},{"njs":16.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"Lightshow","difficulty":"Easy","events":33893,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/cf3243d6fc63c77a3b864414314ca4fb36f69e77.zip","coverURL":"https://cdn.beatsaver.com/cf3243d6fc63c77a3b864414314ca4fb36f69e77.jpg","previewURL":"https://cdn.beatsaver.com/cf3243d6fc63c77a3b864414314ca4fb36f69e77.mp3"}],"createdAt":"2020-11-16T23:34:00.851Z","updatedAt":"2020-11-16T23:34:00.851Z","lastPublishedAt":"2020-11-16T23:34:00.851Z"},{"id":"b18a","name":"[Bloq Busters Vol. 4] Eric Johnson - Cliffs of Dover","description":"Thanks to SkylerWallace for warping the audio to make this actually mappable! I loved this song from Guitar Hero, and wanted it to have a spot here in Beat Saber. Enjoy!","uploader":{"id":4284569,"name":"checkthepan","uniqueSet":true,"hash":"5cff0b7398cc5a672c84f3d5","avatar":"https://cdn.beatsaver.com/avatar/184355369189900290.png","type":"DISCORD"},"metadata":{"bpm":95.0,"duration":254,"songName":"Cliffs of Dover","songSubName":"","songAuthorName":"Eric Johnson","levelAuthorName":"Checkthepan"},"stats":{"plays":0,"downloads":5733,"upvotes":1467,"downvotes":27,"score":0.9286},"uploaded":"2020-06-12T22:01:10.949Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"9f9f5c00b449549b1c276209148551c38abf495a","key":"b18a","state":"Published","createdAt":"2020-06-12T22:01:10.949Z","sageScore":6,"diffs":[{"njs":14.0,"offset":-0.25,"notes":835,"bombs":0,"obstacles":2,"nps":3.389,"length":390.063,"characteristic":"Standard","difficulty":"Hard","events":8195,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":246.355,"paritySummary":{"errors":9,"warns":7,"resets":0}},{"njs":16.0,"offset":0.25,"notes":1327,"bombs":89,"obstacles":20,"nps":5.387,"length":390.063,"characteristic":"Standard","difficulty":"Expert","events":8195,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":246.355,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":20.0,"offset":0.0,"notes":1417,"bombs":178,"obstacles":10,"nps":5.752,"length":390.063,"characteristic":"Standard","difficulty":"ExpertPlus","events":8195,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":246.355,"paritySummary":{"errors":3,"warns":1,"resets":7}}],"downloadURL":"https://cdn.beatsaver.com/9f9f5c00b449549b1c276209148551c38abf495a.zip","coverURL":"https://cdn.beatsaver.com/9f9f5c00b449549b1c276209148551c38abf495a.jpg","previewURL":"https://cdn.beatsaver.com/9f9f5c00b449549b1c276209148551c38abf495a.mp3"}],"createdAt":"2020-06-12T22:01:10.949Z","updatedAt":"2020-06-12T22:01:10.949Z","lastPublishedAt":"2020-06-12T22:01:10.949Z"},{"id":"21b8","name":"Senpai Notice Me","description":"I need therapy.\r\nFinally getting it ranked! Let's go!","uploader":{"id":28684,"name":"jackodej","uniqueSet":true,"hash":"5cff0b7498cc5a672c850120","avatar":"https://www.gravatar.com/avatar/5cff0b7498cc5a672c850120?d=retro","type":"SIMPLE"},"metadata":{"bpm":155.0,"duration":278,"songName":"Senpai Notice Me","songSubName":"Camellia ft. Nanahira","songAuthorName":"JackoDEJ","levelAuthorName":"JackoDEJ"},"stats":{"plays":0,"downloads":5405,"upvotes":5203,"downvotes":197,"score":0.9286},"uploaded":"2018-11-23T14:11:31Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"e3ef6cab44ff2222c09b399e8e5a62a095233621","key":"21b8","state":"Published","createdAt":"2018-11-23T14:11:31Z","sageScore":6,"diffs":[{"njs":16.0,"offset":0.0,"notes":1730,"bombs":0,"obstacles":5,"nps":6.357,"length":703.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":1758,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":272.129,"paritySummary":{"errors":58,"warns":61,"resets":0},"stars":5.91}],"downloadURL":"https://cdn.beatsaver.com/e3ef6cab44ff2222c09b399e8e5a62a095233621.zip","coverURL":"https://cdn.beatsaver.com/e3ef6cab44ff2222c09b399e8e5a62a095233621.jpg","previewURL":"https://cdn.beatsaver.com/e3ef6cab44ff2222c09b399e8e5a62a095233621.mp3"}],"createdAt":"2018-11-23T14:11:31Z","updatedAt":"2018-11-23T14:11:31Z","lastPublishedAt":"2018-11-23T14:11:31Z"},{"id":"42","name":"Icarus - Madeon - HARD","description":"Icarus by Madeon,\r\n\r\nMostly an experiment in the 3D editor events... editor...\r\n\r\nFully evented, 3:33 length\r\n\r\nHard difficulty only.\r\n\r\nYoutube playthrough: https://www.youtube.com/watch?v=VvEkluZHkY4","uploader":{"id":53534,"name":"gompasta","uniqueSet":false,"hash":"5cff0b7298cc5a672c84e8de","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8de?d=retro","type":"SIMPLE"},"metadata":{"bpm":126.0,"duration":213,"songName":"Icarus","songSubName":"","songAuthorName":"Madeon","levelAuthorName":"gompasta"},"stats":{"plays":0,"downloads":6994,"upvotes":3007,"downvotes":92,"score":0.9285},"uploaded":"2018-05-12T00:35:40Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"be1a39b41f2089cad9aa8d775f55e8707447b5ca","key":"42","state":"Published","createdAt":"2018-05-12T00:35:40Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":420,"bombs":16,"obstacles":6,"nps":2.035,"length":433.5,"characteristic":"Standard","difficulty":"Hard","events":859,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":206.429,"paritySummary":{"errors":59,"warns":63,"resets":4},"stars":1.56}],"downloadURL":"https://cdn.beatsaver.com/be1a39b41f2089cad9aa8d775f55e8707447b5ca.zip","coverURL":"https://cdn.beatsaver.com/be1a39b41f2089cad9aa8d775f55e8707447b5ca.jpg","previewURL":"https://cdn.beatsaver.com/be1a39b41f2089cad9aa8d775f55e8707447b5ca.mp3"}],"createdAt":"2018-05-12T00:35:40Z","updatedAt":"2018-05-12T00:35:40Z","lastPublishedAt":"2018-05-12T00:35:40Z"},{"id":"8fc3","name":"Katy Perry - Dark Horse (feat. Juicy J) [Z-ANESaber]","description":"Yo\r\nI´m open for song requests so if you have any ideas let me know in the comments or on Discord:\r\nNiqu#9221\r\n\r\nThis song was requested by: SaberTribe\r\nHave fun!\r\n\r\nPlaythrough: https://www.youtube.com/watch?v=Qs8xfj_EQYs&feature=youtu.be\r\n\r\nSong: https://www.youtube.com/watch?v=0KSOMA3QBU0\r\n\r\nBye","uploader":{"id":4284220,"name":"z-anesaber","uniqueSet":true,"hash":"5dfbafac9921260006527fa4","avatar":"https://cdn.beatsaver.com/avatar/324954940885958658.png","type":"DISCORD"},"metadata":{"bpm":132.0,"duration":212,"songName":"Dark Horse [Z-ANESaber]","songSubName":"(feat. Juicy J)","songAuthorName":"Katy Perry","levelAuthorName":"Z-ANESaber"},"stats":{"plays":0,"downloads":4654,"upvotes":1239,"downvotes":19,"score":0.9283},"uploaded":"2020-03-13T21:40:12.962Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"e53f2a91acfca398d1770e3972861ce15f56b123","key":"8fc3","state":"Published","createdAt":"2020-03-13T21:40:12.962Z","sageScore":3,"diffs":[{"njs":13.3,"offset":0.0,"notes":802,"bombs":12,"obstacles":9,"nps":3.811,"length":463.0,"characteristic":"Standard","difficulty":"Expert","events":1851,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":210.455,"paritySummary":{"errors":6,"warns":4,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/e53f2a91acfca398d1770e3972861ce15f56b123.zip","coverURL":"https://cdn.beatsaver.com/e53f2a91acfca398d1770e3972861ce15f56b123.jpg","previewURL":"https://cdn.beatsaver.com/e53f2a91acfca398d1770e3972861ce15f56b123.mp3"}],"createdAt":"2020-03-13T21:40:12.962Z","updatedAt":"2020-03-13T21:40:12.962Z","lastPublishedAt":"2020-03-13T21:40:12.962Z"},{"id":"89be","name":"More One Night [Girl's Last Tour Ending]","description":"Sung by \nChito (CV: Inori Minase)\nYuuri (CV: Yurika Kubo)\n\nCute girls doing post-apocalyptic things\n\nI have fancy lighting on this one so make sure you got chroma or chromalite to see it! Unfortunately I couldn't get ring prop to work, I think i just mapped it wrong LOL. I learn soon enough\n\nBPM 123 | \nExpert+\nExpert\nHard\nLightshow\n\nty Qwasyx for playtesting\n\npreview: https://www.youtube.com/watch?v=bsqZWXBMQwQ\n\nDM any feedback on Discord\nETAN#8341","uploader":{"id":4235140,"name":"etan","uniqueSet":true,"hash":"5cff0b7798cc5a672c855775","avatar":"https://cdn.beatsaver.com/avatar/136373107559497728.png","type":"DISCORD"},"metadata":{"bpm":123.0,"duration":214,"songName":"More One Night","songSubName":"","songAuthorName":"Inori Minase, Yurika Kubo","levelAuthorName":"ETAN"},"stats":{"plays":0,"downloads":2748,"upvotes":1179,"downvotes":17,"score":0.9283},"uploaded":"2020-02-22T21:17:09.228Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"bf43cba8026db57a2dda154ae4fa24621cc3a232","key":"89be","state":"Published","createdAt":"2020-02-22T21:17:09.228Z","sageScore":7,"diffs":[{"njs":13.0,"offset":0.4,"notes":583,"bombs":0,"obstacles":21,"nps":2.786,"length":429.0,"characteristic":"Standard","difficulty":"Hard","events":16009,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":209.268,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":15.0,"offset":0.0,"notes":833,"bombs":0,"obstacles":21,"nps":3.981,"length":429.0,"characteristic":"Standard","difficulty":"Expert","events":16009,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":209.268,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":20.0,"offset":0.5,"notes":1000,"bombs":0,"obstacles":21,"nps":4.779,"length":429.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":16009,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":209.268,"paritySummary":{"errors":12,"warns":9,"resets":0}},{"njs":10.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"Lightshow","difficulty":"Easy","events":16009,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/bf43cba8026db57a2dda154ae4fa24621cc3a232.zip","coverURL":"https://cdn.beatsaver.com/bf43cba8026db57a2dda154ae4fa24621cc3a232.jpg","previewURL":"https://cdn.beatsaver.com/bf43cba8026db57a2dda154ae4fa24621cc3a232.mp3"}],"createdAt":"2020-02-22T21:17:09.228Z","updatedAt":"2020-02-22T21:17:09.228Z","lastPublishedAt":"2020-02-22T21:17:09.228Z"},{"id":"72de","name":"GRiZ - Can't Hold Me Down","description":"Easy, normal, hard, expert (maulable), expert+\r\n\r\nThis is a remap, first had major issues. Maul players seem to like the original, so a modified version is included in the expert slot. Also now has a full spread and hand lights are replacing the trash from light map.\r\n\r\nSpecial thanks to Adeza for the original suggestion. \r\n\r\nVideo: https://www.youtube.com/watch?v=c1_ziuz5hrA","uploader":{"id":4235138,"name":"CyanSnow","uniqueSet":true,"hash":"5cff0b7698cc5a672c8543ac","avatar":"https://cdn.beatsaver.com/avatar/154341137694326784.png","type":"DISCORD"},"metadata":{"bpm":180.0,"duration":208,"songName":"Can't Hold Me Down","songSubName":"","songAuthorName":"GRiZ","levelAuthorName":"CyanSnow"},"stats":{"plays":0,"downloads":4104,"upvotes":1886,"downvotes":44,"score":0.9283},"uploaded":"2019-11-30T21:07:56.418Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"a0ebf4980fcb1f29871582dbeca8e3a8d5511f1c","key":"72de","state":"Published","createdAt":"2019-11-30T21:07:56.418Z","sageScore":7,"diffs":[{"njs":12.0,"offset":0.25,"notes":303,"bombs":0,"obstacles":0,"nps":1.524,"length":596.5,"characteristic":"Standard","difficulty":"Easy","events":11378,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":198.833,"paritySummary":{"errors":94,"warns":26,"resets":0}},{"njs":12.0,"offset":0.25,"notes":380,"bombs":0,"obstacles":0,"nps":1.911,"length":596.5,"characteristic":"Standard","difficulty":"Normal","events":11378,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":198.833,"paritySummary":{"errors":49,"warns":17,"resets":0}},{"njs":14.0,"offset":1.0,"notes":420,"bombs":0,"obstacles":20,"nps":2.112,"length":596.5,"characteristic":"Standard","difficulty":"Hard","events":11378,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":198.833,"paritySummary":{"errors":12,"warns":7,"resets":0}},{"njs":16.0,"offset":0.5,"notes":749,"bombs":0,"obstacles":190,"nps":3.767,"length":596.5,"characteristic":"Standard","difficulty":"Expert","events":11378,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":198.833,"paritySummary":{"errors":7,"warns":2,"resets":0}},{"njs":18.0,"offset":0.25,"notes":1029,"bombs":139,"obstacles":18,"nps":5.175,"length":596.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":11378,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":198.833,"paritySummary":{"errors":6,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/a0ebf4980fcb1f29871582dbeca8e3a8d5511f1c.zip","coverURL":"https://cdn.beatsaver.com/a0ebf4980fcb1f29871582dbeca8e3a8d5511f1c.jpg","previewURL":"https://cdn.beatsaver.com/a0ebf4980fcb1f29871582dbeca8e3a8d5511f1c.mp3"}],"createdAt":"2019-11-30T21:07:56.418Z","updatedAt":"2019-11-30T21:07:56.418Z","lastPublishedAt":"2019-11-30T21:07:56.418Z"},{"id":"11de5","name":"Kaibutsu (TV Size) [Beastars Season 2 Opening] - YOASOBI","description":"Kaibutsu / 怪物 is the seventh single by Yoasobi. It is used as the opening theme song to the second season of Beastars.\n\nThis map was a special request by ScrewBedtime#5490\n\nKeep up to date on my maps: https://twitter.com/Joetastic_\nMy mapper's profile: https://bsaber.com/members/joetastic/\nContact me on discord: @Joetastic#2501","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":170.0,"duration":88,"songName":"Kaibutsu (TV Size)","songSubName":"","songAuthorName":"YOASOBI","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":16414,"upvotes":1604,"downvotes":33,"score":0.9281},"uploaded":"2020-12-21T17:50:41.969Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"08d9a92c273f6d06baa30c5b70f182c902349578","key":"11de5","state":"Published","createdAt":"2020-12-21T17:50:41.969Z","sageScore":3,"diffs":[{"njs":15.0,"offset":0.5,"notes":327,"bombs":6,"obstacles":28,"nps":3.829,"length":242.0,"characteristic":"Standard","difficulty":"Hard","events":2248,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":85.412,"paritySummary":{"errors":7,"warns":0,"resets":0}},{"njs":17.0,"offset":0.2,"notes":426,"bombs":6,"obstacles":44,"nps":4.988,"length":242.0,"characteristic":"Standard","difficulty":"Expert","events":2248,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":85.412,"paritySummary":{"errors":1,"warns":0,"resets":0}},{"njs":19.0,"offset":0.0,"notes":475,"bombs":6,"obstacles":43,"nps":5.561,"length":242.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":2248,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":85.412,"paritySummary":{"errors":1,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/08d9a92c273f6d06baa30c5b70f182c902349578.zip","coverURL":"https://cdn.beatsaver.com/08d9a92c273f6d06baa30c5b70f182c902349578.jpg","previewURL":"https://cdn.beatsaver.com/08d9a92c273f6d06baa30c5b70f182c902349578.mp3"}],"createdAt":"2020-12-21T17:50:41.969Z","updatedAt":"2020-12-21T17:50:41.969Z","lastPublishedAt":"2020-12-21T17:50:41.969Z"},{"id":"ae3c","name":"Fox Stevenson - Bruises","description":"I GOT.\r\nBRUISES.\r\n\r\nMade for my fiancee, and cause this song rocks enough to deserve a 360 and 90 degree map.\r\n\r\n2nd Reupload to fix a big oops in the 360 and 90 degree map ;_;","uploader":{"id":4284569,"name":"checkthepan","uniqueSet":true,"hash":"5cff0b7398cc5a672c84f3d5","avatar":"https://cdn.beatsaver.com/avatar/184355369189900290.png","type":"DISCORD"},"metadata":{"bpm":174.0,"duration":224,"songName":"Bruises","songSubName":"","songAuthorName":"Fox Stevenson","levelAuthorName":"Checkthepan"},"stats":{"plays":0,"downloads":3027,"upvotes":1258,"downvotes":20,"score":0.9281},"uploaded":"2020-06-04T12:46:11.099Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"71eff19ed6d32fd0a446e1a32303c77aa7f646f2","key":"ae3c","state":"Published","createdAt":"2020-06-04T12:46:11.099Z","sageScore":7,"diffs":[{"njs":10.0,"offset":0.0,"notes":335,"bombs":0,"obstacles":65,"nps":1.52,"length":639.0,"characteristic":"Standard","difficulty":"Easy","events":13393,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":220.345,"paritySummary":{"errors":86,"warns":21,"resets":0}},{"njs":10.0,"offset":0.0,"notes":446,"bombs":12,"obstacles":64,"nps":2.024,"length":639.0,"characteristic":"Standard","difficulty":"Normal","events":13393,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":220.345,"paritySummary":{"errors":87,"warns":1,"resets":1}},{"njs":12.0,"offset":0.0,"notes":692,"bombs":12,"obstacles":66,"nps":3.141,"length":639.0,"characteristic":"Standard","difficulty":"Hard","events":13393,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":220.345,"paritySummary":{"errors":8,"warns":4,"resets":3}},{"njs":15.0,"offset":0.5,"notes":1023,"bombs":18,"obstacles":52,"nps":4.643,"length":639.0,"characteristic":"Standard","difficulty":"Expert","events":13393,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":220.345,"paritySummary":{"errors":4,"warns":2,"resets":1}},{"njs":19.0,"offset":0.0,"notes":1476,"bombs":76,"obstacles":0,"nps":6.693,"length":639.562,"characteristic":"Standard","difficulty":"ExpertPlus","events":13394,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":220.539,"paritySummary":{"errors":6,"warns":0,"resets":15}},{"njs":19.0,"offset":0.25,"notes":1462,"bombs":130,"obstacles":70,"nps":6.627,"length":639.75,"characteristic":"90Degree","difficulty":"ExpertPlus","events":13958,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":220.603,"paritySummary":{"errors":4,"warns":1,"resets":15}},{"njs":19.0,"offset":0.25,"notes":1462,"bombs":130,"obstacles":74,"nps":6.627,"length":639.75,"characteristic":"360Degree","difficulty":"ExpertPlus","events":13974,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":220.603,"paritySummary":{"errors":4,"warns":1,"resets":15}}],"downloadURL":"https://cdn.beatsaver.com/71eff19ed6d32fd0a446e1a32303c77aa7f646f2.zip","coverURL":"https://cdn.beatsaver.com/71eff19ed6d32fd0a446e1a32303c77aa7f646f2.jpg","previewURL":"https://cdn.beatsaver.com/71eff19ed6d32fd0a446e1a32303c77aa7f646f2.mp3"}],"createdAt":"2020-06-04T12:46:11.099Z","updatedAt":"2020-06-04T12:46:11.099Z","lastPublishedAt":"2020-06-04T12:46:11.099Z"},{"id":"6909","name":"Feuer Frei! - Rammstein","description":"Had fun making his one, and also made some One Saber difficulties for it since it fit pretty well. Enjoy!\n\nIncludes Standard (2 saber) Expert through Easy and One Saber Expert through Normal, and is a bit harder than normal since it's a faster song.\n\nNo preview (yet).\n\nBPM: 180.18\nDuration: 3:08\n\nStandard (2 Sabers):\nEasy, Normal, Hard and Expert difficulties:\n\nEasy:\n280 notes, 16 obstacles, 4 mines\n\nNormal:\n337 notes, 16 obstacles, 4 mines\n\nHard:\n459 notes, 15 obstacles, 4 mines\n\nExpert:\n773 notes, 16 obstacles, 2 mines\n\n\nOne Saber:\nNormal, Hard and Expert difficulties:\n\nNormal:\n216 notes, 17 obstacles, 0 mines\n\nHard:\n315 notes, 16 obstacles, 0 mines\n\nExpert:\n472 notes, 16 obstacles, 2 mines","uploader":{"id":4285318,"name":"kolezan","uniqueSet":true,"hash":"5cff0b7398cc5a672c84fcbb","avatar":"https://cdn.beatsaver.com/avatar/220513618763055106.png","type":"DISCORD"},"metadata":{"bpm":190.18,"duration":188,"songName":"Feuer Frei!","songSubName":"","songAuthorName":"Rammstein","levelAuthorName":"Kolezan"},"stats":{"plays":0,"downloads":6179,"upvotes":2018,"downvotes":50,"score":0.928},"uploaded":"2019-10-11T06:11:24.477Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"a14d4f258c4a8012e110b599d725be7b20a5470a","key":"6909","state":"Published","createdAt":"2019-10-11T06:11:24.477Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":280,"bombs":4,"obstacles":16,"nps":1.592,"length":557.313,"characteristic":"Standard","difficulty":"Easy","events":2306,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":175.827,"paritySummary":{"errors":60,"warns":13,"resets":0}},{"njs":12.0,"offset":0.5,"notes":337,"bombs":4,"obstacles":16,"nps":1.917,"length":557.313,"characteristic":"Standard","difficulty":"Normal","events":2306,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":175.827,"paritySummary":{"errors":23,"warns":19,"resets":0}},{"njs":16.0,"offset":1.0,"notes":459,"bombs":4,"obstacles":15,"nps":2.611,"length":557.313,"characteristic":"Standard","difficulty":"Hard","events":2306,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":175.827,"paritySummary":{"errors":29,"warns":24,"resets":0}},{"njs":19.0,"offset":1.0,"notes":773,"bombs":2,"obstacles":16,"nps":4.396,"length":557.313,"characteristic":"Standard","difficulty":"Expert","events":2306,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":175.827,"paritySummary":{"errors":31,"warns":48,"resets":0}},{"njs":12.0,"offset":0.5,"notes":216,"bombs":0,"obstacles":17,"nps":1.228,"length":557.313,"characteristic":"OneSaber","difficulty":"Normal","events":2306,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":175.827,"paritySummary":{"errors":15,"warns":34,"resets":0}},{"njs":16.0,"offset":1.0,"notes":315,"bombs":0,"obstacles":16,"nps":1.792,"length":557.313,"characteristic":"OneSaber","difficulty":"Hard","events":2306,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":175.827,"paritySummary":{"errors":12,"warns":14,"resets":0}},{"njs":19.0,"offset":1.0,"notes":472,"bombs":2,"obstacles":16,"nps":2.684,"length":557.313,"characteristic":"OneSaber","difficulty":"Expert","events":2306,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":175.827,"paritySummary":{"errors":18,"warns":14,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/a14d4f258c4a8012e110b599d725be7b20a5470a.zip","coverURL":"https://cdn.beatsaver.com/a14d4f258c4a8012e110b599d725be7b20a5470a.jpg","previewURL":"https://cdn.beatsaver.com/a14d4f258c4a8012e110b599d725be7b20a5470a.mp3"}],"createdAt":"2019-10-11T06:11:24.477Z","updatedAt":"2019-10-11T06:11:24.477Z","lastPublishedAt":"2019-10-11T06:11:24.477Z"},{"id":"42ea","name":"DEUTSCHLAND - Rammstein","description":"Expert+ and expert are fairly similar where expert has some nerfed versions of expert+ some places. NJS18 on E+ and 15 on Expert","uploader":{"id":27983,"name":"heisenbergirl","uniqueSet":true,"hash":"5cff0b7298cc5a672c84ec30","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ec30?d=retro","type":"SIMPLE"},"metadata":{"bpm":120.0,"duration":323,"songName":"DEUTSCHLAND","songSubName":"Rammstein","songAuthorName":"Heisenberg","levelAuthorName":"heisenbergirl"},"stats":{"plays":0,"downloads":3694,"upvotes":2773,"downvotes":83,"score":0.928},"uploaded":"2019-04-02T03:59:23Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"414169f2f791443d9f6278009dd91ebe369bc9b6","key":"42ea","state":"Published","createdAt":"2019-04-02T03:59:23Z","sageScore":4,"diffs":[{"njs":15.0,"offset":0.0,"notes":915,"bombs":0,"obstacles":6,"nps":3.091,"length":592.0,"characteristic":"Standard","difficulty":"Expert","events":2754,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":296.0,"paritySummary":{"errors":39,"warns":52,"resets":0}},{"njs":18.0,"offset":0.0,"notes":1063,"bombs":0,"obstacles":6,"nps":3.591,"length":592.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":2756,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":296.0,"paritySummary":{"errors":42,"warns":53,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/414169f2f791443d9f6278009dd91ebe369bc9b6.zip","coverURL":"https://cdn.beatsaver.com/414169f2f791443d9f6278009dd91ebe369bc9b6.jpg","previewURL":"https://cdn.beatsaver.com/414169f2f791443d9f6278009dd91ebe369bc9b6.mp3"}],"createdAt":"2019-04-02T03:59:23Z","updatedAt":"2019-04-02T03:59:23Z","lastPublishedAt":"2019-04-02T03:59:23Z"},{"id":"1ffd","name":"Senbonzakura (Short Ver.) by Kradness + Giga-P","description":"You like it fast? You like Senbonzakura? You want both? Then you've come to the right map! I knew I wanted to map Senbonzakura but I didn't quite like the original version, but as soon as I heard Kradness and Giga-P's version I knew I had found my own Senbonzakura.\r\n\r\nThis is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes by just playing Beat Saber! Go to https://bsaber.com/100k-contest/ for more info.\r\n\r\nSong has been edited; custom intro and shortened from full length.\r\n\r\nPreview:\r\nhttps://youtu.be/BLTaG3z9jOY\r\n\r\nBPM: 175\r\nDuration: 2:35\r\nEasy, Normal, Hard, Expert and Expert+ difficulties.\r\n\r\nEasy: 273, 8 obstacles, 0 mines\r\nNormal: 349 notes, 33 obstacles, 0 mines\r\nHard: 524 notes, 33 obstacles, 0 mines\r\nExpert: 755 notes, 33 obstacles, 0 mines\r\nExpert+: 880 notes, 33 obstacles, 0 mines\r\n\r\nThanks to Edzo, Redmagi, AaltoPaWi and Saut for playtesting! Special thanks to Redmagi for the stream ideas!\r\n\r\nEnjoy!","uploader":{"id":4285318,"name":"kolezan","uniqueSet":true,"hash":"5cff0b7398cc5a672c84fcbb","avatar":"https://cdn.beatsaver.com/avatar/220513618763055106.png","type":"DISCORD"},"metadata":{"bpm":175.0,"duration":156,"songName":"Senbonzakura (Short Ver.)","songSubName":"Kradness + Giga-P","songAuthorName":"Kolezan","levelAuthorName":"Kolezan"},"stats":{"plays":0,"downloads":9333,"upvotes":5842,"downvotes":234,"score":0.928},"uploaded":"2018-11-12T22:10:22Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"eb28a79e2dbc80948d0ea09631e83557ea6b6735","key":"1ffd","state":"Published","createdAt":"2018-11-12T22:10:22Z","sageScore":7,"diffs":[{"njs":12.0,"offset":0.0,"notes":273,"bombs":0,"obstacles":33,"nps":1.818,"length":438.0,"characteristic":"Standard","difficulty":"Easy","events":1285,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":150.171,"paritySummary":{"errors":57,"warns":23,"resets":0},"stars":1.24},{"njs":13.0,"offset":0.0,"notes":349,"bombs":0,"obstacles":33,"nps":2.319,"length":439.0,"characteristic":"Standard","difficulty":"Normal","events":1285,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":150.514,"paritySummary":{"errors":61,"warns":53,"resets":0},"stars":1.59},{"njs":14.0,"offset":0.0,"notes":524,"bombs":0,"obstacles":33,"nps":3.481,"length":439.0,"characteristic":"Standard","difficulty":"Hard","events":1285,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":150.514,"paritySummary":{"errors":70,"warns":55,"resets":0},"stars":2.42},{"njs":15.0,"offset":0.0,"notes":755,"bombs":0,"obstacles":33,"nps":5.016,"length":439.0,"characteristic":"Standard","difficulty":"Expert","events":1285,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":150.514,"paritySummary":{"errors":121,"warns":136,"resets":0},"stars":3.52},{"njs":15.0,"offset":0.0,"notes":880,"bombs":0,"obstacles":33,"nps":5.847,"length":439.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":1285,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":150.514,"paritySummary":{"errors":108,"warns":161,"resets":0},"stars":4.33}],"downloadURL":"https://cdn.beatsaver.com/eb28a79e2dbc80948d0ea09631e83557ea6b6735.zip","coverURL":"https://cdn.beatsaver.com/eb28a79e2dbc80948d0ea09631e83557ea6b6735.jpg","previewURL":"https://cdn.beatsaver.com/eb28a79e2dbc80948d0ea09631e83557ea6b6735.mp3"}],"createdAt":"2018-11-12T22:10:22Z","updatedAt":"2018-11-12T22:10:22Z","lastPublishedAt":"2018-11-12T22:10:22Z"},{"id":"aa73","name":"twenty one pilots - Level of Concern","description":"'Level of Concern' is a new single released by twenty one pilots during the COVID-19 pandemic. \n\nI meant to get this finished a couple of weeks ago, but hey, better late than never! I hope you enjoy. \n\nMapped by: Pyrowarfare#1032","uploader":{"id":1096,"name":"pyrowarfare","uniqueSet":true,"hash":"5e99c7df3f476a0006596cdf","avatar":"https://www.gravatar.com/avatar/5e99c7df3f476a0006596cdf?d=retro","type":"SIMPLE"},"metadata":{"bpm":122.0,"duration":222,"songName":"Level of Concern","songSubName":"","songAuthorName":"twenty one pilots","levelAuthorName":"Pyrowarfare"},"stats":{"plays":0,"downloads":4749,"upvotes":1220,"downvotes":19,"score":0.9279},"uploaded":"2020-05-26T00:39:21.533Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"1b9278797fa6d85d0201d1a261101f8cb9ac7dde","key":"aa73","state":"Published","createdAt":"2020-05-26T00:39:21.533Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":233,"bombs":0,"obstacles":14,"nps":1.062,"length":446.0,"characteristic":"Standard","difficulty":"Easy","events":2220,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":219.344,"paritySummary":{"errors":89,"warns":9,"resets":0}},{"njs":10.0,"offset":0.0,"notes":461,"bombs":0,"obstacles":14,"nps":2.102,"length":446.0,"characteristic":"Standard","difficulty":"Normal","events":2220,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":219.344,"paritySummary":{"errors":18,"warns":19,"resets":0}},{"njs":12.0,"offset":0.0,"notes":663,"bombs":4,"obstacles":32,"nps":3.023,"length":446.0,"characteristic":"Standard","difficulty":"Hard","events":2220,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":219.344,"paritySummary":{"errors":2,"warns":0,"resets":1}},{"njs":14.0,"offset":0.0,"notes":692,"bombs":4,"obstacles":44,"nps":3.155,"length":446.0,"characteristic":"Standard","difficulty":"Expert","events":2220,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":219.344,"paritySummary":{"errors":2,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/1b9278797fa6d85d0201d1a261101f8cb9ac7dde.zip","coverURL":"https://cdn.beatsaver.com/1b9278797fa6d85d0201d1a261101f8cb9ac7dde.jpg","previewURL":"https://cdn.beatsaver.com/1b9278797fa6d85d0201d1a261101f8cb9ac7dde.mp3"}],"createdAt":"2020-05-26T00:39:21.533Z","updatedAt":"2020-05-26T00:39:21.533Z","lastPublishedAt":"2020-05-26T00:39:21.533Z"},{"id":"96fc","name":"JINGO JUNGLE [Youjo Senki Opening] - MYTH & ROID","description":"JINGO JUNGLE is the fifth single release of MYTH & ROID for their 1st Album『eYe's』and the opening song for the Youjo Senki anime. It is performed by the Japanese singer Mayu and was released on February 8th, 2017.\n\nMap was converted from my original AmaLee version as requested.\n\nEDIT: Expert Difficulty Fixed and added preview start time","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":130.0,"duration":226,"songName":"JINGO JUNGLE","songSubName":"","songAuthorName":"MYTH & ROID","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":9872,"upvotes":1077,"downvotes":14,"score":0.9279},"uploaded":"2020-04-03T15:39:48.414Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"f4555835fccad370eda615cbeff120afe9c4ab13","key":"96fc","state":"Published","createdAt":"2020-04-03T15:39:48.414Z","sageScore":4,"diffs":[{"njs":13.0,"offset":0.0,"notes":581,"bombs":104,"obstacles":28,"nps":2.647,"length":475.5,"characteristic":"Standard","difficulty":"Hard","events":5921,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":219.462,"paritySummary":{"errors":35,"warns":15,"resets":10}},{"njs":15.0,"offset":0.0,"notes":950,"bombs":78,"obstacles":14,"nps":4.329,"length":475.5,"characteristic":"Standard","difficulty":"Expert","events":5921,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":219.462,"paritySummary":{"errors":42,"warns":48,"resets":8}},{"njs":17.0,"offset":0.0,"notes":1184,"bombs":105,"obstacles":17,"nps":5.395,"length":475.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":5921,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":219.462,"paritySummary":{"errors":32,"warns":43,"resets":16}}],"downloadURL":"https://cdn.beatsaver.com/f4555835fccad370eda615cbeff120afe9c4ab13.zip","coverURL":"https://cdn.beatsaver.com/f4555835fccad370eda615cbeff120afe9c4ab13.jpg","previewURL":"https://cdn.beatsaver.com/f4555835fccad370eda615cbeff120afe9c4ab13.mp3"}],"createdAt":"2020-04-03T15:39:48.414Z","updatedAt":"2020-04-03T15:39:48.414Z","lastPublishedAt":"2020-04-03T15:39:48.414Z"},{"id":"4611","name":"BTS (feat. Halsey) - Boy With Luv","description":"I wouldn't say this was rushed but that I spent a lot of time on it in a couple of days, either way I really like the song and I think the map is pretty fun too.\r\nFeel free to join our K-Pop Beat Saber Discord https://discord.gg/c9uHGYP @SimplyMarvellous#0290 if you'd like to contact me at all\r\nhttps://youtu.be/Wfhj4fjugcg\r\n\r\n\r\n\r\nDownvote if the map is bad, not because you couldn't pass it :)","uploader":{"id":4285134,"name":"simplymarvellous","uniqueSet":true,"hash":"5cff0b7398cc5a672c84f7a8","avatar":"https://cdn.beatsaver.com/avatar/189618441429319680.png","type":"DISCORD"},"metadata":{"bpm":120.0,"duration":232,"songName":"Boy With Luv","songSubName":"BTS (ft. Halsey)","songAuthorName":"SimplyMarvellous","levelAuthorName":"simplymarvellous"},"stats":{"plays":0,"downloads":5564,"upvotes":2055,"downvotes":52,"score":0.9279},"uploaded":"2019-04-15T06:34:34Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"c0e3706463c5c9b993ba5d05c2166fb0b512e695","key":"4611","state":"Published","createdAt":"2019-04-15T06:34:34Z","sageScore":5,"diffs":[{"njs":12.0,"offset":0.0,"notes":792,"bombs":0,"obstacles":21,"nps":3.03,"length":522.833,"characteristic":"Standard","difficulty":"Hard","events":1832,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":261.417,"paritySummary":{"errors":81,"warns":38,"resets":0}},{"njs":15.0,"offset":0.0,"notes":976,"bombs":0,"obstacles":21,"nps":3.734,"length":522.833,"characteristic":"Standard","difficulty":"ExpertPlus","events":1832,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":261.417,"paritySummary":{"errors":64,"warns":42,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/c0e3706463c5c9b993ba5d05c2166fb0b512e695.zip","coverURL":"https://cdn.beatsaver.com/c0e3706463c5c9b993ba5d05c2166fb0b512e695.jpg","previewURL":"https://cdn.beatsaver.com/c0e3706463c5c9b993ba5d05c2166fb0b512e695.mp3"}],"createdAt":"2019-04-15T06:34:34Z","updatedAt":"2019-04-15T06:34:34Z","lastPublishedAt":"2019-04-15T06:34:34Z"},{"id":"1fff","name":"Chiru Chiru by REOL","description":"The 4th most played song during the 100k Contest, I present to you a dance-able map of Chiru Chiru by REOL!\r\n\r\nThis is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes by just playing Beat Saber! Go to https://bsaber.com/100k-contest/ for more info.\r\n\r\nFull length song. I've added/edited a custom countdown to the intro.\r\n\r\nPreview:\r\nhttps://youtu.be/jcx6g6NS8_4\r\n\r\nBPM: 128\r\nDuration: 3:18\r\nEasy, Normal, Hard and Expert difficulties.\r\n\r\nEasy: 253, 31 obstacles, 6 mines\r\nNormal: 356 notes, 31 obstacles, 6 mines\r\nHard: 478 notes, 31 obstacles, 18 mines\r\nExpert: 675 notes, 31 obstacles, 18 mines\r\n\r\nThanks to Kizuflux, VenclaireVR, squeaksies, Crankor, NekiCoule, Redmagi, aggrogahu and Saut for playtesting!\r\n\r\nEnjoy!","uploader":{"id":4285318,"name":"kolezan","uniqueSet":true,"hash":"5cff0b7398cc5a672c84fcbb","avatar":"https://cdn.beatsaver.com/avatar/220513618763055106.png","type":"DISCORD"},"metadata":{"bpm":128.0,"duration":199,"songName":"Chiru Chiru","songSubName":"REOL","songAuthorName":"Kolezan","levelAuthorName":"Kolezan"},"stats":{"plays":0,"downloads":6874,"upvotes":4133,"downvotes":148,"score":0.9279},"uploaded":"2018-11-12T22:29:15Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"9993d9f5b03472efa5b8b31d3dc4156301145d97","key":"1fff","state":"Published","createdAt":"2018-11-12T22:29:15Z","sageScore":4,"diffs":[{"njs":10.0,"offset":0.0,"notes":258,"bombs":6,"obstacles":31,"nps":1.339,"length":411.0,"characteristic":"Standard","difficulty":"Easy","events":955,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":192.656,"paritySummary":{"errors":62,"warns":27,"resets":3},"stars":1.1},{"njs":10.0,"offset":0.0,"notes":356,"bombs":6,"obstacles":31,"nps":1.846,"length":411.5,"characteristic":"Standard","difficulty":"Normal","events":955,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":192.891,"paritySummary":{"errors":64,"warns":44,"resets":3},"stars":1.37},{"njs":11.0,"offset":0.0,"notes":478,"bombs":18,"obstacles":31,"nps":2.472,"length":412.5,"characteristic":"Standard","difficulty":"Hard","events":955,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":193.359,"paritySummary":{"errors":70,"warns":85,"resets":4},"stars":1.82},{"njs":11.0,"offset":0.0,"notes":669,"bombs":18,"obstacles":31,"nps":3.46,"length":412.5,"characteristic":"Standard","difficulty":"Expert","events":956,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":193.359,"paritySummary":{"errors":96,"warns":89,"resets":5},"stars":2.28}],"downloadURL":"https://cdn.beatsaver.com/9993d9f5b03472efa5b8b31d3dc4156301145d97.zip","coverURL":"https://cdn.beatsaver.com/9993d9f5b03472efa5b8b31d3dc4156301145d97.jpg","previewURL":"https://cdn.beatsaver.com/9993d9f5b03472efa5b8b31d3dc4156301145d97.mp3"}],"createdAt":"2018-11-12T22:29:15Z","updatedAt":"2018-11-12T22:29:15Z","lastPublishedAt":"2018-11-12T22:29:15Z"},{"id":"6ac","name":"Pompeii - Bastille","description":"Hard only - Manageable but active. Events included.","uploader":{"id":51831,"name":"dietmoxie","uniqueSet":true,"hash":"5cff0b7298cc5a672c84ec3a","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ec3a?d=retro","type":"SIMPLE"},"metadata":{"bpm":127.0,"duration":214,"songName":"Pompeii","songSubName":"","songAuthorName":"Bastille","levelAuthorName":"dietmoxie"},"stats":{"plays":0,"downloads":10306,"upvotes":5098,"downvotes":196,"score":0.9279},"uploaded":"2018-06-26T00:59:17Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"9753e45020fe1c5681fcd74f5a41efcf3c143282","key":"6ac","state":"Published","createdAt":"2018-06-26T00:59:17Z","sageScore":4,"diffs":[{"njs":10.0,"offset":0.0,"notes":698,"bombs":0,"obstacles":31,"nps":3.348,"length":443.0,"characteristic":"Standard","difficulty":"Hard","events":665,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":209.291,"paritySummary":{"errors":134,"warns":133,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/9753e45020fe1c5681fcd74f5a41efcf3c143282.zip","coverURL":"https://cdn.beatsaver.com/9753e45020fe1c5681fcd74f5a41efcf3c143282.jpg","previewURL":"https://cdn.beatsaver.com/9753e45020fe1c5681fcd74f5a41efcf3c143282.mp3"}],"createdAt":"2018-06-26T00:59:17Z","updatedAt":"2018-06-26T00:59:17Z","lastPublishedAt":"2018-06-26T00:59:17Z"},{"id":"54bb","name":"Bodies - Drowning Pool","description":"Fun fact: My first time hearing this song was on some random YouTube video in the 2000s, almost all YouTube videos back then used this song for some reason.\n\nWhen I reheard the song I immediately knew I have to put duck walls every time the lyrics went \"HIT THE FLOOR\". Also I wanted to use 1, 2, 3, 4 notes on a section of lyrics that said ONE TWO THREE FOUR.\n\nWarning: Please don't actually let your body hit the floor while playing this map. Smashing head first into the floor with a VR headset can be an expensive mistake.\n\n\"Bodies\" (often incorrectly called \"Let the Bodies Hit the Floor\") is a song by the American rock band Drowning Pool and also is the lead single from their debut album Sinner. It was also the theme song for the 2001 WWF SummerSlam pay-per-view event, as well as that of the ECW brand in 2006 to early 2008","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":130.0,"duration":202,"songName":"Bodies","songSubName":"","songAuthorName":"Drowning Pool","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":4168,"upvotes":1980,"downvotes":49,"score":0.9278},"uploaded":"2019-06-27T18:32:03.310Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"8818e19d544a6ca8b1a05e7324731fee2f38b58f","key":"54bb","state":"Published","createdAt":"2019-06-27T18:32:03.310Z","sageScore":2,"diffs":[{"njs":14.0,"offset":0.0,"notes":805,"bombs":0,"obstacles":19,"nps":4.211,"length":414.144,"characteristic":"Standard","difficulty":"Expert","events":5298,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":191.144,"paritySummary":{"errors":29,"warns":33,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/8818e19d544a6ca8b1a05e7324731fee2f38b58f.zip","coverURL":"https://cdn.beatsaver.com/8818e19d544a6ca8b1a05e7324731fee2f38b58f.jpg","previewURL":"https://cdn.beatsaver.com/8818e19d544a6ca8b1a05e7324731fee2f38b58f.mp3"}],"createdAt":"2019-06-27T18:32:03.310Z","updatedAt":"2019-06-27T18:32:03.310Z","lastPublishedAt":"2019-06-27T18:32:03.310Z"},{"id":"5352","name":"1999 - Charli XCX & Troye Sivan","description":"It started as a meme in #mapping-discussion and expanded to a full blown project. I really like how it turned out. Hope you enjoy it :)\n\nLength: 3:11\nBPM: 124\nNJS: 17 (Expert+), 15 (Expert), 13 (Hard)\n\nEasy slot is the lightshow as always.\n\nThanks to my playtesters CyanSnow (2x) and Redmagi, show them some love! :)\n\nDM me your feedback on discord: Teuflum#5982","uploader":{"id":68740,"name":"Teuflum","uniqueSet":true,"hash":"5cff0b7498cc5a672c851a6b","avatar":"https://cdn.beatsaver.com/avatar/114706869460664326.png","type":"DISCORD"},"metadata":{"bpm":124.0,"duration":192,"songName":"1999","songSubName":"","songAuthorName":"Charli XCX & Troye Sivan","levelAuthorName":"Teuflum"},"stats":{"plays":0,"downloads":2205,"upvotes":1273,"downvotes":21,"score":0.9278},"uploaded":"2019-06-17T15:29:13.123Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"d68bd4d997726249406bce748b83bf5464da99e7","key":"5352","state":"Published","createdAt":"2019-06-17T15:29:13.123Z","sageScore":7,"diffs":[{"njs":13.0,"offset":0.0,"notes":555,"bombs":56,"obstacles":37,"nps":2.968,"length":386.5,"characteristic":"Standard","difficulty":"Hard","events":6185,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":187.016,"paritySummary":{"errors":23,"warns":8,"resets":4}},{"njs":15.0,"offset":0.0,"notes":668,"bombs":56,"obstacles":41,"nps":3.572,"length":386.5,"characteristic":"Standard","difficulty":"Expert","events":6185,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":187.016,"paritySummary":{"errors":20,"warns":16,"resets":4}},{"njs":17.0,"offset":0.0,"notes":812,"bombs":8,"obstacles":39,"nps":4.342,"length":386.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":6185,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":187.016,"paritySummary":{"errors":33,"warns":48,"resets":2}},{"njs":10.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"Lightshow","difficulty":"Easy","events":6185,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/d68bd4d997726249406bce748b83bf5464da99e7.zip","coverURL":"https://cdn.beatsaver.com/d68bd4d997726249406bce748b83bf5464da99e7.jpg","previewURL":"https://cdn.beatsaver.com/d68bd4d997726249406bce748b83bf5464da99e7.mp3"}],"createdAt":"2019-06-17T15:29:13.123Z","updatedAt":"2019-06-17T15:29:13.123Z","lastPublishedAt":"2019-06-17T15:29:13.123Z"},{"id":"a934","name":"Sabaton - Seven Pillars of Wisdom","description":"Sabaton is a Power-metal band that sings almost exclusively about historical events. This song is about Lawrence of Arabia, and is named after his autobiography.\r\n\r\nThe map is fully lit, and available in multiple difficulties. Thanks to the BSMG discord for helping test the map before release.\r\n\r\nNormal: 2.2 NPS - 10 NJS\r\nHard: 3.89 NPS - 13 NJS\r\nExpert: 5.24 NPS - 17 NJS","uploader":{"id":4285369,"name":"Cyrix","uniqueSet":true,"hash":"5eb6eb9a7abb000006c85add","avatar":"https://cdn.beatsaver.com/avatar/167730807929044992.png","type":"DISCORD"},"metadata":{"bpm":152.0,"duration":178,"songName":"Seven Pillars of Wisdom","songSubName":"","songAuthorName":"Sabaton","levelAuthorName":"Cyrix"},"stats":{"plays":0,"downloads":2699,"upvotes":824,"downvotes":6,"score":0.9276},"uploaded":"2020-05-22T21:19:05.343Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"16732f8edc59bd358278c14055cde1cd9ecb47aa","key":"a934","state":"Published","createdAt":"2020-05-22T21:19:05.343Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":393,"bombs":0,"obstacles":24,"nps":2.299,"length":433.0,"characteristic":"Standard","difficulty":"Normal","events":1826,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":170.921,"paritySummary":{"errors":18,"warns":4,"resets":0}},{"njs":13.0,"offset":0.25,"notes":696,"bombs":20,"obstacles":16,"nps":4.044,"length":436.0,"characteristic":"Standard","difficulty":"Hard","events":1826,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":172.105,"paritySummary":{"errors":0,"warns":2,"resets":3}},{"njs":17.0,"offset":0.3,"notes":937,"bombs":16,"obstacles":14,"nps":5.444,"length":436.0,"characteristic":"Standard","difficulty":"Expert","events":1826,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":172.105,"paritySummary":{"errors":0,"warns":5,"resets":5}}],"downloadURL":"https://cdn.beatsaver.com/16732f8edc59bd358278c14055cde1cd9ecb47aa.zip","coverURL":"https://cdn.beatsaver.com/16732f8edc59bd358278c14055cde1cd9ecb47aa.jpg","previewURL":"https://cdn.beatsaver.com/16732f8edc59bd358278c14055cde1cd9ecb47aa.mp3"}],"createdAt":"2020-05-22T21:19:05.343Z","updatedAt":"2020-05-22T21:19:05.343Z","lastPublishedAt":"2020-05-22T21:19:05.343Z"},{"id":"51be","name":"Prayer Of The Refugee - Rise Against","description":"\"Prayer of the Refugee\" is a song by American rock band Rise Against. The lyrics were written by lead vocalist Tim McIlrath, and deal with the themes of forced displacement and the societal issues surrounding refugees. Thanks to @Scrappy for helping me find the variable BPM in this song","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":150.0,"duration":200,"songName":"Prayer Of The Refugee","songSubName":"Rise Against","songAuthorName":"Joetastic","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":3598,"upvotes":1630,"downvotes":35,"score":0.9276},"uploaded":"2019-06-06T05:53:57Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"9c7e5ae537bb4871513330da180c6647cd8cffff","key":"51be","state":"Published","createdAt":"2019-06-06T05:53:57Z","sageScore":6,"diffs":[{"njs":13.5,"offset":0.0,"notes":860,"bombs":0,"obstacles":23,"nps":4.503,"length":479.103,"characteristic":"Standard","difficulty":"Expert","events":3414,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":191.641,"paritySummary":{"errors":37,"warns":24,"resets":0}},{"njs":15.0,"offset":0.0,"notes":936,"bombs":0,"obstacles":23,"nps":4.9,"length":479.103,"characteristic":"Standard","difficulty":"ExpertPlus","events":3414,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":191.641,"paritySummary":{"errors":33,"warns":20,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/9c7e5ae537bb4871513330da180c6647cd8cffff.zip","coverURL":"https://cdn.beatsaver.com/9c7e5ae537bb4871513330da180c6647cd8cffff.jpg","previewURL":"https://cdn.beatsaver.com/9c7e5ae537bb4871513330da180c6647cd8cffff.mp3"}],"createdAt":"2019-06-06T05:53:57Z","updatedAt":"2019-06-06T05:53:57Z","lastPublishedAt":"2019-06-06T05:53:57Z"},{"id":"226e","name":"Crawling - Linkin Park","description":"Another Linkin Park map! This time it is Crawling. \nPreview: https://www.youtube.com/watch?v=Pkr9Vm1dPv8\n\nhttps://twitter.com/TheDownyCat\nhttps://www.twitch.tv/downycat\nhttps://streamlabs.com/downycat/tip","uploader":{"id":4285982,"name":"downycat","uniqueSet":true,"hash":"5cff0b7398cc5a672c84ede5","avatar":"https://cdn.beatsaver.com/avatar/173538829888782336.png","type":"DISCORD"},"metadata":{"bpm":105.0,"duration":208,"songName":"Crawling","songSubName":"Linkin Park","songAuthorName":"DownyCat","levelAuthorName":"downycat"},"stats":{"plays":0,"downloads":5610,"upvotes":2388,"downvotes":67,"score":0.9276},"uploaded":"2018-11-26T14:10:51Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"691b382b6ca6e69b9b908e41d439f9b7b9403fb6","key":"226e","state":"Published","createdAt":"2018-11-26T14:10:51Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":455,"bombs":0,"obstacles":64,"nps":2.317,"length":344.0,"characteristic":"Standard","difficulty":"Normal","events":2399,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":196.571,"paritySummary":{"errors":29,"warns":28,"resets":0}},{"njs":12.0,"offset":0.0,"notes":666,"bombs":0,"obstacles":71,"nps":3.386,"length":344.5,"characteristic":"Standard","difficulty":"Hard","events":2399,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":196.857,"paritySummary":{"errors":24,"warns":19,"resets":0}},{"njs":14.0,"offset":0.0,"notes":862,"bombs":0,"obstacles":75,"nps":4.383,"length":344.5,"characteristic":"Standard","difficulty":"Expert","events":2399,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":196.857,"paritySummary":{"errors":18,"warns":39,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/691b382b6ca6e69b9b908e41d439f9b7b9403fb6.zip","coverURL":"https://cdn.beatsaver.com/691b382b6ca6e69b9b908e41d439f9b7b9403fb6.jpg","previewURL":"https://cdn.beatsaver.com/691b382b6ca6e69b9b908e41d439f9b7b9403fb6.mp3"}],"createdAt":"2018-11-26T14:10:51Z","updatedAt":"2018-11-26T14:10:51Z","lastPublishedAt":"2018-11-26T14:10:51Z"},{"id":"6cf7","name":"[Noodleween] AronChupa, Little Sis Nora - Rave in the Grave","description":"2nd Place winner in the BSMG Halloween map competition! :D\n\nThis map is part of the Noodleween song pack, brought to you by the Noodle mapper group. We hope you enjoy this as much as we enjoyed making it.\n\nThis song already had a map, but I thought it could use some love and revamping. Hope you guys enjoy the full difficulty spread!\n\nExpert+ Playthrough: https://www.youtube.com/watch?v=ufEQ4L2y694&feature=youtu.be\n\nHappy Halloween! :D 👻","uploader":{"id":17131,"name":"tranquillizeme","uniqueSet":true,"hash":"5cff0b7798cc5a672c85609e","avatar":"https://www.gravatar.com/avatar/5cff0b7798cc5a672c85609e?d=retro","type":"SIMPLE"},"metadata":{"bpm":132.0,"duration":154,"songName":"Rave In The Grave","songSubName":"","songAuthorName":"AronChupa, Little Sis Nora","levelAuthorName":"TranquillizeMe"},"stats":{"plays":0,"downloads":2987,"upvotes":1394,"downvotes":26,"score":0.9275},"uploaded":"2019-10-29T23:00:07.667Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"b288ce94ed8feff67af04fd75e23acafad66b9f8","key":"6cf7","state":"Published","createdAt":"2019-10-29T23:00:07.667Z","sageScore":6,"diffs":[{"njs":12.0,"offset":1.5,"notes":212,"bombs":0,"obstacles":36,"nps":1.418,"length":329.0,"characteristic":"Standard","difficulty":"Easy","events":7067,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":149.545,"paritySummary":{"errors":49,"warns":7,"resets":0}},{"njs":13.0,"offset":1.0,"notes":286,"bombs":12,"obstacles":43,"nps":1.912,"length":329.0,"characteristic":"Standard","difficulty":"Normal","events":7067,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":149.545,"paritySummary":{"errors":42,"warns":12,"resets":0}},{"njs":14.0,"offset":1.0,"notes":447,"bombs":12,"obstacles":37,"nps":2.989,"length":329.0,"characteristic":"Standard","difficulty":"Hard","events":7067,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":149.545,"paritySummary":{"errors":9,"warns":2,"resets":0}},{"njs":15.0,"offset":0.5,"notes":514,"bombs":8,"obstacles":47,"nps":3.437,"length":329.0,"characteristic":"Standard","difficulty":"Expert","events":7067,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":149.545,"paritySummary":{"errors":7,"warns":2,"resets":0}},{"njs":19.0,"offset":0.0,"notes":610,"bombs":24,"obstacles":44,"nps":4.079,"length":329.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":7067,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":149.545,"paritySummary":{"errors":8,"warns":3,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/b288ce94ed8feff67af04fd75e23acafad66b9f8.zip","coverURL":"https://cdn.beatsaver.com/b288ce94ed8feff67af04fd75e23acafad66b9f8.jpg","previewURL":"https://cdn.beatsaver.com/b288ce94ed8feff67af04fd75e23acafad66b9f8.mp3"}],"createdAt":"2019-10-29T23:00:07.667Z","updatedAt":"2019-10-29T23:00:07.667Z","lastPublishedAt":"2019-10-29T23:00:07.667Z"},{"id":"53fc","name":"Sabaton - Shiroyama","description":"Second map!!! I hope you all enjoy the new map with added difficulties!! Feel free to message me on discord if you liked the map, have feedback, or have any suggestions for some more maps!!!\nMax●The●Whale#8744","uploader":{"id":40212,"name":"maximusthewhale","uniqueSet":true,"hash":"5cff0b7898cc5a672c856ed4","avatar":"https://www.gravatar.com/avatar/5cff0b7898cc5a672c856ed4?d=retro","type":"SIMPLE"},"metadata":{"bpm":171.0,"duration":212,"songName":"Shiroyama","songSubName":"","songAuthorName":"Sabaton","levelAuthorName":"Maximus"},"stats":{"plays":0,"downloads":2704,"upvotes":1798,"downvotes":42,"score":0.9275},"uploaded":"2019-06-22T09:34:40.930Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"1340476c96b9052adfff5e63993b7ffa03229c39","key":"53fc","state":"Published","createdAt":"2019-06-22T09:34:40.930Z","sageScore":5,"diffs":[{"njs":13.0,"offset":0.0,"notes":736,"bombs":0,"obstacles":5,"nps":3.648,"length":575.0,"characteristic":"Standard","difficulty":"Hard","events":1038,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":201.754,"paritySummary":{"errors":12,"warns":0,"resets":0}},{"njs":15.0,"offset":0.0,"notes":889,"bombs":0,"obstacles":16,"nps":4.406,"length":575.0,"characteristic":"Standard","difficulty":"Expert","events":3144,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":201.754,"paritySummary":{"errors":22,"warns":22,"resets":0}},{"njs":18.0,"offset":0.0,"notes":1353,"bombs":0,"obstacles":16,"nps":6.706,"length":575.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":3216,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":201.754,"paritySummary":{"errors":29,"warns":27,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/1340476c96b9052adfff5e63993b7ffa03229c39.zip","coverURL":"https://cdn.beatsaver.com/1340476c96b9052adfff5e63993b7ffa03229c39.jpg","previewURL":"https://cdn.beatsaver.com/1340476c96b9052adfff5e63993b7ffa03229c39.mp3"}],"createdAt":"2019-06-22T09:34:40.930Z","updatedAt":"2019-06-22T09:34:40.930Z","lastPublishedAt":"2019-06-22T09:34:40.930Z"},{"id":"5389","name":"On Top of the World - Imagine Dragons","description":"Re-upload of an earlier Beatmap that was lost to the update.","uploader":{"id":30311,"name":"bennydabeast","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e98d","avatar":"https://cdn.beatsaver.com/avatar/30311.jpg","type":"SIMPLE"},"metadata":{"bpm":100.0,"duration":192,"songName":"On Top of the World","songSubName":"","songAuthorName":"Imagine Dragons","levelAuthorName":"BennyDaBeast"},"stats":{"plays":0,"downloads":12331,"upvotes":3114,"downvotes":101,"score":0.9274},"uploaded":"2019-06-19T17:02:53.084Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"88314981432a8002f62e464562c0c41f06393ab5","key":"5389","state":"Published","createdAt":"2019-06-19T17:02:53.084Z","sageScore":2,"diffs":[{"njs":10.0,"offset":0.0,"notes":269,"bombs":0,"obstacles":18,"nps":1.423,"length":315.0,"characteristic":"Standard","difficulty":"Normal","events":781,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":189.0,"paritySummary":{"errors":48,"warns":37,"resets":0}},{"njs":10.0,"offset":0.0,"notes":374,"bombs":0,"obstacles":18,"nps":1.976,"length":315.5,"characteristic":"Standard","difficulty":"Hard","events":781,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":189.3,"paritySummary":{"errors":54,"warns":52,"resets":0}},{"njs":10.0,"offset":0.0,"notes":551,"bombs":0,"obstacles":27,"nps":2.911,"length":315.5,"characteristic":"Standard","difficulty":"Expert","events":781,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":189.3,"paritySummary":{"errors":81,"warns":91,"resets":0}},{"njs":10.0,"offset":0.0,"notes":720,"bombs":4,"obstacles":27,"nps":3.803,"length":315.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":781,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":189.3,"paritySummary":{"errors":54,"warns":71,"resets":4}}],"downloadURL":"https://cdn.beatsaver.com/88314981432a8002f62e464562c0c41f06393ab5.zip","coverURL":"https://cdn.beatsaver.com/88314981432a8002f62e464562c0c41f06393ab5.jpg","previewURL":"https://cdn.beatsaver.com/88314981432a8002f62e464562c0c41f06393ab5.mp3"}],"createdAt":"2019-06-19T17:02:53.084Z","updatedAt":"2019-06-19T17:02:53.084Z","lastPublishedAt":"2019-06-19T17:02:53.084Z"},{"id":"4a3d","name":"[Anniversary] Fractures (ft. Nevve) - Illenium [BennyDaBeast]","description":"Part of the Anniversary Song Pack","uploader":{"id":37070,"name":"anniversaryteam","uniqueSet":true,"hash":"5cff0b7798cc5a672c8565a3","avatar":"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro","type":"SIMPLE"},"metadata":{"bpm":160.0,"duration":246,"songName":"Fractures (ft. Nevve)","songSubName":"Illenium","songAuthorName":"BennyDaBeast","levelAuthorName":"AnniversaryTeam"},"stats":{"plays":0,"downloads":3049,"upvotes":2328,"downvotes":65,"score":0.9274},"uploaded":"2019-05-03T14:09:37Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"440945a4fe86b5e3ee7f03b98c636c881930072f","key":"4a3d","state":"Published","createdAt":"2019-05-03T14:09:37Z","sageScore":5,"diffs":[{"njs":12.0,"offset":0.0,"notes":805,"bombs":0,"obstacles":41,"nps":3.363,"length":638.25,"characteristic":"Standard","difficulty":"Hard","events":2214,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":239.344,"paritySummary":{"errors":98,"warns":99,"resets":0}},{"njs":12.0,"offset":0.0,"notes":1048,"bombs":0,"obstacles":41,"nps":4.379,"length":638.25,"characteristic":"Standard","difficulty":"Expert","events":2214,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":239.344,"paritySummary":{"errors":145,"warns":163,"resets":0}},{"njs":15.0,"offset":0.0,"notes":1060,"bombs":0,"obstacles":41,"nps":4.429,"length":638.25,"characteristic":"Standard","difficulty":"ExpertPlus","events":2214,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":239.344,"paritySummary":{"errors":137,"warns":160,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/440945a4fe86b5e3ee7f03b98c636c881930072f.zip","coverURL":"https://cdn.beatsaver.com/440945a4fe86b5e3ee7f03b98c636c881930072f.jpg","previewURL":"https://cdn.beatsaver.com/440945a4fe86b5e3ee7f03b98c636c881930072f.mp3"}],"createdAt":"2019-05-03T14:09:37Z","updatedAt":"2019-05-03T14:09:37Z","lastPublishedAt":"2019-05-03T14:09:37Z"},{"id":"41a8","name":"fhana - Aozora no Rhapsody [Miss Kobayashi's Dragon Maid Opening]","description":"edited: Reworking E+, second guessing its patterns\r\nCGDCT is the best genre of anime. Dragon maid op is fire\r\nPlease check out fhána and their other music\r\n\r\nBPM 135 \r\nExpert\r\nHard\r\nNormal\r\nEasy\r\n\r\nhas fun\r\n\r\ncontact me on discord\r\nETAN#8341","uploader":{"id":4235140,"name":"etan","uniqueSet":true,"hash":"5cff0b7798cc5a672c855775","avatar":"https://cdn.beatsaver.com/avatar/136373107559497728.png","type":"DISCORD"},"metadata":{"bpm":135.0,"duration":96,"songName":"Aozora no Rhapsody","songSubName":"fhna","songAuthorName":"ETAN","levelAuthorName":"ETAN"},"stats":{"plays":0,"downloads":7116,"upvotes":2214,"downvotes":60,"score":0.9274},"uploaded":"2019-03-29T05:34:40Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"cdd469b733ade02a7996d1055082f3e1bc14ca8a","key":"41a8","state":"Published","createdAt":"2019-03-29T05:34:40Z","sageScore":4,"diffs":[{"njs":10.0,"offset":0.0,"notes":180,"bombs":0,"obstacles":7,"nps":2.045,"length":198.0,"characteristic":"Standard","difficulty":"Easy","events":704,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":88.0,"paritySummary":{"errors":11,"warns":1,"resets":0}},{"njs":12.0,"offset":0.0,"notes":274,"bombs":0,"obstacles":3,"nps":3.114,"length":198.0,"characteristic":"Standard","difficulty":"Normal","events":704,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":88.0,"paritySummary":{"errors":12,"warns":0,"resets":0}},{"njs":14.0,"offset":0.0,"notes":379,"bombs":0,"obstacles":3,"nps":4.307,"length":198.0,"characteristic":"Standard","difficulty":"Hard","events":704,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":88.0,"paritySummary":{"errors":16,"warns":4,"resets":0}},{"njs":15.0,"offset":0.0,"notes":461,"bombs":0,"obstacles":2,"nps":5.239,"length":198.0,"characteristic":"Standard","difficulty":"Expert","events":704,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":88.0,"paritySummary":{"errors":7,"warns":6,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/cdd469b733ade02a7996d1055082f3e1bc14ca8a.zip","coverURL":"https://cdn.beatsaver.com/cdd469b733ade02a7996d1055082f3e1bc14ca8a.jpg","previewURL":"https://cdn.beatsaver.com/cdd469b733ade02a7996d1055082f3e1bc14ca8a.mp3"}],"createdAt":"2019-03-29T05:34:40Z","updatedAt":"2019-03-29T05:34:40Z","lastPublishedAt":"2019-03-29T05:34:40Z"},{"id":"84b4","name":"Nightcore - Everytime We Touch | Cascada","description":"174th Map\n\nYoutube Preview : https://youtu.be/i6so3ZhTtGQ","uploader":{"id":4284588,"name":"rigid","uniqueSet":true,"hash":"5cff0b7598cc5a672c852224","avatar":"https://cdn.beatsaver.com/avatar/295613108947386368.png","type":"DISCORD"},"metadata":{"bpm":186.0,"duration":152,"songName":"Nightcore - Everytime We Touch","songSubName":"","songAuthorName":"Cascada","levelAuthorName":"Rigid"},"stats":{"plays":0,"downloads":4362,"upvotes":1614,"downvotes":35,"score":0.9273},"uploaded":"2020-02-06T17:16:32.579Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"31979b560a0ea958f9f0d92df8dcc12f6b8f567c","key":"84b4","state":"Published","createdAt":"2020-02-06T17:16:32.579Z","sageScore":4,"diffs":[{"njs":15.0,"offset":0.5,"notes":608,"bombs":2,"obstacles":77,"nps":4.158,"length":453.265,"characteristic":"Standard","difficulty":"Expert","events":730,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":146.214,"paritySummary":{"errors":9,"warns":8,"resets":1}}],"downloadURL":"https://cdn.beatsaver.com/31979b560a0ea958f9f0d92df8dcc12f6b8f567c.zip","coverURL":"https://cdn.beatsaver.com/31979b560a0ea958f9f0d92df8dcc12f6b8f567c.jpg","previewURL":"https://cdn.beatsaver.com/31979b560a0ea958f9f0d92df8dcc12f6b8f567c.mp3"}],"createdAt":"2020-02-06T17:16:32.579Z","updatedAt":"2020-02-06T17:16:32.579Z","lastPublishedAt":"2020-02-06T17:16:32.579Z"},{"id":"8149","name":"Great Days [JoJo's Bizarre Adventure: Diamond is Unbreakable 3rd Opening] - Karen Aoki & Daisuke Hasegawa","description":"\"Great Days\" is the third opening of JoJo's Bizarre Adventure: Diamond is Unbreakable and the seventh overall opening of the JoJo's Bizarre Adventure anime. The song is performed by the jazz vocalist Karen Aoki and Daisuke Hasegawa and composed by Yugo Kanno. The single was released on October 19, 2016.","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":170.0,"duration":239,"songName":"Great Days","songSubName":"","songAuthorName":"Daisuke Hasegawa & Karen Aoki","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":6431,"upvotes":1376,"downvotes":26,"score":0.9271},"uploaded":"2020-01-25T14:01:38.069Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"3d3effcb84f2bf4aadcd7f6ba7f89eb37226a3c3","key":"8149","state":"Published","createdAt":"2020-01-25T14:01:38.069Z","sageScore":4,"diffs":[{"njs":16.0,"offset":0.0,"notes":1005,"bombs":10,"obstacles":54,"nps":4.237,"length":672.0,"characteristic":"Standard","difficulty":"Expert","events":2987,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":237.176,"paritySummary":{"errors":43,"warns":45,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/3d3effcb84f2bf4aadcd7f6ba7f89eb37226a3c3.zip","coverURL":"https://cdn.beatsaver.com/3d3effcb84f2bf4aadcd7f6ba7f89eb37226a3c3.jpg","previewURL":"https://cdn.beatsaver.com/3d3effcb84f2bf4aadcd7f6ba7f89eb37226a3c3.mp3"}],"createdAt":"2020-01-25T14:01:38.069Z","updatedAt":"2020-01-25T14:01:38.069Z","lastPublishedAt":"2020-01-25T14:01:38.069Z"},{"id":"8ac5","name":"Overthinker - INZO","description":"Thanks Rexxz for all your patience and lighting skillz <3","uploader":{"id":4285169,"name":"ryger","uniqueSet":true,"hash":"5cff0b7798cc5a672c855a42","avatar":"https://cdn.beatsaver.com/avatar/169266024502263808.png","type":"DISCORD"},"metadata":{"bpm":108.0,"duration":222,"songName":"Overthinker","songSubName":"","songAuthorName":"INZO","levelAuthorName":"Ryger"},"stats":{"plays":0,"downloads":2384,"upvotes":1616,"downvotes":36,"score":0.9268},"uploaded":"2020-02-26T02:39:13.425Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"e09394d9d641b6739e80553ce56dcd68fa27bdf3","key":"8ac5","state":"Published","createdAt":"2020-02-26T02:39:13.425Z","sageScore":4,"diffs":[{"njs":20.0,"offset":0.25,"notes":0,"bombs":0,"obstacles":2405,"nps":0.0,"length":0.0,"characteristic":"Standard","difficulty":"Expert","events":6835,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":20.0,"offset":0.25,"notes":984,"bombs":0,"obstacles":2405,"nps":4.893,"length":362.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":6836,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":201.111,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/e09394d9d641b6739e80553ce56dcd68fa27bdf3.zip","coverURL":"https://cdn.beatsaver.com/e09394d9d641b6739e80553ce56dcd68fa27bdf3.jpg","previewURL":"https://cdn.beatsaver.com/e09394d9d641b6739e80553ce56dcd68fa27bdf3.mp3"}],"createdAt":"2020-02-26T02:39:13.425Z","updatedAt":"2020-02-26T02:39:13.425Z","lastPublishedAt":"2020-02-26T02:39:13.425Z"},{"id":"1ff6","name":"Don't Let Me Down (Illenium Remix) - The Chainsmokers feat. Daya (100k Contest)","description":"This is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes. Go to https://bsaber.com/100k-contest/ to register!\r\nDifficulties: Expert+, Expert, Hard, Normal","uploader":{"id":30311,"name":"bennydabeast","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e98d","avatar":"https://cdn.beatsaver.com/avatar/30311.jpg","type":"SIMPLE"},"metadata":{"bpm":160.0,"duration":220,"songName":"Don't Let Me Down (Illenium Remix)","songSubName":"The Chainsmokers feat. Daya","songAuthorName":"BennyDaBeast","levelAuthorName":"bennydabeast"},"stats":{"plays":0,"downloads":10044,"upvotes":4381,"downvotes":166,"score":0.9268},"uploaded":"2018-11-12T18:48:50Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"5639a12cccf90238055116ec53e5297aa004627e","key":"1ff6","state":"Published","createdAt":"2018-11-12T18:48:50Z","sageScore":8,"diffs":[{"njs":10.0,"offset":0.0,"notes":280,"bombs":0,"obstacles":26,"nps":1.511,"length":494.0,"characteristic":"Standard","difficulty":"Easy","events":1714,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":185.25,"paritySummary":{"errors":68,"warns":14,"resets":0}},{"njs":10.0,"offset":0.0,"notes":360,"bombs":0,"obstacles":26,"nps":1.943,"length":494.0,"characteristic":"Standard","difficulty":"Normal","events":1714,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":185.25,"paritySummary":{"errors":68,"warns":32,"resets":0}},{"njs":12.0,"offset":0.0,"notes":521,"bombs":0,"obstacles":154,"nps":2.801,"length":496.0,"characteristic":"Standard","difficulty":"Hard","events":1714,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":186.0,"paritySummary":{"errors":77,"warns":49,"resets":0}},{"njs":12.0,"offset":0.0,"notes":746,"bombs":0,"obstacles":155,"nps":4.011,"length":496.0,"characteristic":"Standard","difficulty":"Expert","events":1714,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":186.0,"paritySummary":{"errors":76,"warns":100,"resets":0}},{"njs":14.0,"offset":0.0,"notes":1225,"bombs":0,"obstacles":207,"nps":6.481,"length":504.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":1714,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":189.0,"paritySummary":{"errors":101,"warns":114,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/5639a12cccf90238055116ec53e5297aa004627e.zip","coverURL":"https://cdn.beatsaver.com/5639a12cccf90238055116ec53e5297aa004627e.jpg","previewURL":"https://cdn.beatsaver.com/5639a12cccf90238055116ec53e5297aa004627e.mp3"}],"createdAt":"2018-11-12T18:48:50Z","updatedAt":"2018-11-12T18:48:50Z","lastPublishedAt":"2018-11-12T18:48:50Z"},{"id":"393","name":"O-Zone - Dragostea Din Tei","description":"numa numa numa yey\r\n\r\nhard only for now, but i'll add more difficulties later\r\n\r\nfull events/lighting","uploader":{"id":52747,"name":"esspee39","uniqueSet":false,"hash":"5cff0b7398cc5a672c84f198","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f198?d=retro","type":"SIMPLE"},"metadata":{"bpm":130.0,"duration":214,"songName":"Dragostei Din Tei","songSubName":"O-Zone","songAuthorName":"esspee","levelAuthorName":"esspee39"},"stats":{"plays":0,"downloads":5541,"upvotes":3046,"downvotes":100,"score":0.9268},"uploaded":"2018-06-04T00:27:54Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"b0fd4145a269f1fc8f78afccb4a310a36f2f873c","key":"393","state":"Published","createdAt":"2018-06-04T00:27:54Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":676,"bombs":69,"obstacles":16,"nps":3.266,"length":448.5,"characteristic":"Standard","difficulty":"Hard","events":1136,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":207.0,"paritySummary":{"errors":47,"warns":131,"resets":9}}],"downloadURL":"https://cdn.beatsaver.com/b0fd4145a269f1fc8f78afccb4a310a36f2f873c.zip","coverURL":"https://cdn.beatsaver.com/b0fd4145a269f1fc8f78afccb4a310a36f2f873c.jpg","previewURL":"https://cdn.beatsaver.com/b0fd4145a269f1fc8f78afccb4a310a36f2f873c.mp3"}],"createdAt":"2018-06-04T00:27:54Z","updatedAt":"2018-06-04T00:27:54Z","lastPublishedAt":"2018-06-04T00:27:54Z"},{"id":"484d","name":"Sosageyo | Shinzou wo sasageyo | Attack on Titan OP 3 - Linked Horizon","description":"Huge thanks to Skeelie for lighting this map!\r\n\r\nThis map overrides the default red-blue colors to a blue-white color, matching the Survey Corps' Wings of Freedom.\r\nEasy, Hard, Expert, and Expert+ are all available.\r\nEasy is a bit spicy, Expert is very spicy.","uploader":{"id":15368,"name":"theab","uniqueSet":true,"hash":"5cff0b7698cc5a672c853a14","avatar":"https://www.gravatar.com/avatar/5cff0b7698cc5a672c853a14?d=retro","type":"SIMPLE"},"metadata":{"bpm":160.0,"duration":90,"songName":"Shinzou wo Sasageyo","songSubName":"Linked Horizon","songAuthorName":"Ab & Skeelie","levelAuthorName":"TheAb"},"stats":{"plays":0,"downloads":8967,"upvotes":2595,"downvotes":79,"score":0.9267},"uploaded":"2019-04-25T10:29:55Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"713da9a9a0737f402ca75819ea9dc19ec3723329","key":"484d","state":"Published","createdAt":"2019-04-25T10:29:55Z","sageScore":5,"diffs":[{"njs":12.0,"offset":0.0,"notes":123,"bombs":4,"obstacles":5,"nps":1.439,"length":228.0,"characteristic":"Standard","difficulty":"Easy","events":5254,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":85.5,"paritySummary":{"errors":30,"warns":3,"resets":2}},{"njs":12.0,"offset":0.0,"notes":229,"bombs":0,"obstacles":5,"nps":2.678,"length":228.0,"characteristic":"Standard","difficulty":"Hard","events":5215,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":85.5,"paritySummary":{"errors":21,"warns":18,"resets":0}},{"njs":15.0,"offset":0.0,"notes":372,"bombs":0,"obstacles":4,"nps":4.351,"length":228.0,"characteristic":"Standard","difficulty":"Expert","events":5215,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":85.5,"paritySummary":{"errors":33,"warns":29,"resets":0}},{"njs":18.0,"offset":0.0,"notes":548,"bombs":0,"obstacles":3,"nps":6.627,"length":220.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":5215,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":82.688,"paritySummary":{"errors":27,"warns":48,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/713da9a9a0737f402ca75819ea9dc19ec3723329.zip","coverURL":"https://cdn.beatsaver.com/713da9a9a0737f402ca75819ea9dc19ec3723329.jpg","previewURL":"https://cdn.beatsaver.com/713da9a9a0737f402ca75819ea9dc19ec3723329.mp3"}],"createdAt":"2019-04-25T10:29:55Z","updatedAt":"2019-04-25T10:29:55Z","lastPublishedAt":"2019-04-25T10:29:55Z"},{"id":"21d9","name":"GAY FROGS","description":"I DON'T LIKE EM PUTTING CHEMICALS IN THE WATER THAT TURN THE FRIGGIN FROGS GAY!","uploader":{"id":408,"name":"nuketime","uniqueSet":true,"hash":"5cff0b7498cc5a672c8507f7","avatar":"https://cdn.beatsaver.com/avatar/175811186007343104.png","type":"DISCORD"},"metadata":{"bpm":143.0,"duration":58,"songName":"Gay Frogs","songSubName":"","songAuthorName":"Nuketime","levelAuthorName":"Nuketime"},"stats":{"plays":0,"downloads":2129,"upvotes":1147,"downvotes":18,"score":0.9267},"uploaded":"2018-11-24T03:47:04Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"c7bdbfea113219f8b372ca6107540995c2e81997","key":"21d9","state":"Published","createdAt":"2018-11-24T03:47:04Z","sageScore":3,"diffs":[{"njs":15.0,"offset":0.0,"notes":278,"bombs":0,"obstacles":2,"nps":5.066,"length":109.75,"characteristic":"Standard","difficulty":"ExpertPlus","events":280,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":46.049,"paritySummary":{"errors":52,"warns":17,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/c7bdbfea113219f8b372ca6107540995c2e81997.zip","coverURL":"https://cdn.beatsaver.com/c7bdbfea113219f8b372ca6107540995c2e81997.jpg","previewURL":"https://cdn.beatsaver.com/c7bdbfea113219f8b372ca6107540995c2e81997.mp3"}],"createdAt":"2018-11-24T03:47:04Z","updatedAt":"2018-11-24T03:47:04Z","lastPublishedAt":"2018-11-24T03:47:04Z"},{"id":"a76b","name":"BB 2020 | PSYQUI feat. Marpril - Girly Cupid | 18 | Submission #47","description":"This is a submission for the Building Blocks 2020 mapping contest!\n\nAll submissions are anonymous and will be uploaded by the BuildingBlocks account from May 3rd-May 17th 2020.\n\nInterested in checking out more map submissions or entering yourself? Join our discord here: https://discord.gg/3VAPcdg\n\nRequired Plugins:\nNoodle Extension\nChroma","uploader":{"id":27741,"name":"buildingblocks","uniqueSet":true,"hash":"5eac7bb67abb000006beca92","avatar":"https://www.gravatar.com/avatar/5eac7bb67abb000006beca92?d=retro","type":"SIMPLE"},"metadata":{"bpm":133.0,"duration":244,"songName":"Girly Cupid","songSubName":"feat. Marpril","songAuthorName":"PSYQUI","levelAuthorName":"Building Blocks 2020"},"stats":{"plays":0,"downloads":1140,"upvotes":1003,"downvotes":13,"score":0.9266},"uploaded":"2020-05-17T20:45:31.509Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"55cd8d585f6e63fb9b06d7c7358bda53f821fa81","key":"a76b","state":"Published","createdAt":"2020-05-17T20:45:31.509Z","sageScore":3,"diffs":[{"njs":18.0,"offset":-0.2,"notes":764,"bombs":0,"obstacles":36331,"nps":3.232,"length":524.0,"characteristic":"Standard","difficulty":"Expert","events":3539,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":236.391,"paritySummary":{"errors":28,"warns":16,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/55cd8d585f6e63fb9b06d7c7358bda53f821fa81.zip","coverURL":"https://cdn.beatsaver.com/55cd8d585f6e63fb9b06d7c7358bda53f821fa81.jpg","previewURL":"https://cdn.beatsaver.com/55cd8d585f6e63fb9b06d7c7358bda53f821fa81.mp3"}],"createdAt":"2020-05-17T20:45:31.509Z","updatedAt":"2020-05-17T20:45:31.509Z","lastPublishedAt":"2020-05-17T20:45:31.509Z"},{"id":"6368","name":"Mimimi - Nightcore","description":"Youtube Preview: https://youtu.be/vqVK85T72hs","uploader":{"id":23751,"name":"monteblanco","uniqueSet":true,"hash":"5cff0b7798cc5a672c855ef5","avatar":"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855ef5?d=retro","type":"SIMPLE"},"metadata":{"bpm":144.6,"duration":167,"songName":"Mi Mi Mi - Nightcore","songSubName":"","songAuthorName":"NightcoreZodiac","levelAuthorName":"Monteblanco"},"stats":{"plays":0,"downloads":2275,"upvotes":1677,"downvotes":39,"score":0.9266},"uploaded":"2019-09-14T22:08:05.659Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"448f6e65098a9b0d2de0c5b87a53300a61795eb3","key":"6368","state":"Published","createdAt":"2019-09-14T22:08:05.659Z","sageScore":4,"diffs":[{"njs":16.0,"offset":0.0,"notes":755,"bombs":0,"obstacles":2,"nps":4.648,"length":391.5,"characteristic":"Standard","difficulty":"Expert","events":859,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":162.448,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/448f6e65098a9b0d2de0c5b87a53300a61795eb3.zip","coverURL":"https://cdn.beatsaver.com/448f6e65098a9b0d2de0c5b87a53300a61795eb3.jpg","previewURL":"https://cdn.beatsaver.com/448f6e65098a9b0d2de0c5b87a53300a61795eb3.mp3"}],"createdAt":"2019-09-14T22:08:05.659Z","updatedAt":"2019-09-14T22:08:05.659Z","lastPublishedAt":"2019-09-14T22:08:05.659Z"},{"id":"51fd","name":"BLOODY STREAM","description":"For the Jojo Fans","uploader":{"id":4284704,"name":"epg7ens","uniqueSet":true,"hash":"5cff0b7798cc5a672c855bb6","avatar":"https://cdn.beatsaver.com/avatar/174643589618466816.png","type":"DISCORD"},"metadata":{"bpm":132.0,"duration":259,"songName":"BLOODY STREAM","songSubName":"Coda","songAuthorName":"EPG7ENS","levelAuthorName":"EPG7ENS"},"stats":{"plays":0,"downloads":3172,"upvotes":2054,"downvotes":55,"score":0.9266},"uploaded":"2019-06-07T06:27:36Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"7d5038dd8aae109cbe537ecbc6c38ec458c820f8","key":"51fd","state":"Published","createdAt":"2019-06-07T06:27:36Z","sageScore":5,"diffs":[{"njs":17.0,"offset":0.0,"notes":1448,"bombs":0,"obstacles":0,"nps":5.648,"length":564.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":2746,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":256.364,"paritySummary":{"errors":2,"warns":3,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/7d5038dd8aae109cbe537ecbc6c38ec458c820f8.zip","coverURL":"https://cdn.beatsaver.com/7d5038dd8aae109cbe537ecbc6c38ec458c820f8.jpg","previewURL":"https://cdn.beatsaver.com/7d5038dd8aae109cbe537ecbc6c38ec458c820f8.mp3"}],"createdAt":"2019-06-07T06:27:36Z","updatedAt":"2019-06-07T06:27:36Z","lastPublishedAt":"2019-06-07T06:27:36Z"},{"id":"4b20","name":"[Anniversary] Booty Bounce - Tujamo & Taio Cruz [Fafurion]","description":"Part of the Anniversary Song Pack\r\nExpert+ must be unlocked via the Anniversary Campaign\r\nEdit: Fixed notes placed after song is finished","uploader":{"id":37070,"name":"anniversaryteam","uniqueSet":true,"hash":"5cff0b7798cc5a672c8565a3","avatar":"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro","type":"SIMPLE"},"metadata":{"bpm":128.0,"duration":198,"songName":"Booty Bounce","songSubName":"Tujamo & Taio Cruz","songAuthorName":"Fafurion","levelAuthorName":"AnniversaryTeam"},"stats":{"plays":0,"downloads":4060,"upvotes":1819,"downvotes":45,"score":0.9266},"uploaded":"2019-05-07T03:38:08Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"d106db545bccd0bba2432b71d94bb7f94fd1f9a2","key":"4b20","state":"Published","createdAt":"2019-05-07T03:38:08Z","sageScore":7,"diffs":[{"njs":13.0,"offset":0.0,"notes":366,"bombs":0,"obstacles":0,"nps":1.881,"length":415.0,"characteristic":"Standard","difficulty":"Easy","events":6151,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":194.531,"paritySummary":{"errors":6,"warns":0,"resets":0}},{"njs":13.0,"offset":0.0,"notes":550,"bombs":0,"obstacles":0,"nps":2.824,"length":415.5,"characteristic":"Standard","difficulty":"Normal","events":6151,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":194.766,"paritySummary":{"errors":6,"warns":0,"resets":0}},{"njs":13.0,"offset":0.0,"notes":732,"bombs":0,"obstacles":0,"nps":3.756,"length":415.75,"characteristic":"Standard","difficulty":"Hard","events":6151,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":194.883,"paritySummary":{"errors":20,"warns":16,"resets":0}},{"njs":15.0,"offset":0.0,"notes":874,"bombs":0,"obstacles":0,"nps":4.485,"length":415.75,"characteristic":"Standard","difficulty":"Expert","events":6151,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":194.883,"paritySummary":{"errors":28,"warns":34,"resets":0}},{"njs":15.0,"offset":0.0,"notes":938,"bombs":0,"obstacles":0,"nps":4.813,"length":415.75,"characteristic":"Standard","difficulty":"ExpertPlus","events":6151,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":194.883,"paritySummary":{"errors":32,"warns":34,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/d106db545bccd0bba2432b71d94bb7f94fd1f9a2.zip","coverURL":"https://cdn.beatsaver.com/d106db545bccd0bba2432b71d94bb7f94fd1f9a2.jpg","previewURL":"https://cdn.beatsaver.com/d106db545bccd0bba2432b71d94bb7f94fd1f9a2.mp3"}],"createdAt":"2019-05-07T03:38:08Z","updatedAt":"2019-05-07T03:38:08Z","lastPublishedAt":"2019-05-07T03:38:08Z"},{"id":"672f","name":"Kyouran Hey Kids!! [TV Size] - THE ORAL CIGARETTES (Noragami Aragoto Opening)","description":"Added a more comfortable diff which is more similar to my usual mapping style. If you don't like Ex+, play 'Shinki' for more comfort :) Also included a Hard diff for new players to enjoy this amazing song!\n\nPreview(Shinki) by Monteblanco: https://www.youtube.com/watch?v=9g9k1PomJGc\n\nHard: 369 Notes\nExpert+: 582 Notes\nShinki: 484 Notes\nLighting: 2243 Events","uploader":{"id":4285130,"name":"zoinkai__","uniqueSet":true,"hash":"5d465581f9bbae00060f3215","avatar":"https://cdn.beatsaver.com/avatar/146677763347185665.png","type":"DISCORD"},"metadata":{"bpm":142.0,"duration":91,"songName":"Kyouran Hey Kids!! (TV Size)","songSubName":"Noragami Aragoto Opening (V2)","songAuthorName":"THE ORAL CIGARETTES","levelAuthorName":"Zoinkai"},"stats":{"plays":0,"downloads":3439,"upvotes":1294,"downvotes":24,"score":0.9264},"uploaded":"2019-10-01T14:49:19.005Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"ad82ca6317e82318db8281f8902952f9d6175d3e","key":"672f","state":"Published","createdAt":"2019-10-01T14:49:19.005Z","sageScore":6,"diffs":[{"njs":12.0,"offset":0.0,"notes":369,"bombs":0,"obstacles":21,"nps":4.456,"length":196.0,"characteristic":"Standard","difficulty":"Hard","events":2243,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":82.817,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":18.0,"offset":0.0,"notes":582,"bombs":7,"obstacles":33,"nps":6.622,"length":208.0,"characteristic":"Standard","difficulty":"Expert","events":2243,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":87.887,"paritySummary":{"errors":6,"warns":10,"resets":1}},{"njs":18.0,"offset":0.0,"notes":484,"bombs":13,"obstacles":34,"nps":5.507,"length":208.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":2243,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":87.887,"paritySummary":{"errors":5,"warns":13,"resets":2}}],"downloadURL":"https://cdn.beatsaver.com/ad82ca6317e82318db8281f8902952f9d6175d3e.zip","coverURL":"https://cdn.beatsaver.com/ad82ca6317e82318db8281f8902952f9d6175d3e.jpg","previewURL":"https://cdn.beatsaver.com/ad82ca6317e82318db8281f8902952f9d6175d3e.mp3"}],"createdAt":"2019-10-01T14:49:19.005Z","updatedAt":"2019-10-01T14:49:19.005Z","lastPublishedAt":"2019-10-01T14:49:19.005Z"},{"id":"5d26","name":"[Anniversary] Dancin (Krono Remix) - Aaron Smith [Skyler Wallace & Rexxz]","description":"Part of the Anniversary Song Pack","uploader":{"id":37070,"name":"anniversaryteam","uniqueSet":true,"hash":"5cff0b7798cc5a672c8565a3","avatar":"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro","type":"SIMPLE"},"metadata":{"bpm":120.0,"duration":198,"songName":"Dancin","songSubName":"Krono Remix","songAuthorName":"Aaron Smith","levelAuthorName":"Skyler Wallace & Rexxz"},"stats":{"plays":0,"downloads":7081,"upvotes":2783,"downvotes":89,"score":0.9263},"uploaded":"2019-08-16T01:48:15.139Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"52cf3774ef1705f2830a85ad3147be9c52c795af","key":"5d26","state":"Published","createdAt":"2019-08-16T01:48:15.139Z","sageScore":7,"diffs":[{"njs":10.0,"offset":1.0,"notes":232,"bombs":0,"obstacles":8,"nps":1.215,"length":382.0,"characteristic":"Standard","difficulty":"Easy","events":7824,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":191.0,"paritySummary":{"errors":57,"warns":26,"resets":0}},{"njs":10.0,"offset":1.0,"notes":280,"bombs":0,"obstacles":0,"nps":1.458,"length":384.0,"characteristic":"Standard","difficulty":"Normal","events":7824,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":192.0,"paritySummary":{"errors":71,"warns":47,"resets":0}},{"njs":10.0,"offset":1.0,"notes":386,"bombs":0,"obstacles":4,"nps":2.01,"length":384.0,"characteristic":"Standard","difficulty":"Hard","events":7824,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":192.0,"paritySummary":{"errors":68,"warns":47,"resets":0}},{"njs":14.0,"offset":0.0,"notes":594,"bombs":0,"obstacles":0,"nps":3.094,"length":384.0,"characteristic":"Standard","difficulty":"Expert","events":7824,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":192.0,"paritySummary":{"errors":52,"warns":59,"resets":0}},{"njs":14.0,"offset":0.0,"notes":793,"bombs":0,"obstacles":30,"nps":4.13,"length":384.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":7824,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":192.0,"paritySummary":{"errors":81,"warns":81,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/52cf3774ef1705f2830a85ad3147be9c52c795af.zip","coverURL":"https://cdn.beatsaver.com/52cf3774ef1705f2830a85ad3147be9c52c795af.jpg","previewURL":"https://cdn.beatsaver.com/52cf3774ef1705f2830a85ad3147be9c52c795af.mp3"}],"createdAt":"2019-08-16T01:48:15.139Z","updatedAt":"2019-08-16T01:48:15.139Z","lastPublishedAt":"2019-08-16T01:48:15.139Z"},{"id":"32e","name":"Daft Punk - Harder Better Faster Stronger","description":"Expert & Hard | 600+ Blocks | Full Song 3:44 | Includes Lighting. Request to: @themakertales","uploader":{"id":51740,"name":"runrockgame","uniqueSet":false,"hash":"5cff0b7398cc5a672c84f04e","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f04e?d=retro","type":"SIMPLE"},"metadata":{"bpm":123.0,"duration":224,"songName":"Harder Better Faster Stronger","songSubName":"Daft Punk","songAuthorName":"RunRockGame","levelAuthorName":"runrockgame"},"stats":{"plays":0,"downloads":14652,"upvotes":15728,"downvotes":820,"score":0.9263},"uploaded":"2018-06-01T18:01:45Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"7c7f38d467bb43fe11a142581e63e324622ecc71","key":"32e","state":"Published","createdAt":"2018-06-01T18:01:45Z","sageScore":6,"diffs":[{"njs":10.0,"offset":0.0,"notes":423,"bombs":57,"obstacles":33,"nps":1.381,"length":630.5,"characteristic":"Standard","difficulty":"Hard","events":1618,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":307.561,"paritySummary":{"errors":95,"warns":38,"resets":16}},{"njs":10.0,"offset":0.0,"notes":616,"bombs":68,"obstacles":33,"nps":2.011,"length":630.5,"characteristic":"Standard","difficulty":"Expert","events":1618,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":307.561,"paritySummary":{"errors":60,"warns":83,"resets":14}}],"downloadURL":"https://cdn.beatsaver.com/7c7f38d467bb43fe11a142581e63e324622ecc71.zip","coverURL":"https://cdn.beatsaver.com/7c7f38d467bb43fe11a142581e63e324622ecc71.jpg","previewURL":"https://cdn.beatsaver.com/7c7f38d467bb43fe11a142581e63e324622ecc71.mp3"}],"createdAt":"2018-06-01T18:01:45Z","updatedAt":"2018-06-01T18:01:45Z","lastPublishedAt":"2018-06-01T18:01:45Z"},{"id":"636","name":"Burn - Ellie Goulding","description":"Difficulties: Expert, Hard, Normal\r\nCome Hang Out on Twitch! http://www.twitch.tv/bennydabeastlive\r\nYouTube Link: https://youtu.be/KOdvSdrnaeE\r\n\r\nIf you like this, check out my other beat maps:\r\nUptown Funk: https://beatsaver.com/details.php?id=1962\r\nCAN'T STOP THE FEELING by Justin Timberlake: https://beatsaver.com/details.php?id=1587\r\nMidnight City by M83: https://beatsaver.com/details.php?id=542\r\nKids by MGMT: https://beatsaver.com/details.php?id=421\r\nWhat You Know by Two Door Cinema Club: https://beatsaver.com/details.php?id=1107\r\nPolish Girl by Neon Indian: https://beatsaver.com/details.php?id=694","uploader":{"id":30311,"name":"bennydabeast","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e98d","avatar":"https://cdn.beatsaver.com/avatar/30311.jpg","type":"SIMPLE"},"metadata":{"bpm":174.0,"duration":233,"songName":"Burn","songSubName":"Ellie Goulding","songAuthorName":"BennyDaBeast","levelAuthorName":"bennydabeast"},"stats":{"plays":0,"downloads":14492,"upvotes":7023,"downvotes":311,"score":0.9262},"uploaded":"2018-06-22T20:31:34Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"9d31d3aab3d58ab540df63caed06d62ff1cfefdd","key":"636","state":"Published","createdAt":"2018-06-22T20:31:34Z","sageScore":7,"diffs":[{"njs":10.0,"offset":0.0,"notes":438,"bombs":12,"obstacles":8,"nps":1.58,"length":804.0,"characteristic":"Standard","difficulty":"Easy","events":396,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":277.241,"paritySummary":{"errors":107,"warns":62,"resets":0}},{"njs":10.0,"offset":0.0,"notes":519,"bombs":12,"obstacles":8,"nps":1.872,"length":804.0,"characteristic":"Standard","difficulty":"Hard","events":396,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":277.241,"paritySummary":{"errors":67,"warns":109,"resets":0}},{"njs":10.0,"offset":0.0,"notes":686,"bombs":12,"obstacles":8,"nps":3.251,"length":612.0,"characteristic":"Standard","difficulty":"Expert","events":396,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":211.034,"paritySummary":{"errors":120,"warns":168,"resets":0},"stars":2.37}],"downloadURL":"https://cdn.beatsaver.com/9d31d3aab3d58ab540df63caed06d62ff1cfefdd.zip","coverURL":"https://cdn.beatsaver.com/9d31d3aab3d58ab540df63caed06d62ff1cfefdd.jpg","previewURL":"https://cdn.beatsaver.com/9d31d3aab3d58ab540df63caed06d62ff1cfefdd.mp3"}],"createdAt":"2018-06-22T20:31:34Z","updatedAt":"2018-06-22T20:31:34Z","lastPublishedAt":"2018-06-22T20:31:34Z"},{"id":"b662","name":"PREPARING THE KRABBY PATTY","description":"Just a funny little map I made a couple weeks ago. I thought you might enjoy it so I'm releasing it now.\r\nI hope you enjoy.\r\n\r\nThe song is from the SpongeBob episode, Krusty Krab Training Video.\r\nEpisode Info: https://spongebob.fandom.com/wiki/Krusty_Krab_Training_Video","uploader":{"id":4284694,"name":"jokidum","uniqueSet":true,"hash":"5e15518d47f1600006e912cc","avatar":"https://cdn.beatsaver.com/avatar/494282373094047745.png","type":"DISCORD"},"metadata":{"bpm":145.0,"duration":37,"songName":"PREPARING THE KRABBY PATTY","songSubName":"","songAuthorName":"SpongeBob SquarePants","levelAuthorName":"Jokidum"},"stats":{"plays":0,"downloads":2731,"upvotes":1125,"downvotes":18,"score":0.9261},"uploaded":"2020-06-26T20:00:17.824Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"f931e1d23e0fad3b1ac22d86c55ab17718470b6d","key":"b662","state":"Published","createdAt":"2020-06-26T20:00:17.824Z","sageScore":-2,"diffs":[{"njs":12.0,"offset":0.0,"notes":165,"bombs":0,"obstacles":2,"nps":5.75,"length":69.344,"characteristic":"Standard","difficulty":"ExpertPlus","events":628,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":28.694,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/f931e1d23e0fad3b1ac22d86c55ab17718470b6d.zip","coverURL":"https://cdn.beatsaver.com/f931e1d23e0fad3b1ac22d86c55ab17718470b6d.jpg","previewURL":"https://cdn.beatsaver.com/f931e1d23e0fad3b1ac22d86c55ab17718470b6d.mp3"}],"createdAt":"2020-06-26T20:00:17.824Z","updatedAt":"2020-06-26T20:00:17.824Z","lastPublishedAt":"2020-06-26T20:00:17.824Z"},{"id":"6381","name":"Caravan Palace - Moonshine","description":"Easy, Normal, Hard, Expert, ExpertPlus\n\nE+: https://www.youtube.com/watch?v=pQFgyOkFdgM\n\nRequested by laser","uploader":{"id":4235138,"name":"CyanSnow","uniqueSet":true,"hash":"5cff0b7698cc5a672c8543ac","avatar":"https://cdn.beatsaver.com/avatar/154341137694326784.png","type":"DISCORD"},"metadata":{"bpm":117.0,"duration":215,"songName":"Moonshine","songSubName":"","songAuthorName":"Caravan Palace","levelAuthorName":"CyanSnow"},"stats":{"plays":0,"downloads":3301,"upvotes":1700,"downvotes":41,"score":0.9261},"uploaded":"2019-09-15T02:18:33.112Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"fd8d96de2a21cd4c56c6657214bb88e1b127b471","key":"6381","state":"Published","createdAt":"2019-09-15T02:18:33.112Z","sageScore":8,"diffs":[{"njs":12.0,"offset":0.5,"notes":260,"bombs":0,"obstacles":23,"nps":1.24,"length":409.0,"characteristic":"Standard","difficulty":"Easy","events":3302,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":209.744,"paritySummary":{"errors":96,"warns":14,"resets":0}},{"njs":12.0,"offset":0.5,"notes":376,"bombs":0,"obstacles":23,"nps":1.793,"length":409.0,"characteristic":"Standard","difficulty":"Normal","events":3302,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":209.744,"paritySummary":{"errors":38,"warns":19,"resets":0}},{"njs":13.0,"offset":0.25,"notes":596,"bombs":0,"obstacles":10,"nps":2.856,"length":407.0,"characteristic":"Standard","difficulty":"Hard","events":3302,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":208.718,"paritySummary":{"errors":7,"warns":7,"resets":0}},{"njs":15.0,"offset":0.0,"notes":691,"bombs":0,"obstacles":9,"nps":3.311,"length":407.0,"characteristic":"Standard","difficulty":"Expert","events":3302,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":208.718,"paritySummary":{"errors":7,"warns":11,"resets":0}},{"njs":17.0,"offset":-0.25,"notes":1302,"bombs":0,"obstacles":8,"nps":6.2,"length":409.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":3299,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":210.0,"paritySummary":{"errors":3,"warns":3,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/fd8d96de2a21cd4c56c6657214bb88e1b127b471.zip","coverURL":"https://cdn.beatsaver.com/fd8d96de2a21cd4c56c6657214bb88e1b127b471.jpg","previewURL":"https://cdn.beatsaver.com/fd8d96de2a21cd4c56c6657214bb88e1b127b471.mp3"}],"createdAt":"2019-09-15T02:18:33.112Z","updatedAt":"2019-09-15T02:18:33.112Z","lastPublishedAt":"2019-09-15T02:18:33.112Z"},{"id":"8570","name":"Dua Lipa - Physical","description":"Physical - The first difficulty is Hard but is mislabeled as Expert. I have no way to update this sorry! The second difficulty is Expert.","uploader":{"id":4285261,"name":"yomama","uniqueSet":true,"hash":"5e23f0a1054bbd0007bc1ed4","avatar":"https://cdn.beatsaver.com/avatar/153595294792155137.png","type":"DISCORD"},"metadata":{"bpm":147.0,"duration":195,"songName":"Physical","songSubName":"","songAuthorName":"Dua Lipa","levelAuthorName":"yomama"},"stats":{"plays":0,"downloads":4086,"upvotes":1554,"downvotes":35,"score":0.926},"uploaded":"2020-02-09T03:16:30.433Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"ab7c911471a652de2ba74bd6df2a4cbbc5d45fee","key":"8570","state":"Published","createdAt":"2020-02-09T03:16:30.433Z","sageScore":4,"diffs":[{"njs":10.0,"offset":0.0,"notes":767,"bombs":0,"obstacles":33,"nps":4.059,"length":463.0,"characteristic":"Standard","difficulty":"Hard","events":2281,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":188.98,"paritySummary":{"errors":105,"warns":24,"resets":0}},{"njs":14.0,"offset":0.0,"notes":841,"bombs":0,"obstacles":33,"nps":4.45,"length":463.0,"characteristic":"Standard","difficulty":"Expert","events":1397,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":188.98,"paritySummary":{"errors":101,"warns":44,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/ab7c911471a652de2ba74bd6df2a4cbbc5d45fee.zip","coverURL":"https://cdn.beatsaver.com/ab7c911471a652de2ba74bd6df2a4cbbc5d45fee.jpg","previewURL":"https://cdn.beatsaver.com/ab7c911471a652de2ba74bd6df2a4cbbc5d45fee.mp3"}],"createdAt":"2020-02-09T03:16:30.433Z","updatedAt":"2020-02-09T03:16:30.433Z","lastPublishedAt":"2020-02-09T03:16:30.433Z"},{"id":"6f60","name":"True Damage - GIANTS","description":"PepeJamJam ","uploader":{"id":4285107,"name":"kikaeaeon","uniqueSet":true,"hash":"5cff0b7498cc5a672c85109b","avatar":"https://cdn.beatsaver.com/avatar/103715469822816256.png","type":"DISCORD"},"metadata":{"bpm":155.0,"duration":193,"songName":"GIANTS","songSubName":"","songAuthorName":"True Damage","levelAuthorName":"KikaeAeon"},"stats":{"plays":0,"downloads":7189,"upvotes":2503,"downvotes":77,"score":0.926},"uploaded":"2019-11-11T08:43:31.658Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"7fba5d716708d625428985bbead477321c419240","key":"6f60","state":"Published","createdAt":"2019-11-11T08:43:31.658Z","sageScore":7,"diffs":[{"njs":10.0,"offset":0.0,"notes":418,"bombs":0,"obstacles":68,"nps":2.279,"length":473.72,"characteristic":"Standard","difficulty":"Hard","events":1150,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":183.376,"paritySummary":{"errors":21,"warns":7,"resets":0}},{"njs":12.0,"offset":0.0,"notes":633,"bombs":0,"obstacles":54,"nps":3.452,"length":473.72,"characteristic":"Standard","difficulty":"Expert","events":1150,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":183.376,"paritySummary":{"errors":12,"warns":14,"resets":0}},{"njs":16.0,"offset":0.0,"notes":863,"bombs":0,"obstacles":59,"nps":4.705,"length":473.84,"characteristic":"Standard","difficulty":"ExpertPlus","events":1150,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":183.422,"paritySummary":{"errors":30,"warns":55,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/7fba5d716708d625428985bbead477321c419240.zip","coverURL":"https://cdn.beatsaver.com/7fba5d716708d625428985bbead477321c419240.jpg","previewURL":"https://cdn.beatsaver.com/7fba5d716708d625428985bbead477321c419240.mp3"}],"createdAt":"2019-11-11T08:43:31.658Z","updatedAt":"2019-11-11T08:43:31.658Z","lastPublishedAt":"2019-11-11T08:43:31.658Z"},{"id":"c208","name":"[Alphabeat - Pegboard Nerds Pack] Pegboard Nerds - Disconnected","description":"Part of the Pegboard Nerds Music Pack - Presented by the Alphabeat Mapping Group.\n\nAlphabeat is a mapping group that currently consists of 6 members, 4 of which have made this pack. This Pegboard Nerds pack is brought to you by Timeweaver, Rayman9515, KuritsaDBS & FireStrike!\n\nThis map uses a custom platform made by Rayman! Download it here: https://modelsaber.com/Platforms/?id=1594988870\n\nAll songs included in this pack:\n- Gunslinga (Mapped by Rayman)\n- Coffins (Mapped by Rayman)\n- Superstar (Mapped by Timeweaver & Firestrike)\n- Razor Sharp (Mapped by Firestrike)\n- Luigi’s Mansion (Mapped by Rayman)\n- Try This (Mapped by Timeweaver & Firestrike)\n- Swamp Thing (Mapped by Rayman & KuritsaDVR)\n- Exterminate (Mapped by Timeweaver)\n- Disconnected (Mapped by Timeweaver & Firestrike)\n- Here it Comes (Mapped by KuritsaDVR & Timeweaver)\nGet the playlist here: Coming Soon\n\nCheck everyone out:\nRayman: https://beatsaver.com/uploader/5dc6edac6dea0b0006c18486\nFirestrike: https://beatsaver.com/uploader/5cff0b7498cc5a672c85055a\nKuritsaDBS: https://beatsaver.com/uploader/5cff0b7698cc5a672c8537ef\n\nIncludes\n- 5 Standard Difficulties\n- 1 One Saber Difficulty","uploader":{"id":4284197,"name":"timeweaver","uniqueSet":true,"hash":"5d47d586c5301900060b2f6c","avatar":"https://cdn.beatsaver.com/avatar/607399708121366529.png","type":"DISCORD"},"metadata":{"bpm":128.0,"duration":212,"songName":"Disconnected","songSubName":"","songAuthorName":"Pegboard Nerds","levelAuthorName":"FireStrike & Timeweaver"},"stats":{"plays":0,"downloads":4098,"upvotes":1198,"downvotes":21,"score":0.9259},"uploaded":"2020-07-17T13:00:44.293Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"423bd0a80440bcc9dda9dbe20a72ed235dfc3e84","key":"c208","state":"Published","createdAt":"2020-07-17T13:00:44.293Z","sageScore":7,"diffs":[{"njs":9.0,"offset":0.0,"notes":274,"bombs":0,"obstacles":43,"nps":1.319,"length":443.0,"characteristic":"Standard","difficulty":"Easy","events":4547,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":207.656,"paritySummary":{"errors":82,"warns":16,"resets":0}},{"njs":10.0,"offset":1.0,"notes":374,"bombs":0,"obstacles":58,"nps":1.799,"length":443.5,"characteristic":"Standard","difficulty":"Normal","events":4547,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":207.891,"paritySummary":{"errors":62,"warns":42,"resets":0}},{"njs":12.0,"offset":0.5,"notes":567,"bombs":0,"obstacles":60,"nps":2.727,"length":443.5,"characteristic":"Standard","difficulty":"Hard","events":4547,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":207.891,"paritySummary":{"errors":31,"warns":22,"resets":0}},{"njs":15.0,"offset":0.0,"notes":777,"bombs":0,"obstacles":73,"nps":3.738,"length":443.5,"characteristic":"Standard","difficulty":"Expert","events":4547,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":207.891,"paritySummary":{"errors":2,"warns":0,"resets":0}},{"njs":17.0,"offset":-0.25,"notes":957,"bombs":114,"obstacles":56,"nps":4.603,"length":443.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":4547,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":207.891,"paritySummary":{"errors":0,"warns":2,"resets":0}},{"njs":15.0,"offset":0.0,"notes":611,"bombs":0,"obstacles":85,"nps":2.939,"length":443.5,"characteristic":"OneSaber","difficulty":"Expert","events":4548,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":207.891,"paritySummary":{"errors":0,"warns":1,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/423bd0a80440bcc9dda9dbe20a72ed235dfc3e84.zip","coverURL":"https://cdn.beatsaver.com/423bd0a80440bcc9dda9dbe20a72ed235dfc3e84.jpg","previewURL":"https://cdn.beatsaver.com/423bd0a80440bcc9dda9dbe20a72ed235dfc3e84.mp3"}],"createdAt":"2020-07-17T13:00:44.293Z","updatedAt":"2020-07-17T13:00:44.293Z","lastPublishedAt":"2020-07-17T13:00:44.293Z"},{"id":"1fed","name":"Change The World - Fox Blanco - 100k Contest","description":"This is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes. Go to https://bsaber.com/100k-contest/ to register!","uploader":{"id":13320,"name":"novashaft","uniqueSet":true,"hash":"5cff0b7398cc5a672c84ee55","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee55?d=retro","type":"SIMPLE"},"metadata":{"bpm":126.0,"duration":179,"songName":"Change The World","songSubName":"Fox Blanco","songAuthorName":"NovaShaft","levelAuthorName":"novashaft"},"stats":{"plays":0,"downloads":4075,"upvotes":1249,"downvotes":23,"score":0.9259},"uploaded":"2018-11-12T17:42:26Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"fcc70ede2fcbd648a25a954e6928a14985f1fbe8","key":"1fed","state":"Published","createdAt":"2018-11-12T17:42:26Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":245,"bombs":0,"obstacles":18,"nps":1.4,"length":367.5,"characteristic":"Standard","difficulty":"Easy","events":889,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":175.0,"paritySummary":{"errors":25,"warns":4,"resets":0}},{"njs":10.0,"offset":0.0,"notes":321,"bombs":0,"obstacles":19,"nps":1.834,"length":367.5,"characteristic":"Standard","difficulty":"Normal","events":889,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":175.0,"paritySummary":{"errors":35,"warns":6,"resets":0}},{"njs":10.0,"offset":0.0,"notes":443,"bombs":0,"obstacles":19,"nps":2.531,"length":367.5,"characteristic":"Standard","difficulty":"Hard","events":889,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":175.0,"paritySummary":{"errors":26,"warns":9,"resets":0}},{"njs":12.0,"offset":0.0,"notes":531,"bombs":0,"obstacles":19,"nps":3.034,"length":367.5,"characteristic":"Standard","difficulty":"Expert","events":889,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":175.0,"paritySummary":{"errors":40,"warns":34,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/fcc70ede2fcbd648a25a954e6928a14985f1fbe8.zip","coverURL":"https://cdn.beatsaver.com/fcc70ede2fcbd648a25a954e6928a14985f1fbe8.jpg","previewURL":"https://cdn.beatsaver.com/fcc70ede2fcbd648a25a954e6928a14985f1fbe8.mp3"}],"createdAt":"2018-11-12T17:42:26Z","updatedAt":"2018-11-12T17:42:26Z","lastPublishedAt":"2018-11-12T17:42:26Z"},{"id":"3023","name":"Houdini - Foster The People","description":"Expert Playthrough : https://youtu.be/6Fk164IwVyU","uploader":{"id":13320,"name":"novashaft","uniqueSet":true,"hash":"5cff0b7398cc5a672c84ee55","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee55?d=retro","type":"SIMPLE"},"metadata":{"bpm":110.0,"duration":204,"songName":"Houdini","songSubName":"Foster The People","songAuthorName":"NovaShaft","levelAuthorName":"novashaft"},"stats":{"plays":0,"downloads":3836,"upvotes":1087,"downvotes":17,"score":0.9258},"uploaded":"2019-01-22T19:02:49Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"c50641c7f73470e5368ab6957bedca3b2e620edc","key":"3023","state":"Published","createdAt":"2019-01-22T19:02:49Z","sageScore":6,"diffs":[{"njs":10.0,"offset":0.0,"notes":367,"bombs":0,"obstacles":27,"nps":1.838,"length":366.0,"characteristic":"Standard","difficulty":"Normal","events":1163,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":199.636,"paritySummary":{"errors":30,"warns":20,"resets":0}},{"njs":11.0,"offset":0.0,"notes":522,"bombs":0,"obstacles":27,"nps":2.615,"length":366.0,"characteristic":"Standard","difficulty":"Hard","events":1163,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":199.636,"paritySummary":{"errors":38,"warns":29,"resets":0}},{"njs":12.0,"offset":0.0,"notes":829,"bombs":0,"obstacles":27,"nps":4.153,"length":366.0,"characteristic":"Standard","difficulty":"Expert","events":1163,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":199.636,"paritySummary":{"errors":41,"warns":33,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/c50641c7f73470e5368ab6957bedca3b2e620edc.zip","coverURL":"https://cdn.beatsaver.com/c50641c7f73470e5368ab6957bedca3b2e620edc.jpg","previewURL":"https://cdn.beatsaver.com/c50641c7f73470e5368ab6957bedca3b2e620edc.mp3"}],"createdAt":"2019-01-22T19:02:49Z","updatedAt":"2019-01-22T19:02:49Z","lastPublishedAt":"2019-01-22T19:02:49Z"},{"id":"849c","name":"Nightcore - Sweet but Psycho","description":"Youtube Preview: https://youtu.be/7u9Z8z-25ro","uploader":{"id":23751,"name":"monteblanco","uniqueSet":true,"hash":"5cff0b7798cc5a672c855ef5","avatar":"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855ef5?d=retro","type":"SIMPLE"},"metadata":{"bpm":148.0,"duration":167,"songName":"Nightcore - Sweet but Psycho","songSubName":"","songAuthorName":"Syrex","levelAuthorName":"Monteblanco"},"stats":{"plays":0,"downloads":2955,"upvotes":1088,"downvotes":17,"score":0.9258},"uploaded":"2020-02-06T05:37:47.858Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"908f95d354d9a3861f94055772983d54cd12bdcd","key":"849c","state":"Published","createdAt":"2020-02-06T05:37:47.858Z","sageScore":2,"diffs":[{"njs":18.0,"offset":0.0,"notes":672,"bombs":0,"obstacles":0,"nps":4.134,"length":400.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":778,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":162.162,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/908f95d354d9a3861f94055772983d54cd12bdcd.zip","coverURL":"https://cdn.beatsaver.com/908f95d354d9a3861f94055772983d54cd12bdcd.jpg","previewURL":"https://cdn.beatsaver.com/908f95d354d9a3861f94055772983d54cd12bdcd.mp3"}],"createdAt":"2020-02-06T05:37:47.858Z","updatedAt":"2020-02-06T05:37:47.858Z","lastPublishedAt":"2020-02-06T05:37:47.858Z"},{"id":"6cc2","name":"Tones And I - Dance Monkey","description":"Dance. :3","uploader":{"id":4289959,"name":"pinus-sp","uniqueSet":true,"hash":"5d9cd7b2e6a67600062ab0a9","avatar":"https://cdn.beatsaver.com/avatar/188777396441186304.png","type":"DISCORD"},"metadata":{"bpm":196.0,"duration":211,"songName":"Dance Monkey","songSubName":"","songAuthorName":"Tones and I","levelAuthorName":"Pinus Sp"},"stats":{"plays":0,"downloads":7505,"upvotes":5655,"downvotes":239,"score":0.9258},"uploaded":"2019-10-28T20:20:40.691Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"46bbda664ab28c94639d8991d924726c0803b023","key":"6cc2","state":"Published","createdAt":"2019-10-28T20:20:40.691Z","sageScore":5,"diffs":[{"njs":12.0,"offset":0.0,"notes":256,"bombs":0,"obstacles":76,"nps":1.253,"length":667.25,"characteristic":"Standard","difficulty":"Normal","events":1140,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":204.26,"paritySummary":{"errors":133,"warns":0,"resets":0}},{"njs":12.0,"offset":0.0,"notes":462,"bombs":0,"obstacles":88,"nps":2.262,"length":667.25,"characteristic":"Standard","difficulty":"Hard","events":1140,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":204.26,"paritySummary":{"errors":265,"warns":3,"resets":0}},{"njs":12.0,"offset":0.0,"notes":826,"bombs":0,"obstacles":88,"nps":4.044,"length":667.25,"characteristic":"Standard","difficulty":"Expert","events":1140,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":204.26,"paritySummary":{"errors":132,"warns":93,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/46bbda664ab28c94639d8991d924726c0803b023.zip","coverURL":"https://cdn.beatsaver.com/46bbda664ab28c94639d8991d924726c0803b023.jpg","previewURL":"https://cdn.beatsaver.com/46bbda664ab28c94639d8991d924726c0803b023.mp3"}],"createdAt":"2019-10-28T20:20:40.691Z","updatedAt":"2019-10-28T20:20:40.691Z","lastPublishedAt":"2019-10-28T20:20:40.691Z"},{"id":"5dbb","name":"Siames - The Wolf","description":"Video Preview: https://youtu.be/I68zZeXioyc\n\nDifficulty: Expert\nBPM: 96.1\nNotes: 632\nNJS: 12\nNPS: 3.32\nSong Duration: 3:10","uploader":{"id":34679,"name":"lukemortora","uniqueSet":true,"hash":"5cff0b7798cc5a672c855c16","avatar":"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855c16?d=retro","type":"SIMPLE"},"metadata":{"bpm":96.1,"duration":190,"songName":"The Wolf","songSubName":"","songAuthorName":"Siames","levelAuthorName":"LukeMortora"},"stats":{"plays":0,"downloads":1765,"upvotes":1108,"downvotes":18,"score":0.9257},"uploaded":"2019-08-18T13:54:38.297Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"88ef5d6f1ce10e3cc85637b095cd46ee68f125ac","key":"5dbb","state":"Published","createdAt":"2019-08-18T13:54:38.297Z","sageScore":6,"diffs":[{"njs":13.0,"offset":0.0,"notes":632,"bombs":60,"obstacles":19,"nps":3.467,"length":292.0,"characteristic":"Standard","difficulty":"Expert","events":1152,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":182.31,"paritySummary":{"errors":51,"warns":53,"resets":22}}],"downloadURL":"https://cdn.beatsaver.com/88ef5d6f1ce10e3cc85637b095cd46ee68f125ac.zip","coverURL":"https://cdn.beatsaver.com/88ef5d6f1ce10e3cc85637b095cd46ee68f125ac.jpg","previewURL":"https://cdn.beatsaver.com/88ef5d6f1ce10e3cc85637b095cd46ee68f125ac.mp3"}],"createdAt":"2019-08-18T13:54:38.297Z","updatedAt":"2019-08-18T13:54:38.297Z","lastPublishedAt":"2019-08-18T13:54:38.297Z"},{"id":"8e98","name":"2WEI feat. Edda Hayes - Warriors","description":"Bit late on this one to be honest.\nOfficial Imagine Dragons cover from League of Legends season 2020 cinematic.\n\nvideo: https://youtu.be/Wl-GfMwC3i8\n\nEasy: Notes: 159 NPS: 0.91 NJS: 12\nNormal: Notes: 221 NPS: 1.26 NJS: 12\nHard: Notes: 288 NPS: 1.64 NJS: 15\nExpert: Notes: 373 NPS: 1.98 NJS: 17\nExpert+: Notes: 442 NPS: 2.35 NJS: 19\n\nCheck out my lightshows here: https://www.youtube.com/playlist?list=PLwl6dYq72JOYu1BnKl5WATa4Dh__ZJmuN","uploader":{"id":14808,"name":"halcyon12","uniqueSet":true,"hash":"5cff0b7698cc5a672c8547ad","avatar":"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8547ad?d=retro","type":"SIMPLE"},"metadata":{"bpm":123.0,"duration":204,"songName":"Warriors","songSubName":"(feat. Edda Hayes)","songAuthorName":"2WEI, League of Legends","levelAuthorName":"Halcyon12"},"stats":{"plays":0,"downloads":10351,"upvotes":2900,"downvotes":97,"score":0.9256},"uploaded":"2020-03-09T01:22:45.508Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"3a49f1b40044ba90eb27963c29121537cec28a44","key":"8e98","state":"Published","createdAt":"2020-03-09T01:22:45.508Z","sageScore":8,"diffs":[{"njs":12.0,"offset":1.0,"notes":159,"bombs":0,"obstacles":21,"nps":0.91,"length":358.292,"characteristic":"Standard","difficulty":"Easy","events":3343,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":174.777,"paritySummary":{"errors":13,"warns":2,"resets":0}},{"njs":14.0,"offset":0.5,"notes":221,"bombs":0,"obstacles":35,"nps":1.259,"length":359.904,"characteristic":"Standard","difficulty":"Normal","events":3343,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":175.563,"paritySummary":{"errors":9,"warns":4,"resets":0}},{"njs":15.0,"offset":0.0,"notes":288,"bombs":0,"obstacles":54,"nps":1.64,"length":359.904,"characteristic":"Standard","difficulty":"Hard","events":3343,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":175.563,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":17.0,"offset":-0.25,"notes":373,"bombs":0,"obstacles":34,"nps":1.98,"length":386.268,"characteristic":"Standard","difficulty":"Expert","events":3343,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":188.424,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":19.0,"offset":0.5,"notes":442,"bombs":0,"obstacles":178,"nps":2.346,"length":386.268,"characteristic":"Standard","difficulty":"ExpertPlus","events":3343,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":188.424,"paritySummary":{"errors":1,"warns":0,"resets":0}},{"njs":12.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"Lightshow","difficulty":"ExpertPlus","events":3343,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/3a49f1b40044ba90eb27963c29121537cec28a44.zip","coverURL":"https://cdn.beatsaver.com/3a49f1b40044ba90eb27963c29121537cec28a44.jpg","previewURL":"https://cdn.beatsaver.com/3a49f1b40044ba90eb27963c29121537cec28a44.mp3"}],"createdAt":"2020-03-09T01:22:45.508Z","updatedAt":"2020-03-09T01:22:45.508Z","lastPublishedAt":"2020-03-09T01:22:45.508Z"},{"id":"4fc3","name":"Doubt - twenty one pilots","description":"Nice relaxing and laid-back experience, even on Expert/Expert+. In-game voting is fixed too, so don't forget to update your mods!\r\n\r\nBPM: 123\r\n\r\nNotes: N - 409 ; H - 487 ; Ex - 668 ; Ex+ - 720\r\nWalls: N - 68 ; H - 42 ; Ex - 41 ; Ex+ - 40\r\nBombs: None!\r\n\r\nThanks to helencarnate and Qwasyx for playtesting!","uploader":{"id":4285188,"name":"fruhead","uniqueSet":true,"hash":"5cff0b7598cc5a672c852683","avatar":"https://cdn.beatsaver.com/avatar/174000100413145090.png","type":"DISCORD"},"metadata":{"bpm":123.0,"duration":191,"songName":"Doubt","songSubName":"twenty one pilots","songAuthorName":"fruhead","levelAuthorName":"fruhead"},"stats":{"plays":0,"downloads":6089,"upvotes":1160,"downvotes":20,"score":0.9256},"uploaded":"2019-05-29T18:36:45Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"bf166123a88a801f41aed10cff6c36f9f11f4cf3","key":"4fc3","state":"Published","createdAt":"2019-05-29T18:36:45Z","sageScore":4,"diffs":[{"njs":12.0,"offset":0.0,"notes":409,"bombs":0,"obstacles":68,"nps":2.285,"length":367.0,"characteristic":"Standard","difficulty":"Normal","events":5750,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":179.024,"paritySummary":{"errors":13,"warns":4,"resets":0}},{"njs":12.0,"offset":0.0,"notes":487,"bombs":0,"obstacles":42,"nps":2.72,"length":367.0,"characteristic":"Standard","difficulty":"Hard","events":5750,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":179.024,"paritySummary":{"errors":11,"warns":12,"resets":0}},{"njs":14.0,"offset":0.0,"notes":668,"bombs":0,"obstacles":41,"nps":3.731,"length":367.0,"characteristic":"Standard","difficulty":"Expert","events":5750,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":179.024,"paritySummary":{"errors":20,"warns":19,"resets":0}},{"njs":16.0,"offset":0.0,"notes":720,"bombs":0,"obstacles":41,"nps":4.022,"length":367.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":5750,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":179.024,"paritySummary":{"errors":18,"warns":18,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/bf166123a88a801f41aed10cff6c36f9f11f4cf3.zip","coverURL":"https://cdn.beatsaver.com/bf166123a88a801f41aed10cff6c36f9f11f4cf3.jpg","previewURL":"https://cdn.beatsaver.com/bf166123a88a801f41aed10cff6c36f9f11f4cf3.mp3"}],"createdAt":"2019-05-29T18:36:45Z","updatedAt":"2019-05-29T18:36:45Z","lastPublishedAt":"2019-05-29T18:36:45Z"},{"id":"1362d","name":"Ghost Choir - Louie Zong (modchart)","description":"This is a relaxing modchart and a technical proof of concept. If you haven't played my modchart Dondante yet, please check it out: https://beatsaver.com/beatmap/123b5\r\n\r\nThe map requires the mods Noodle Extensions and Chroma. If Noodle Extensions is not available yet on ModAssistant, you can get the latest release at https://github.com/Aeroluna/NoodleExtensions/releases/tag/v1.3.5\r\n\r\nTips for a better experience:\r\n- Disable static lights; there are no lights anyway\r\n- Hide the HUD\r\n- Turn the SFX volume down (0 or low value like 0.2)\r\n- Enable bloom post-processing\r\n\r\nPreview: https://youtu.be/XC7RY9C_EHs\r\n\r\nI adapted this from Louie Zong's original animation: https://youtu.be/kXF3VYYa5TI\r\n\r\n","uploader":{"id":4288814,"name":"nyri0","uniqueSet":true,"hash":"5e792df416c9680006086a78","avatar":"https://cdn.beatsaver.com/avatar/396715033125584907.png","type":"DISCORD"},"metadata":{"bpm":67.0,"duration":90,"songName":"Ghost Choir","songSubName":"","songAuthorName":"Louie Zong","levelAuthorName":"nyri0"},"stats":{"plays":0,"downloads":1938,"upvotes":663,"downvotes":3,"score":0.9255},"uploaded":"2021-01-30T12:31:29.825Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"1d373506c0b2b82867411f18696a1ad53d4ea01d","key":"1362d","state":"Published","createdAt":"2021-01-30T12:31:29.825Z","sageScore":2,"diffs":[{"njs":14.0,"offset":0.0,"notes":138,"bombs":0,"obstacles":1460,"nps":1.684,"length":91.5,"characteristic":"Standard","difficulty":"Hard","events":5,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":81.94,"paritySummary":{"errors":4,"warns":3,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/1d373506c0b2b82867411f18696a1ad53d4ea01d.zip","coverURL":"https://cdn.beatsaver.com/1d373506c0b2b82867411f18696a1ad53d4ea01d.jpg","previewURL":"https://cdn.beatsaver.com/1d373506c0b2b82867411f18696a1ad53d4ea01d.mp3"}],"createdAt":"2021-01-30T12:31:29.825Z","updatedAt":"2021-01-30T12:31:29.825Z","lastPublishedAt":"2021-01-30T12:31:29.825Z"},{"id":"f91e","name":"Who's Laughing Now - Ava Max","description":"Surprise, it's a slow pop song and it doesn't have sliders!\nGoing back to my roots with this one just because I love the song and I wanted to rank a pop song in quite a while anyways.\n\nThank you for the mod Trolav!\n\nAs always, I'm open to feedback on discord @Teuflum#5982.","uploader":{"id":68740,"name":"Teuflum","uniqueSet":true,"hash":"5cff0b7498cc5a672c851a6b","avatar":"https://cdn.beatsaver.com/avatar/114706869460664326.png","type":"DISCORD"},"metadata":{"bpm":92.0,"duration":181,"songName":"Who's Laughing Now","songSubName":"","songAuthorName":"Ava Max","levelAuthorName":"Teuflum"},"stats":{"plays":0,"downloads":11683,"upvotes":1652,"downvotes":40,"score":0.9255},"uploaded":"2020-10-04T11:45:39.424Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"559113d5c4247438c6ecad852c61d03d79396af1","key":"f91e","state":"Published","createdAt":"2020-10-04T11:45:39.424Z","sageScore":7,"diffs":[{"njs":12.0,"offset":0.0,"notes":286,"bombs":19,"obstacles":139,"nps":1.636,"length":268.0,"characteristic":"Standard","difficulty":"Easy","events":2852,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":174.783,"paritySummary":{"errors":3,"warns":0,"resets":1},"stars":0.96},{"njs":13.0,"offset":-0.25,"notes":344,"bombs":19,"obstacles":139,"nps":1.968,"length":268.0,"characteristic":"Standard","difficulty":"Normal","events":2852,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":174.783,"paritySummary":{"errors":0,"warns":0,"resets":2},"stars":1.32},{"njs":14.0,"offset":0.5,"notes":545,"bombs":20,"obstacles":126,"nps":3.118,"length":268.0,"characteristic":"Standard","difficulty":"Hard","events":2852,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":174.783,"paritySummary":{"errors":0,"warns":0,"resets":2},"stars":1.96},{"njs":15.0,"offset":0.25,"notes":703,"bombs":20,"obstacles":93,"nps":4.022,"length":268.0,"characteristic":"Standard","difficulty":"Expert","events":2852,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":174.783,"paritySummary":{"errors":0,"warns":0,"resets":0},"stars":2.83},{"njs":17.0,"offset":0.1,"notes":727,"bombs":20,"obstacles":93,"nps":4.159,"length":268.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":2852,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":174.783,"paritySummary":{"errors":0,"warns":0,"resets":0},"stars":4.02}],"downloadURL":"https://cdn.beatsaver.com/559113d5c4247438c6ecad852c61d03d79396af1.zip","coverURL":"https://cdn.beatsaver.com/559113d5c4247438c6ecad852c61d03d79396af1.jpg","previewURL":"https://cdn.beatsaver.com/559113d5c4247438c6ecad852c61d03d79396af1.mp3"}],"createdAt":"2020-10-04T11:45:39.424Z","updatedAt":"2021-09-20T15:00:35.623946Z","lastPublishedAt":"2020-10-04T11:45:39.424Z"},{"id":"4fba","name":"Mirror Mirror [One Saber] (RWBY: Volume 1 Soundtrack) - Jeff Williams ft. Casey Lee Williams","description":"My first one saber map! Can't believe it took me 250 maps before I started making even 1 one saber map. Trying out one saber mapping with the first RWBY song that I mapped. No promises, but I might do more one saber RWBY maps if this takes off. Map comes with custom Atlas Blue and Snow White colors","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":146.0,"duration":175,"songName":"Mirror Mirror (One Saber)","songSubName":"Jeff Williams ft. Casey Lee Williams","songAuthorName":"Joetastic","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":3363,"upvotes":760,"downvotes":6,"score":0.9255},"uploaded":"2019-05-29T13:04:18Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"4cb8bba2e14169819d61a4ccb69adba7b59d7f7a","key":"4fba","state":"Published","createdAt":"2019-05-29T13:04:18Z","sageScore":5,"diffs":[{"njs":12.0,"offset":0.0,"notes":352,"bombs":0,"obstacles":8,"nps":2.185,"length":391.993,"characteristic":"OneSaber","difficulty":"Expert","events":581,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":161.093,"paritySummary":{"errors":15,"warns":22,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/4cb8bba2e14169819d61a4ccb69adba7b59d7f7a.zip","coverURL":"https://cdn.beatsaver.com/4cb8bba2e14169819d61a4ccb69adba7b59d7f7a.jpg","previewURL":"https://cdn.beatsaver.com/4cb8bba2e14169819d61a4ccb69adba7b59d7f7a.mp3"}],"createdAt":"2019-05-29T13:04:18Z","updatedAt":"2019-05-29T13:04:18Z","lastPublishedAt":"2019-05-29T13:04:18Z"},{"id":"447a","name":"AIAIAI","description":"Twitter: https://twitter.com/Dack731","uploader":{"id":4285250,"name":"dack","uniqueSet":true,"hash":"5cff0b7598cc5a672c852c6f","avatar":"https://cdn.beatsaver.com/avatar/297344689798119424.png","type":"DISCORD"},"metadata":{"bpm":128.0,"duration":192,"songName":"AIAIAI (feat. Yasutaka Nakata)","songSubName":"Kizuna AI","songAuthorName":"Dack","levelAuthorName":"Dack"},"stats":{"plays":0,"downloads":1261,"upvotes":1434,"downvotes":31,"score":0.9255},"uploaded":"2019-04-09T11:00:10Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"174dbef7bfdd791378582d4e7b46f9d652ba44d8","key":"447a","state":"Published","createdAt":"2019-04-09T11:00:10Z","sageScore":4,"diffs":[{"njs":14.0,"offset":0.0,"notes":466,"bombs":8,"obstacles":15,"nps":2.556,"length":389.0,"characteristic":"Standard","difficulty":"Expert","events":715,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":182.344,"paritySummary":{"errors":35,"warns":29,"resets":1}}],"downloadURL":"https://cdn.beatsaver.com/174dbef7bfdd791378582d4e7b46f9d652ba44d8.zip","coverURL":"https://cdn.beatsaver.com/174dbef7bfdd791378582d4e7b46f9d652ba44d8.jpg","previewURL":"https://cdn.beatsaver.com/174dbef7bfdd791378582d4e7b46f9d652ba44d8.mp3"}],"createdAt":"2019-04-09T11:00:10Z","updatedAt":"2019-04-09T11:00:10Z","lastPublishedAt":"2019-04-09T11:00:10Z"},{"id":"d35a","name":"[FUTURE FUNK PACK] Windy Summer (Night Tempo 100% Pure Remastered)","description":"FUTURE FUNK MAP PACK\n2 songs uploaded everyday through August 10th - 14th!\n\nThese first two songs are originally sung by Anri, one of my favorite City Pop artist. \n\nPlease look forward to the upcoming maps!\n\nDM any feedback on Discord\nETAN#8341","uploader":{"id":4235140,"name":"etan","uniqueSet":true,"hash":"5cff0b7798cc5a672c855775","avatar":"https://cdn.beatsaver.com/avatar/136373107559497728.png","type":"DISCORD"},"metadata":{"bpm":120.0,"duration":190,"songName":"Windy Summer","songSubName":"(Night Tempo 100% Pure Remastered)","songAuthorName":"Anri","levelAuthorName":"ETAN"},"stats":{"plays":0,"downloads":4185,"upvotes":753,"downvotes":6,"score":0.9253},"uploaded":"2020-08-10T17:48:34.173Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"dc259cc74cc52a6103c0c3f44b04549e9f555425","key":"d35a","state":"Published","createdAt":"2020-08-10T17:48:34.173Z","sageScore":6,"diffs":[{"njs":10.0,"offset":1.0,"notes":177,"bombs":0,"obstacles":30,"nps":0.982,"length":360.5,"characteristic":"Standard","difficulty":"Easy","events":11459,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":180.25,"paritySummary":{"errors":25,"warns":8,"resets":0}},{"njs":11.0,"offset":1.0,"notes":302,"bombs":0,"obstacles":29,"nps":1.675,"length":360.5,"characteristic":"Standard","difficulty":"Normal","events":11459,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":180.25,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":12.0,"offset":0.5,"notes":422,"bombs":0,"obstacles":29,"nps":2.335,"length":361.5,"characteristic":"Standard","difficulty":"Hard","events":11459,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":180.75,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":14.0,"offset":0.0,"notes":668,"bombs":0,"obstacles":27,"nps":3.696,"length":361.5,"characteristic":"Standard","difficulty":"Expert","events":11459,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":180.75,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":17.0,"offset":-0.5,"notes":877,"bombs":0,"obstacles":28,"nps":4.852,"length":361.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":11459,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":180.75,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/dc259cc74cc52a6103c0c3f44b04549e9f555425.zip","coverURL":"https://cdn.beatsaver.com/dc259cc74cc52a6103c0c3f44b04549e9f555425.jpg","previewURL":"https://cdn.beatsaver.com/dc259cc74cc52a6103c0c3f44b04549e9f555425.mp3"}],"createdAt":"2020-08-10T17:48:34.173Z","updatedAt":"2020-08-10T17:48:34.173Z","lastPublishedAt":"2020-08-10T17:48:34.173Z"},{"id":"3969","name":"Lukas Graham - 7 Years","description":"Trying out something new here and seeing how well a slower song performs in beat saber. I decided not to map an easy for this one due to the songs length and naturally slow pacing. I'm interested to know what you think though. Do you think slow songs are good for beat saber? Should I do more? etc...\r\n\r\nTime spent mapping: 13:52\r\nVideo Preview: https://www.youtube.com/watch?v=2JB4fn1npwQ","uploader":{"id":4785,"name":"stumi","uniqueSet":false,"hash":"5cff0b7398cc5a672c84f720","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro","type":"SIMPLE"},"metadata":{"bpm":120.0,"duration":235,"songName":"7 Years","songSubName":"Lukas Graham","songAuthorName":"Stumi","levelAuthorName":"stumi"},"stats":{"plays":0,"downloads":4425,"upvotes":2415,"downvotes":75,"score":0.9253},"uploaded":"2019-02-24T17:19:02Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"11621a2effc185bf6ae4c7526c9db8cf435fd9b2","key":"3969","state":"Published","createdAt":"2019-02-24T17:19:02Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":374,"bombs":0,"obstacles":36,"nps":1.645,"length":454.75,"characteristic":"Standard","difficulty":"Normal","events":1566,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":227.375,"paritySummary":{"errors":30,"warns":19,"resets":0}},{"njs":11.0,"offset":0.0,"notes":626,"bombs":0,"obstacles":23,"nps":2.753,"length":454.75,"characteristic":"Standard","difficulty":"Hard","events":1566,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":227.375,"paritySummary":{"errors":41,"warns":49,"resets":0}},{"njs":14.0,"offset":0.0,"notes":756,"bombs":0,"obstacles":23,"nps":3.325,"length":454.75,"characteristic":"Standard","difficulty":"Expert","events":1566,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":227.375,"paritySummary":{"errors":42,"warns":55,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/11621a2effc185bf6ae4c7526c9db8cf435fd9b2.zip","coverURL":"https://cdn.beatsaver.com/11621a2effc185bf6ae4c7526c9db8cf435fd9b2.jpg","previewURL":"https://cdn.beatsaver.com/11621a2effc185bf6ae4c7526c9db8cf435fd9b2.mp3"}],"createdAt":"2019-02-24T17:19:02Z","updatedAt":"2019-02-24T17:19:02Z","lastPublishedAt":"2019-02-24T17:19:02Z"},{"id":"157","name":"Seagulls!(Stop it Now)","description":"Normal/Hard/Expert (though overall they should all be fairly easy) Thought this would be a fun, lighthearted song to do. Song by Bad Lip Reading. (as sung by Yoda Luke and R2...kind of)","uploader":{"id":53109,"name":"paynter3d","uniqueSet":true,"hash":"5cff0b7298cc5a672c84eb80","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84eb80?d=retro","type":"SIMPLE"},"metadata":{"bpm":120.0,"duration":192,"songName":"Seagulls!","songSubName":"(Stop It Now)","songAuthorName":"Bad Lip Reading","levelAuthorName":"paynter3d"},"stats":{"plays":0,"downloads":2917,"upvotes":1985,"downvotes":55,"score":0.9253},"uploaded":"2018-05-20T20:57:46Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"055e8f8f8fabefcf12bbb6c50e2f78d666d619bf","key":"157","state":"Published","createdAt":"2018-05-20T20:57:46Z","sageScore":3,"diffs":[{"njs":10.0,"offset":0.0,"notes":383,"bombs":0,"obstacles":37,"nps":2.037,"length":376.0,"characteristic":"Standard","difficulty":"Normal","events":622,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":188.0,"paritySummary":{"errors":95,"warns":61,"resets":0}},{"njs":10.0,"offset":0.0,"notes":460,"bombs":0,"obstacles":37,"nps":2.447,"length":376.0,"characteristic":"Standard","difficulty":"Hard","events":622,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":188.0,"paritySummary":{"errors":116,"warns":58,"resets":0}},{"njs":10.0,"offset":0.0,"notes":628,"bombs":64,"obstacles":37,"nps":3.34,"length":376.0,"characteristic":"Standard","difficulty":"Expert","events":626,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":188.0,"paritySummary":{"errors":86,"warns":105,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/055e8f8f8fabefcf12bbb6c50e2f78d666d619bf.zip","coverURL":"https://cdn.beatsaver.com/055e8f8f8fabefcf12bbb6c50e2f78d666d619bf.jpg","previewURL":"https://cdn.beatsaver.com/055e8f8f8fabefcf12bbb6c50e2f78d666d619bf.mp3"}],"createdAt":"2018-05-20T20:57:46Z","updatedAt":"2018-05-20T20:57:46Z","lastPublishedAt":"2018-05-20T20:57:46Z"},{"id":"1a0b9","name":"[Electro Swing Pack] Caravan Palace - Lone Digger","description":"Nixie Presents: Electro Swing Pack!\n\n10 electro swing songs with expert and expert+ diffs to make your booty swing!\n\nGet The Pack: \nhttps://bsaber.com/electro-swing-pack/\n\nMap Gameplay:\nhttps://youtu.be/DF_ZrKY3LfY\n\nComplete Pack Playthrough:\nhttps://youtu.be/yj9rw4MEh7s\n\nHeyya! After looking for some dancey electro swing maps, I noticed that there barely are any!\nSo I took matters into my own hands, learning mapping basically from scratch,\nscrapping my first failed attempts and then finally making a map that was good.\nI found it so fun that I ended up making 9 more maps,\nand fine tuned them with the help of the testplayers in BSMG,\nas well as the lovely curators from the bsaber discord.\n\nHuge thanks in particular to:\nMonstor, Bearly, Noxn, Bullet, Vaser888, Tocxx, Jafdy, Storm Knight and Pixelguy!\n\nIf you want to talk to me, here is my Discord:\nNixie.Korten#6944","uploader":{"id":4286374,"name":"nixiekorten","uniqueSet":true,"hash":"6096752e12772e0006e2f7e6","avatar":"https://cdn.beatsaver.com/avatar/840550221690699776.png","type":"DISCORD"},"metadata":{"bpm":124.0,"duration":171,"songName":"Lone Digger","songSubName":"","songAuthorName":"Caravan Palace","levelAuthorName":"Nixie.Korten"},"stats":{"plays":0,"downloads":19552,"upvotes":1165,"downvotes":21,"score":0.925},"uploaded":"2021-07-08T15:25:28.524Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"f89d7a02f16dbbe3c957fd56e35844ab7f23f532","key":"1a0b9","state":"Published","createdAt":"2021-07-08T15:25:28.524Z","sageScore":5,"diffs":[{"njs":16.0,"offset":-0.25,"notes":434,"bombs":0,"obstacles":0,"nps":2.611,"length":343.5,"characteristic":"Standard","difficulty":"Expert","events":1448,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":166.21,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":19.0,"offset":0.25,"notes":891,"bombs":0,"obstacles":4,"nps":5.299,"length":347.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":1448,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":168.145,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/f89d7a02f16dbbe3c957fd56e35844ab7f23f532.zip","coverURL":"https://cdn.beatsaver.com/f89d7a02f16dbbe3c957fd56e35844ab7f23f532.jpg","previewURL":"https://cdn.beatsaver.com/f89d7a02f16dbbe3c957fd56e35844ab7f23f532.mp3"}],"createdAt":"2021-07-08T15:25:28.524Z","updatedAt":"2021-07-08T15:25:28.524Z","lastPublishedAt":"2021-07-08T15:25:28.524Z"},{"id":"5d24","name":"[Anniversary] Face My Fears - Hikaru Utadu & Skrillex [BennyDaBeast]","description":"Part of the Anniversary Song Pack","uploader":{"id":37070,"name":"anniversaryteam","uniqueSet":true,"hash":"5cff0b7798cc5a672c8565a3","avatar":"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro","type":"SIMPLE"},"metadata":{"bpm":160.0,"duration":212,"songName":"Face My Fears","songSubName":"","songAuthorName":"Hikaru Utada & Skrillex","levelAuthorName":"BennyDaBeast"},"stats":{"plays":0,"downloads":4932,"upvotes":2031,"downvotes":58,"score":0.925},"uploaded":"2019-08-16T01:48:04.848Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"460fcbe6916bd64eb31ff65a03e4d46d4773e31c","key":"5d24","state":"Published","createdAt":"2019-08-16T01:48:04.848Z","sageScore":8,"diffs":[{"njs":10.0,"offset":0.0,"notes":390,"bombs":0,"obstacles":0,"nps":1.912,"length":544.0,"characteristic":"Standard","difficulty":"Easy","events":2297,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":204.0,"paritySummary":{"errors":85,"warns":29,"resets":0}},{"njs":10.0,"offset":0.0,"notes":455,"bombs":0,"obstacles":0,"nps":2.23,"length":544.0,"characteristic":"Standard","difficulty":"Normal","events":2297,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":204.0,"paritySummary":{"errors":80,"warns":29,"resets":0}},{"njs":12.0,"offset":-1.0,"notes":567,"bombs":0,"obstacles":0,"nps":2.779,"length":544.0,"characteristic":"Standard","difficulty":"Hard","events":2298,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":204.0,"paritySummary":{"errors":88,"warns":36,"resets":0}},{"njs":12.0,"offset":-1.0,"notes":776,"bombs":0,"obstacles":0,"nps":3.804,"length":544.0,"characteristic":"Standard","difficulty":"Expert","events":2297,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":204.0,"paritySummary":{"errors":105,"warns":60,"resets":0}},{"njs":15.0,"offset":0.4,"notes":921,"bombs":0,"obstacles":0,"nps":4.515,"length":544.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":2297,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":204.0,"paritySummary":{"errors":102,"warns":83,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/460fcbe6916bd64eb31ff65a03e4d46d4773e31c.zip","coverURL":"https://cdn.beatsaver.com/460fcbe6916bd64eb31ff65a03e4d46d4773e31c.jpg","previewURL":"https://cdn.beatsaver.com/460fcbe6916bd64eb31ff65a03e4d46d4773e31c.mp3"}],"createdAt":"2019-08-16T01:48:04.848Z","updatedAt":"2019-08-16T01:48:04.848Z","lastPublishedAt":"2019-08-16T01:48:04.848Z"},{"id":"269f","name":"Amusement Park - Keigo Hoashi [NieR: Automata]","description":"Expert Gameplay: https://www.youtube.com/watch?v=gOeGoxKR7fI&feature=youtu.be\r\nExpert and Expert+ are very similar, though Expert+ is a tad harder.\r\n\r\nSong by Keigo Hoashi as NieR:Automata OST","uploader":{"id":4286005,"name":"mandynasty","uniqueSet":true,"hash":"5cff0b7398cc5a672c84ffaa","avatar":"https://cdn.beatsaver.com/avatar/307589087030673408.png","type":"DISCORD"},"metadata":{"bpm":120.0,"duration":266,"songName":"Amusement Park","songSubName":"Keigo Hoashi","songAuthorName":"ManDynasty","levelAuthorName":"ManDynasty"},"stats":{"plays":0,"downloads":3394,"upvotes":1832,"downvotes":49,"score":0.925},"uploaded":"2018-12-18T15:57:22Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"00151f9ef33d55245bb7cfc9756e223b7183ff65","key":"269f","state":"Published","createdAt":"2018-12-18T15:57:22Z","sageScore":2,"diffs":[{"njs":9.0,"offset":0.0,"notes":396,"bombs":0,"obstacles":242,"nps":1.571,"length":504.0,"characteristic":"Standard","difficulty":"Normal","events":1606,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":252.0,"paritySummary":{"errors":74,"warns":23,"resets":0}},{"njs":10.0,"offset":0.0,"notes":528,"bombs":0,"obstacles":272,"nps":2.095,"length":504.0,"characteristic":"Standard","difficulty":"Hard","events":1606,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":252.0,"paritySummary":{"errors":42,"warns":49,"resets":0}},{"njs":14.0,"offset":0.0,"notes":888,"bombs":0,"obstacles":102,"nps":3.524,"length":504.0,"characteristic":"Standard","difficulty":"Expert","events":1606,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":252.0,"paritySummary":{"errors":86,"warns":77,"resets":0}},{"njs":14.0,"offset":0.0,"notes":931,"bombs":0,"obstacles":118,"nps":3.588,"length":519.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":1606,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":259.5,"paritySummary":{"errors":69,"warns":56,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/00151f9ef33d55245bb7cfc9756e223b7183ff65.zip","coverURL":"https://cdn.beatsaver.com/00151f9ef33d55245bb7cfc9756e223b7183ff65.jpg","previewURL":"https://cdn.beatsaver.com/00151f9ef33d55245bb7cfc9756e223b7183ff65.mp3"}],"createdAt":"2018-12-18T15:57:22Z","updatedAt":"2018-12-18T15:57:22Z","lastPublishedAt":"2018-12-18T15:57:22Z"},{"id":"6ace","name":"Flower Dance - DJ Okawari","description":"There it is!!!! Hope you all enjoy this <3 \nCollabed with kuritsadbs on this map as he worked on the lights and he did amazing job on them! \nI might make 1 saber mode later on if i see that many liked this one :D\nCheck the map here: https://www.youtube.com/watch?v=vTPssZ0rKyI&feature=youtu.be","uploader":{"id":1708,"name":"layanmeta","uniqueSet":true,"hash":"5cff0b7698cc5a672c8539a1","avatar":"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8539a1?d=retro","type":"SIMPLE"},"metadata":{"bpm":200.0,"duration":238,"songName":" Flower Dance","songSubName":"","songAuthorName":"DJ Okawari","levelAuthorName":"Layanmeta w/ KuritsaDBS"},"stats":{"plays":0,"downloads":2467,"upvotes":1257,"downvotes":25,"score":0.9248},"uploaded":"2019-10-19T17:05:33.835Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"5d4b7dfbc7370400f54f02b76568bacd8497b3e9","key":"6ace","state":"Published","createdAt":"2019-10-19T17:05:33.835Z","sageScore":8,"diffs":[{"njs":12.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"Standard","difficulty":"Easy","events":2030,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":15.0,"offset":0.4,"notes":1225,"bombs":0,"obstacles":70,"nps":5.206,"length":784.375,"characteristic":"Standard","difficulty":"ExpertPlus","events":2030,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":235.313,"paritySummary":{"errors":12,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/5d4b7dfbc7370400f54f02b76568bacd8497b3e9.zip","coverURL":"https://cdn.beatsaver.com/5d4b7dfbc7370400f54f02b76568bacd8497b3e9.jpg","previewURL":"https://cdn.beatsaver.com/5d4b7dfbc7370400f54f02b76568bacd8497b3e9.mp3"}],"createdAt":"2019-10-19T17:05:33.835Z","updatedAt":"2019-10-19T17:05:33.835Z","lastPublishedAt":"2019-10-19T17:05:33.835Z"},{"id":"e7cd","name":"[NoodleGames Vol.2] Last Surprise - Persona 5","description":"The Ramen Noodle group is back again to bring you a map pack full of our favorite video game soundtracks and game-inspired music!\n\nHere's one of my 4 Persona maps for the pack! Hope you enjoy.","uploader":{"id":15368,"name":"theab","uniqueSet":true,"hash":"5cff0b7698cc5a672c853a14","avatar":"https://www.gravatar.com/avatar/5cff0b7698cc5a672c853a14?d=retro","type":"SIMPLE"},"metadata":{"bpm":123.0,"duration":210,"songName":"Last Surprise","songSubName":"","songAuthorName":"Shoji Meguro","levelAuthorName":"Ab"},"stats":{"plays":0,"downloads":5978,"upvotes":1048,"downvotes":17,"score":0.9247},"uploaded":"2020-09-10T19:19:34.152Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"b5e4c4a65fa8c55a4c5a2b1d7681c31f301d5449","key":"e7cd","state":"Published","createdAt":"2020-09-10T19:19:34.152Z","sageScore":2,"diffs":[{"njs":13.0,"offset":0.0,"notes":650,"bombs":0,"obstacles":2,"nps":3.173,"length":420.0,"characteristic":"Standard","difficulty":"Hard","events":3292,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":204.878,"paritySummary":{"errors":12,"warns":8,"resets":0}},{"njs":17.0,"offset":-0.2,"notes":861,"bombs":0,"obstacles":0,"nps":4.203,"length":420.0,"characteristic":"Standard","difficulty":"Expert","events":3292,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":204.878,"paritySummary":{"errors":8,"warns":9,"resets":0}},{"njs":18.0,"offset":-0.2,"notes":983,"bombs":0,"obstacles":7,"nps":4.798,"length":420.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":3250,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":204.878,"paritySummary":{"errors":8,"warns":8,"resets":0}},{"njs":16.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"Lightshow","difficulty":"ExpertPlus","events":3249,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/b5e4c4a65fa8c55a4c5a2b1d7681c31f301d5449.zip","coverURL":"https://cdn.beatsaver.com/b5e4c4a65fa8c55a4c5a2b1d7681c31f301d5449.jpg","previewURL":"https://cdn.beatsaver.com/b5e4c4a65fa8c55a4c5a2b1d7681c31f301d5449.mp3"}],"createdAt":"2020-09-10T19:19:34.152Z","updatedAt":"2020-09-10T19:19:34.152Z","lastPublishedAt":"2020-09-10T19:19:34.152Z"},{"id":"1a0b8","name":"[Electro Swing Pack] Wolfgang Lohr & The Swinghoppers - Party Like It's 1920","description":"Nixie Presents: Electro Swing Pack!\n\n10 electro swing songs with expert and expert+ diffs to make your booty swing!\n\nGet The Pack: \nhttps://bsaber.com/electro-swing-pack/\n\nMap Gameplay:\nhttps://youtu.be/ye22W_xrXnk\n\nComplete Pack Playthrough:\nhttps://youtu.be/yj9rw4MEh7s\n\nHeyya! After looking for some dancey electro swing maps, I noticed that there barely are any!\nSo I took matters into my own hands, learning mapping basically from scratch,\nscrapping my first failed attempts and then finally making a map that was good.\nI found it so fun that I ended up making 9 more maps,\nand fine tuned them with the help of the testplayers in BSMG,\nas well as the lovely curators from the bsaber discord.\n\nHuge thanks in particular to:\nMonstor, Bearly, Noxn, Bullet, Vaser888, Tocxx, Jafdy, Storm Knight and Pixelguy!\n\nIf you want to talk to me, here is my Discord:\nNixie.Korten#6944","uploader":{"id":4286374,"name":"nixiekorten","uniqueSet":true,"hash":"6096752e12772e0006e2f7e6","avatar":"https://cdn.beatsaver.com/avatar/840550221690699776.png","type":"DISCORD"},"metadata":{"bpm":120.0,"duration":187,"songName":"Party Like It's 1920","songSubName":"","songAuthorName":"The Swinghoppers & Wolfgang Lohr","levelAuthorName":"Nixie.Korten"},"stats":{"plays":0,"downloads":13163,"upvotes":670,"downvotes":4,"score":0.9246},"uploaded":"2021-07-08T15:25:28.451Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"973bab980b568e41b0a17a772e61377b01ef85ec","key":"1a0b8","state":"Published","createdAt":"2021-07-08T15:25:28.451Z","sageScore":4,"diffs":[{"njs":16.0,"offset":-0.5,"notes":556,"bombs":0,"obstacles":0,"nps":3.063,"length":363.0,"characteristic":"Standard","difficulty":"Expert","events":2057,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":181.5,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":19.0,"offset":0.25,"notes":850,"bombs":0,"obstacles":0,"nps":4.683,"length":363.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":2057,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":181.5,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/973bab980b568e41b0a17a772e61377b01ef85ec.zip","coverURL":"https://cdn.beatsaver.com/973bab980b568e41b0a17a772e61377b01ef85ec.jpg","previewURL":"https://cdn.beatsaver.com/973bab980b568e41b0a17a772e61377b01ef85ec.mp3"}],"createdAt":"2021-07-08T15:25:28.451Z","updatedAt":"2021-07-08T15:25:28.451Z","lastPublishedAt":"2021-07-08T15:25:28.451Z"},{"id":"d60d","name":"[FUTURE FUNK PACK] Tokyo Chopp ft. Shiki​(​TMNS​)​ (Moe Shop Remix)","description":"FUTURE FUNK MAP PACK\n2 songs uploaded everyday through August 10th - 14th!\n\nThese last two Moe Shop songs brings a fresh spin on the Future Funk genre! This song is a Moe Shop remix of Hentai Dude's \"Tokyo Chopp\" and Tomoko Aran's \"Midnight Pretenders\" (1983.)\n\nThank you for playing! I hope you enjoyed the map pack!\n\nDM any feedback on Discord\nETAN#8341","uploader":{"id":4235140,"name":"etan","uniqueSet":true,"hash":"5cff0b7798cc5a672c855775","avatar":"https://cdn.beatsaver.com/avatar/136373107559497728.png","type":"DISCORD"},"metadata":{"bpm":117.0,"duration":188,"songName":"Tokyo Chopp ft. Shiki​(​TMNS​)​","songSubName":"(Moe Shop Remix)","songAuthorName":"Hentai Dude","levelAuthorName":"ETAN"},"stats":{"plays":0,"downloads":6396,"upvotes":1072,"downvotes":18,"score":0.9246},"uploaded":"2020-08-14T18:31:11.526Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"c82dfb89e2e5beb11c57c1d311e801f7d5dac978","key":"d60d","state":"Published","createdAt":"2020-08-14T18:31:11.526Z","sageScore":7,"diffs":[{"njs":10.0,"offset":1.5,"notes":155,"bombs":0,"obstacles":8,"nps":0.856,"length":353.0,"characteristic":"Standard","difficulty":"Easy","events":7757,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":181.026,"paritySummary":{"errors":29,"warns":0,"resets":0}},{"njs":10.0,"offset":1.0,"notes":291,"bombs":0,"obstacles":8,"nps":1.608,"length":353.0,"characteristic":"Standard","difficulty":"Normal","events":7757,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":181.026,"paritySummary":{"errors":3,"warns":0,"resets":0}},{"njs":12.0,"offset":0.5,"notes":377,"bombs":0,"obstacles":7,"nps":2.056,"length":357.5,"characteristic":"Standard","difficulty":"Hard","events":7757,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":183.333,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":14.0,"offset":0.0,"notes":565,"bombs":0,"obstacles":7,"nps":3.082,"length":357.5,"characteristic":"Standard","difficulty":"Expert","events":7757,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":183.333,"paritySummary":{"errors":1,"warns":0,"resets":0}},{"njs":17.0,"offset":-0.5,"notes":765,"bombs":0,"obstacles":7,"nps":4.173,"length":357.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":7757,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":183.333,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/c82dfb89e2e5beb11c57c1d311e801f7d5dac978.zip","coverURL":"https://cdn.beatsaver.com/c82dfb89e2e5beb11c57c1d311e801f7d5dac978.jpg","previewURL":"https://cdn.beatsaver.com/c82dfb89e2e5beb11c57c1d311e801f7d5dac978.mp3"}],"createdAt":"2020-08-14T18:31:11.526Z","updatedAt":"2020-08-14T18:31:11.526Z","lastPublishedAt":"2020-08-14T18:31:11.526Z"},{"id":"41e4","name":"Meant to Live - Switchfoot","description":"Easy, Normal, and Hard are all relatively easy, even for OST standards. Expert might have some tricky patterns, but the NPS is still well within OST standards so should still be manageable.\n\nhttps://youtu.be/zEK_j3aqn4g\n\nSo for my first song with fully English vocals, here's a classic from the early 2000's that you completely forgot about. I was actually sitting on this map for a while but decided to release it because I wanted a bit of variety.\n\nFollow me on Twitter u won't\nhttps://twitter.com/aggrogahu","uploader":{"id":4284613,"name":"aggrogahu","uniqueSet":true,"hash":"5cff0b7398cc5a672c84fdad","avatar":"https://cdn.beatsaver.com/avatar/158363872649150464.png","type":"DISCORD"},"metadata":{"bpm":150.0,"duration":200,"songName":"Meant to Live","songSubName":"Switchfoot","songAuthorName":"aggrogahu","levelAuthorName":"aggrogahu"},"stats":{"plays":0,"downloads":3605,"upvotes":937,"downvotes":13,"score":0.9246},"uploaded":"2019-03-30T02:30:46Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"d6675f644e47f84789a0376a746a2514e8e7b7ff","key":"41e4","state":"Published","createdAt":"2019-03-30T02:30:46Z","diffs":[{"njs":10.0,"offset":0.0,"notes":155,"bombs":0,"obstacles":11,"nps":0.859,"length":451.3,"characteristic":"Standard","difficulty":"Easy","events":576,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":180.52,"paritySummary":{"errors":45,"warns":4,"resets":0}},{"njs":11.0,"offset":0.0,"notes":262,"bombs":0,"obstacles":11,"nps":1.451,"length":451.3,"characteristic":"Standard","difficulty":"Normal","events":576,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":180.52,"paritySummary":{"errors":60,"warns":13,"resets":0}},{"njs":10.0,"offset":0.0,"notes":408,"bombs":0,"obstacles":46,"nps":2.26,"length":451.3,"characteristic":"Standard","difficulty":"Hard","events":576,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":180.52,"paritySummary":{"errors":50,"warns":29,"resets":0}},{"njs":12.0,"offset":0.0,"notes":630,"bombs":0,"obstacles":53,"nps":3.49,"length":451.3,"characteristic":"Standard","difficulty":"Expert","events":576,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":180.52,"paritySummary":{"errors":41,"warns":29,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/d6675f644e47f84789a0376a746a2514e8e7b7ff.zip","coverURL":"https://cdn.beatsaver.com/d6675f644e47f84789a0376a746a2514e8e7b7ff.jpg","previewURL":"https://cdn.beatsaver.com/d6675f644e47f84789a0376a746a2514e8e7b7ff.mp3"}],"createdAt":"2019-03-30T02:30:46Z","updatedAt":"2019-03-30T02:30:46Z","lastPublishedAt":"2019-03-30T02:30:46Z"},{"id":"7c0b","name":"[Bloq Busters Vol. 2] Au5 & Fractal - Smoke","description":"Expert+ Preview: https://www.youtube.com/watch?v=_mJXl15vv1c\n\nA sick song from their Secret Weapon EP! I hope I did it justice with this mapping.\n\nThis map is part of the Bloq Busters Vol. 2: Melodic Dubstep map pack comprised of maps from several mappers featuring artists such as Seven Lions, Jason Ross, Au5, Warriyo, and more! Grab it here: https://bsaber.com/bloq-busters-vol-2-melodic-dubstep/\n\nComments? Like it? Hate it? Let me know on Discord @Bloodcloak#5725!","uploader":{"id":71661,"name":"bloodcloak","uniqueSet":true,"hash":"5cff0b7698cc5a672c8551d3","avatar":"https://cdn.beatsaver.com/avatar/205707707187986442.png","type":"DISCORD"},"metadata":{"bpm":128.0,"duration":302,"songName":"Smoke","songSubName":"","songAuthorName":"Au5 & Fractal","levelAuthorName":"Bloodcloak"},"stats":{"plays":0,"downloads":2132,"upvotes":701,"downvotes":5,"score":0.9245},"uploaded":"2020-01-03T22:50:59.278Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"0bc6562a0bde3a933d656a514c67eeec88a315df","key":"7c0b","state":"Published","createdAt":"2020-01-03T22:50:59.278Z","sageScore":4,"diffs":[{"njs":12.0,"offset":0.6,"notes":687,"bombs":0,"obstacles":245,"nps":2.351,"length":623.5,"characteristic":"Standard","difficulty":"Hard","events":4233,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":292.266,"paritySummary":{"errors":2,"warns":2,"resets":0}},{"njs":16.0,"offset":-0.1,"notes":1074,"bombs":0,"obstacles":135,"nps":3.675,"length":623.5,"characteristic":"Standard","difficulty":"Expert","events":4233,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":292.266,"paritySummary":{"errors":3,"warns":3,"resets":0}},{"njs":20.0,"offset":0.6,"notes":1188,"bombs":0,"obstacles":122,"nps":4.065,"length":623.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":4227,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":292.266,"paritySummary":{"errors":1,"warns":1,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/0bc6562a0bde3a933d656a514c67eeec88a315df.zip","coverURL":"https://cdn.beatsaver.com/0bc6562a0bde3a933d656a514c67eeec88a315df.jpg","previewURL":"https://cdn.beatsaver.com/0bc6562a0bde3a933d656a514c67eeec88a315df.mp3"}],"createdAt":"2020-01-03T22:50:59.278Z","updatedAt":"2020-01-03T22:50:59.278Z","lastPublishedAt":"2020-01-03T22:50:59.278Z"},{"id":"5e05","name":"Dire Straits - Money For Nothing","description":"","uploader":{"id":4285018,"name":"majorpickle","uniqueSet":true,"hash":"5cff0b7398cc5a672c84f792","avatar":"https://cdn.beatsaver.com/avatar/450358937657671680.png","type":"DISCORD"},"metadata":{"bpm":136.0,"duration":243,"songName":"Money For Nothing","songSubName":"","songAuthorName":"Dire Straits","levelAuthorName":"Majorpickle"},"stats":{"plays":0,"downloads":2691,"upvotes":1068,"downvotes":18,"score":0.9245},"uploaded":"2019-08-20T03:07:14.232Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"b81b682921b291b731111f9a29d7bf9353ff1365","key":"5e05","state":"Published","createdAt":"2019-08-20T03:07:14.232Z","sageScore":6,"diffs":[{"njs":12.0,"offset":0.0,"notes":851,"bombs":0,"obstacles":60,"nps":3.8,"length":507.656,"characteristic":"Standard","difficulty":"Expert","events":2256,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":223.966,"paritySummary":{"errors":39,"warns":30,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/b81b682921b291b731111f9a29d7bf9353ff1365.zip","coverURL":"https://cdn.beatsaver.com/b81b682921b291b731111f9a29d7bf9353ff1365.jpg","previewURL":"https://cdn.beatsaver.com/b81b682921b291b731111f9a29d7bf9353ff1365.mp3"}],"createdAt":"2019-08-20T03:07:14.232Z","updatedAt":"2019-08-20T03:07:14.232Z","lastPublishedAt":"2019-08-20T03:07:14.232Z"},{"id":"a83b","name":"BAD APPLE!! [Punk Goes Pop Vol.2] - RichaadEB ft. Cristina Vee","description":"BAD APPLE!! is a metal cover by RichaadEB featuring voice actor and singer, Cristina Vee. This song was originally composed by Jun'ya Ota & Masayoshi Minoshima with vocals by Nomico.","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":138.0,"duration":301,"songName":"BAD APPLE!!","songSubName":"ft. Cristina Vee","songAuthorName":"RichaadEB","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":5636,"upvotes":1476,"downvotes":35,"score":0.9242},"uploaded":"2020-05-20T07:20:11.426Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"57d1004ac047bd554080c5bfdd6908743ebb9fd2","key":"a83b","state":"Published","createdAt":"2020-05-20T07:20:11.426Z","sageScore":3,"diffs":[{"njs":16.0,"offset":0.0,"notes":1649,"bombs":0,"obstacles":78,"nps":5.644,"length":672.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":9915,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":292.174,"paritySummary":{"errors":8,"warns":13,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/57d1004ac047bd554080c5bfdd6908743ebb9fd2.zip","coverURL":"https://cdn.beatsaver.com/57d1004ac047bd554080c5bfdd6908743ebb9fd2.jpg","previewURL":"https://cdn.beatsaver.com/57d1004ac047bd554080c5bfdd6908743ebb9fd2.mp3"}],"createdAt":"2020-05-20T07:20:11.426Z","updatedAt":"2020-05-20T07:20:11.426Z","lastPublishedAt":"2020-05-20T07:20:11.426Z"},{"id":"8b81","name":"Stonebank - To The Top","description":"https://www.youtube.com/watch?v=2DwhNw_pGrg","uploader":{"id":12996,"name":"rustic","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e8c4","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro","type":"SIMPLE"},"metadata":{"bpm":128.0,"duration":187,"songName":"To The Top","songSubName":"","songAuthorName":"Stonebank","levelAuthorName":"Rustic"},"stats":{"plays":0,"downloads":1287,"upvotes":897,"downvotes":12,"score":0.9242},"uploaded":"2020-02-28T15:53:21.930Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"7afc56e020bb12f1e91dc99b1107df830299cc98","key":"8b81","state":"Published","createdAt":"2020-02-28T15:53:21.930Z","sageScore":5,"diffs":[{"njs":20.0,"offset":1.0,"notes":491,"bombs":0,"obstacles":2922,"nps":2.942,"length":356.0,"characteristic":"Standard","difficulty":"Expert","events":5581,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":166.875,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/7afc56e020bb12f1e91dc99b1107df830299cc98.zip","coverURL":"https://cdn.beatsaver.com/7afc56e020bb12f1e91dc99b1107df830299cc98.jpg","previewURL":"https://cdn.beatsaver.com/7afc56e020bb12f1e91dc99b1107df830299cc98.mp3"}],"createdAt":"2020-02-28T15:53:21.930Z","updatedAt":"2020-02-28T15:53:21.930Z","lastPublishedAt":"2020-02-28T15:53:21.930Z"},{"id":"1c00","name":"Chop Suey - System of a Down","description":"4th map. Special thanks to Kolezan for doing the lighting and helping me out with the audio on this one. He did a great job. Also thanks to Crankor, TurtleSquared, and all my other play testers for multiple play tests and a lot of good feedback. Also this map would not have been possible without squeaksies' MediocreMapper!\nTIPS:\n\n(Expert/Expert+) In the final flow pattern in the last slow section of the song, the corner crouch is meant to make you do a sort of side lunge with that lunging side's saber swinging out wide behind you for balance. I have found that to be the smoothest flow, though it's not technically necessary.\n\n(Expert+ only) The \"climax\" point of each pattern in the ending flow is made to be an optional behind-the-back cross slash. You'll know it by the dotted cubes in that section. The backslash hand hits the dotted cubes. This move is fun but may take some practice to get down. (Hint: keep your eye on the top diagonal cube.)\n\nSwing those arms for the big hits.\n\nhttps://youtu.be/6NJh98lDJVo","uploader":{"id":27595,"name":"baxter395","uniqueSet":true,"hash":"5cff0b7598cc5a672c852f7b","avatar":"https://www.gravatar.com/avatar/5cff0b7598cc5a672c852f7b?d=retro","type":"SIMPLE"},"metadata":{"bpm":127.0,"duration":204,"songName":"Chop Suey","songSubName":"System of a Down","songAuthorName":"baxter395","levelAuthorName":"baxter395"},"stats":{"plays":0,"downloads":12175,"upvotes":8010,"downvotes":385,"score":0.9242},"uploaded":"2018-10-25T00:30:35Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"1b6f9e844d81ff0f6ee6feed62331a3d229be2e8","key":"1c00","state":"Published","createdAt":"2018-10-25T00:30:35Z","sageScore":-2,"diffs":[{"njs":10.0,"offset":0.0,"notes":497,"bombs":0,"obstacles":11,"nps":2.601,"length":404.463,"characteristic":"Standard","difficulty":"Normal","events":1156,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":191.085,"paritySummary":{"errors":75,"warns":56,"resets":0}},{"njs":11.0,"offset":0.0,"notes":687,"bombs":0,"obstacles":34,"nps":3.595,"length":404.463,"characteristic":"Standard","difficulty":"Hard","events":1156,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":191.085,"paritySummary":{"errors":57,"warns":89,"resets":0}},{"njs":12.0,"offset":0.0,"notes":804,"bombs":0,"obstacles":62,"nps":4.208,"length":404.463,"characteristic":"Standard","difficulty":"Expert","events":1156,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":191.085,"paritySummary":{"errors":64,"warns":100,"resets":0}},{"njs":13.0,"offset":0.0,"notes":842,"bombs":0,"obstacles":54,"nps":4.406,"length":404.463,"characteristic":"Standard","difficulty":"ExpertPlus","events":1156,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":191.085,"paritySummary":{"errors":58,"warns":110,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/1b6f9e844d81ff0f6ee6feed62331a3d229be2e8.zip","coverURL":"https://cdn.beatsaver.com/1b6f9e844d81ff0f6ee6feed62331a3d229be2e8.jpg","previewURL":"https://cdn.beatsaver.com/1b6f9e844d81ff0f6ee6feed62331a3d229be2e8.mp3"}],"createdAt":"2018-10-25T00:30:35Z","updatedAt":"2018-10-25T00:30:35Z","lastPublishedAt":"2018-10-25T00:30:35Z"},{"id":"b724","name":"Falling - Dropgun x Asketa & Natan Chaim","description":"reupload #1 - improved the difficulty spread to not have an extreme jump between the Expert and Expert+ slot\n\nOnly some of the lower diffs changed on here, the E+ slot (Rising) is still the same as I got very positive feedback on that diff which I'm very happy about <3\nThe diff spread should be better now, so it is hopefully more enjoyable for all skill levels whenever it gets ranked.\n\noriginal description:\nhaha lyrics go brrrr\njust a little bit though\n\nalso I lighted manually which I haven't done for an eternity, hope you don't go blind or something\n\nbig thank you to Skeelie for modding this :)\n\nTeuflum#5982 for any feedback on discord.","uploader":{"id":68740,"name":"Teuflum","uniqueSet":true,"hash":"5cff0b7498cc5a672c851a6b","avatar":"https://cdn.beatsaver.com/avatar/114706869460664326.png","type":"DISCORD"},"metadata":{"bpm":126.0,"duration":194,"songName":"Falling","songSubName":"","songAuthorName":"Dropgun x Asketa & Natan Chaim","levelAuthorName":"Teuflum"},"stats":{"plays":0,"downloads":8962,"upvotes":3035,"downvotes":109,"score":0.9241},"uploaded":"2020-06-28T11:22:49.373Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"2dddd6672560cb2c1d4c689ff31b5ea58ef1641e","key":"b724","state":"Published","createdAt":"2020-06-28T11:22:49.373Z","sageScore":7,"diffs":[{"njs":12.0,"offset":0.5,"notes":454,"bombs":0,"obstacles":65,"nps":2.432,"length":392.0,"characteristic":"Standard","difficulty":"Easy","events":9228,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":186.667,"paritySummary":{"errors":12,"warns":2,"resets":0},"stars":1.35},{"njs":14.0,"offset":0.0,"notes":672,"bombs":12,"obstacles":65,"nps":3.6,"length":392.0,"characteristic":"Standard","difficulty":"Normal","events":9228,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":186.667,"paritySummary":{"errors":0,"warns":0,"resets":4},"stars":2.28},{"njs":17.0,"offset":-0.4,"notes":973,"bombs":20,"obstacles":65,"nps":5.213,"length":392.0,"characteristic":"Standard","difficulty":"Hard","events":9228,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":186.667,"paritySummary":{"errors":0,"warns":0,"resets":2},"stars":4.51},{"njs":20.0,"offset":0.325,"notes":1297,"bombs":16,"obstacles":39,"nps":6.948,"length":392.0,"characteristic":"Standard","difficulty":"Expert","events":9228,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":186.667,"paritySummary":{"errors":0,"warns":0,"resets":2},"stars":5.65},{"njs":22.0,"offset":0.1,"notes":1483,"bombs":16,"obstacles":39,"nps":7.945,"length":392.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":9228,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":186.667,"paritySummary":{"errors":2,"warns":0,"resets":4},"stars":7.83},{"njs":69.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"Lightshow","difficulty":"Easy","events":9228,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/2dddd6672560cb2c1d4c689ff31b5ea58ef1641e.zip","coverURL":"https://cdn.beatsaver.com/2dddd6672560cb2c1d4c689ff31b5ea58ef1641e.jpg","previewURL":"https://cdn.beatsaver.com/2dddd6672560cb2c1d4c689ff31b5ea58ef1641e.mp3"}],"createdAt":"2020-06-28T11:22:49.373Z","updatedAt":"2021-09-20T15:01:27.178739Z","lastPublishedAt":"2020-06-28T11:22:49.373Z"},{"id":"7e92","name":"Adventure of a Lifetime - Coldplay","description":"This song is one that i really love. Even though its different from most of the maps i posted so far, i still mapped it anyway because i like it.\n\nAll difficulties included, Expert+ is sort of on the lower end of expert+ maps.\n\nThanks to Helen Carnate, Sorukun, and Kolezan for helping me playtest the map! \n\nHave fun going on the Adventure of a Lifetime!","uploader":{"id":4284197,"name":"timeweaver","uniqueSet":true,"hash":"5d47d586c5301900060b2f6c","avatar":"https://cdn.beatsaver.com/avatar/607399708121366529.png","type":"DISCORD"},"metadata":{"bpm":112.0,"duration":264,"songName":"Adventure of a Lifetime","songSubName":"","songAuthorName":"Coldplay","levelAuthorName":"Timeweaver"},"stats":{"plays":0,"downloads":4599,"upvotes":1352,"downvotes":30,"score":0.9241},"uploaded":"2020-01-15T05:33:28.055Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"cbfe28de7f63634096dd8ef34648753147f3f65d","key":"7e92","state":"Published","createdAt":"2020-01-15T05:33:28.055Z","sageScore":6,"diffs":[{"njs":10.0,"offset":1.0,"notes":301,"bombs":0,"obstacles":45,"nps":1.232,"length":456.0,"characteristic":"Standard","difficulty":"Easy","events":4100,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":244.286,"paritySummary":{"errors":61,"warns":34,"resets":0}},{"njs":10.0,"offset":1.0,"notes":467,"bombs":0,"obstacles":48,"nps":1.91,"length":456.5,"characteristic":"Standard","difficulty":"Normal","events":4100,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":244.554,"paritySummary":{"errors":65,"warns":20,"resets":0}},{"njs":12.0,"offset":0.5,"notes":691,"bombs":0,"obstacles":41,"nps":2.826,"length":456.5,"characteristic":"Standard","difficulty":"Hard","events":4100,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":244.554,"paritySummary":{"errors":14,"warns":10,"resets":0}},{"njs":15.0,"offset":0.0,"notes":1069,"bombs":0,"obstacles":42,"nps":4.241,"length":470.5,"characteristic":"Standard","difficulty":"Expert","events":4100,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":252.054,"paritySummary":{"errors":4,"warns":4,"resets":0}},{"njs":16.0,"offset":-0.25,"notes":1199,"bombs":0,"obstacles":18,"nps":4.752,"length":471.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":4100,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":252.321,"paritySummary":{"errors":5,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/cbfe28de7f63634096dd8ef34648753147f3f65d.zip","coverURL":"https://cdn.beatsaver.com/cbfe28de7f63634096dd8ef34648753147f3f65d.jpg","previewURL":"https://cdn.beatsaver.com/cbfe28de7f63634096dd8ef34648753147f3f65d.mp3"}],"createdAt":"2020-01-15T05:33:28.055Z","updatedAt":"2020-01-15T05:33:28.055Z","lastPublishedAt":"2020-01-15T05:33:28.055Z"},{"id":"6ed4","name":"Sayuri - Koukai no Uta [Boku no Hero Academia Ending 6]","description":"sayuri slaps\nmainstream anime mapper AYAYA\n\nBPM 180 | Length 1:54\nExpert+\nExpert\nHard\n\nThanks Monteblanco for testplaying\n\nhf\n\nDM any feedback on Discord\nETAN#8341","uploader":{"id":4235140,"name":"etan","uniqueSet":true,"hash":"5cff0b7798cc5a672c855775","avatar":"https://cdn.beatsaver.com/avatar/136373107559497728.png","type":"DISCORD"},"metadata":{"bpm":180.0,"duration":115,"songName":"Koukai no Uta","songSubName":"","songAuthorName":"Sayuri","levelAuthorName":"ETAN"},"stats":{"plays":0,"downloads":11086,"upvotes":1208,"downvotes":24,"score":0.9241},"uploaded":"2019-11-08T22:57:13.632Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"108f939f6a5a2c2f02e4e1e7c9a9bf46345681a4","key":"6ed4","state":"Published","createdAt":"2019-11-08T22:57:13.632Z","sageScore":5,"diffs":[{"njs":13.0,"offset":0.0,"notes":250,"bombs":0,"obstacles":0,"nps":2.262,"length":331.5,"characteristic":"Standard","difficulty":"Hard","events":5351,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":110.5,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":15.0,"offset":0.5,"notes":365,"bombs":0,"obstacles":0,"nps":3.303,"length":331.5,"characteristic":"Standard","difficulty":"Expert","events":5351,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":110.5,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":18.0,"offset":0.25,"notes":518,"bombs":0,"obstacles":0,"nps":4.688,"length":331.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":5351,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":110.5,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/108f939f6a5a2c2f02e4e1e7c9a9bf46345681a4.zip","coverURL":"https://cdn.beatsaver.com/108f939f6a5a2c2f02e4e1e7c9a9bf46345681a4.jpg","previewURL":"https://cdn.beatsaver.com/108f939f6a5a2c2f02e4e1e7c9a9bf46345681a4.mp3"}],"createdAt":"2019-11-08T22:57:13.632Z","updatedAt":"2019-11-08T22:57:13.632Z","lastPublishedAt":"2019-11-08T22:57:13.632Z"},{"id":"587c","name":"Cracks (Flux Pavilion Remix)","description":"*reuploaded due to an error with the Lightshow Difficulty and Beatsaver*\n\nAnother collab! This one is meant to be more geared towards playability, (and possibly even rankability) so I hope you like it.\n\nIt also has Chroma lighting courtesy of Aeroluna. He's awesome for doing the lights, go check out his stuff too!\n\nCracks (Flux Pavilion Remix) - Belle Humble, Freestylers | 140 BPM | Hard, Expert, Expert+ | Fully Mapped with Chroma Lighting by Aeroluna\n\nHere's a video of the lights with Chroma on: https://youtu.be/iwFcR5YmYwg","uploader":{"id":17131,"name":"tranquillizeme","uniqueSet":true,"hash":"5cff0b7798cc5a672c85609e","avatar":"https://www.gravatar.com/avatar/5cff0b7798cc5a672c85609e?d=retro","type":"SIMPLE"},"metadata":{"bpm":140.0,"duration":143,"songName":"Cracks","songSubName":"(Flux Pavilion Remix)","songAuthorName":"Various Artists","levelAuthorName":"TranquillizeMe"},"stats":{"plays":0,"downloads":1454,"upvotes":1082,"downvotes":19,"score":0.9241},"uploaded":"2019-07-23T01:37:18.104Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"51835f468381d630b48c36da70d2c2ce700bb274","key":"587c","state":"Published","createdAt":"2019-07-23T01:37:18.104Z","sageScore":6,"diffs":[{"njs":13.0,"offset":1.0,"notes":364,"bombs":224,"obstacles":30,"nps":2.705,"length":314.0,"characteristic":"Standard","difficulty":"Hard","events":11202,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":134.571,"paritySummary":{"errors":18,"warns":16,"resets":0}},{"njs":16.0,"offset":0.0,"notes":506,"bombs":228,"obstacles":14,"nps":3.76,"length":314.0,"characteristic":"Standard","difficulty":"Expert","events":11202,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":134.571,"paritySummary":{"errors":9,"warns":8,"resets":2}},{"njs":18.0,"offset":0.0,"notes":778,"bombs":52,"obstacles":18,"nps":5.781,"length":314.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":11202,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":134.571,"paritySummary":{"errors":2,"warns":0,"resets":13}}],"downloadURL":"https://cdn.beatsaver.com/51835f468381d630b48c36da70d2c2ce700bb274.zip","coverURL":"https://cdn.beatsaver.com/51835f468381d630b48c36da70d2c2ce700bb274.jpg","previewURL":"https://cdn.beatsaver.com/51835f468381d630b48c36da70d2c2ce700bb274.mp3"}],"createdAt":"2019-07-23T01:37:18.104Z","updatedAt":"2019-07-23T01:37:18.104Z","lastPublishedAt":"2019-07-23T01:37:18.104Z"},{"id":"d35b","name":"[FUTURE FUNK PACK] Remember Summer Days (MACROSS 82-99 Short Ver.)","description":"FUTURE FUNK MAP PACK\n2 songs uploaded everyday through August 10th - 14th!\n\nThese first two songs are originally sung by Anri, one of my favorite City Pop artist. \n\nThis version of Remember Summer Days is a short edit I made from MACROSS 82-99's bootleg version. The original song is waaay longer\n\nPlease look forward to the upcoming maps!\n\nDM any feedback on Discord\nETAN#8341","uploader":{"id":4235140,"name":"etan","uniqueSet":true,"hash":"5cff0b7798cc5a672c855775","avatar":"https://cdn.beatsaver.com/avatar/136373107559497728.png","type":"DISCORD"},"metadata":{"bpm":110.0,"duration":171,"songName":"Remember Summer Days","songSubName":"(MACROSS 82-99 Short Ver.)","songAuthorName":"Anri","levelAuthorName":"ETAN"},"stats":{"plays":0,"downloads":4497,"upvotes":775,"downvotes":8,"score":0.9239},"uploaded":"2020-08-10T17:48:45.792Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"bb49a02cd1760f45d8c5104fc8881e61ab00b29f","key":"d35b","state":"Published","createdAt":"2020-08-10T17:48:45.792Z","sageScore":8,"diffs":[{"njs":10.0,"offset":1.0,"notes":154,"bombs":0,"obstacles":11,"nps":0.941,"length":300.062,"characteristic":"Standard","difficulty":"Easy","events":3539,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":163.67,"paritySummary":{"errors":32,"warns":2,"resets":0}},{"njs":10.0,"offset":1.0,"notes":220,"bombs":0,"obstacles":11,"nps":1.344,"length":300.062,"characteristic":"Standard","difficulty":"Normal","events":3539,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":163.67,"paritySummary":{"errors":2,"warns":4,"resets":0}},{"njs":12.0,"offset":0.5,"notes":417,"bombs":0,"obstacles":10,"nps":2.506,"length":305.125,"characteristic":"Standard","difficulty":"Hard","events":3539,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":166.432,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":14.0,"offset":0.0,"notes":593,"bombs":0,"obstacles":10,"nps":3.563,"length":305.125,"characteristic":"Standard","difficulty":"Expert","events":3539,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":166.432,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":17.0,"offset":0.5,"notes":752,"bombs":0,"obstacles":10,"nps":4.518,"length":305.125,"characteristic":"Standard","difficulty":"ExpertPlus","events":3539,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":166.432,"paritySummary":{"errors":0,"warns":1,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/bb49a02cd1760f45d8c5104fc8881e61ab00b29f.zip","coverURL":"https://cdn.beatsaver.com/bb49a02cd1760f45d8c5104fc8881e61ab00b29f.jpg","previewURL":"https://cdn.beatsaver.com/bb49a02cd1760f45d8c5104fc8881e61ab00b29f.mp3"}],"createdAt":"2020-08-10T17:48:45.792Z","updatedAt":"2020-08-10T17:48:45.792Z","lastPublishedAt":"2020-08-10T17:48:45.792Z"},{"id":"5d1f","name":"Weight of the World (JVNA Remix) - NieR: Automata","description":"145 BPM - 4:27 Runtime\n\nStandard\nHard - 675 Notes\nExpert - 885 Notes\nExpert+ - 1169 Notes\n\nOne Saber\nExpert - 644 Notes\nExpert+ - 847 Notes\n\nLawless\nEnding E (unnerfed) - 2109 Walls\nEnding E - 1500 Walls\n\nGameplay: Coming soon","uploader":{"id":4284981,"name":"skylerwallace","uniqueSet":true,"hash":"5cff0b7298cc5a672c84ea67","avatar":"https://cdn.beatsaver.com/avatar/398344856868487168.png","type":"DISCORD"},"metadata":{"bpm":145.0,"duration":268,"songName":"Weight of the World","songSubName":"NieR:Automata","songAuthorName":"JVNA","levelAuthorName":"Skyler Wallace & Excession"},"stats":{"plays":0,"downloads":4937,"upvotes":2801,"downvotes":98,"score":0.9239},"uploaded":"2019-08-15T23:12:42.493Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"6b4e0f6a698973ca55754d057b40463063ae59d8","key":"5d1f","state":"Published","createdAt":"2019-08-15T23:12:42.493Z","sageScore":6,"diffs":[{"njs":13.0,"offset":1.0,"notes":675,"bombs":6,"obstacles":45,"nps":2.559,"length":637.5,"characteristic":"Standard","difficulty":"Hard","events":12404,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":263.793,"paritySummary":{"errors":115,"warns":44,"resets":3}},{"njs":15.0,"offset":0.25,"notes":885,"bombs":6,"obstacles":49,"nps":3.355,"length":637.5,"characteristic":"Standard","difficulty":"Expert","events":12404,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":263.793,"paritySummary":{"errors":67,"warns":39,"resets":5}},{"njs":17.0,"offset":0.0,"notes":1169,"bombs":5,"obstacles":58,"nps":4.432,"length":637.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":12404,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":263.793,"paritySummary":{"errors":89,"warns":78,"resets":1}},{"njs":13.0,"offset":1.0,"notes":644,"bombs":6,"obstacles":45,"nps":2.441,"length":637.5,"characteristic":"OneSaber","difficulty":"Expert","events":12404,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":263.793,"paritySummary":{"errors":41,"warns":47,"resets":3}},{"njs":15.0,"offset":0.25,"notes":847,"bombs":6,"obstacles":49,"nps":3.211,"length":637.5,"characteristic":"OneSaber","difficulty":"ExpertPlus","events":12404,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":263.793,"paritySummary":{"errors":59,"warns":71,"resets":0}},{"njs":17.0,"offset":0.0,"notes":1169,"bombs":5,"obstacles":2108,"nps":4.432,"length":637.5,"characteristic":"Lawless","difficulty":"Expert","events":12404,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":263.793,"paritySummary":{"errors":89,"warns":78,"resets":1}},{"njs":17.0,"offset":0.0,"notes":1169,"bombs":5,"obstacles":1500,"nps":4.432,"length":637.5,"characteristic":"Lawless","difficulty":"ExpertPlus","events":12404,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":263.793,"paritySummary":{"errors":89,"warns":78,"resets":1}}],"downloadURL":"https://cdn.beatsaver.com/6b4e0f6a698973ca55754d057b40463063ae59d8.zip","coverURL":"https://cdn.beatsaver.com/6b4e0f6a698973ca55754d057b40463063ae59d8.jpg","previewURL":"https://cdn.beatsaver.com/6b4e0f6a698973ca55754d057b40463063ae59d8.mp3"}],"createdAt":"2019-08-15T23:12:42.493Z","updatedAt":"2019-08-15T23:12:42.493Z","lastPublishedAt":"2019-08-15T23:12:42.493Z"},{"id":"14aa","name":"Dummy! - Undertale OST (Toby Fox)","description":"Decided to make an Undertale map, original song by Toby Fox.","uploader":{"id":14891,"name":"elijoria","uniqueSet":true,"hash":"5cff0b7398cc5a672c84fbf5","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84fbf5?d=retro","type":"SIMPLE"},"metadata":{"bpm":125.0,"duration":146,"songName":"Dummy!","songSubName":"Undertale OST","songAuthorName":"Toby Fox (Mapped By Elijoria)","levelAuthorName":"Elijoria"},"stats":{"plays":0,"downloads":3830,"upvotes":2082,"downvotes":63,"score":0.9239},"uploaded":"2018-09-11T23:43:18Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"b9d323fb01bfdd9ece0702256416b44ce1026ec6","key":"14aa","state":"Published","createdAt":"2018-09-11T23:43:18Z","sageScore":4,"diffs":[{"njs":10.0,"offset":0.0,"notes":374,"bombs":0,"obstacles":49,"nps":2.589,"length":301.0,"characteristic":"Standard","difficulty":"Normal","events":684,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":144.48,"paritySummary":{"errors":102,"warns":50,"resets":0}},{"njs":10.0,"offset":0.0,"notes":515,"bombs":0,"obstacles":53,"nps":3.565,"length":301.0,"characteristic":"Standard","difficulty":"Hard","events":684,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":144.48,"paritySummary":{"errors":89,"warns":64,"resets":0}},{"njs":10.0,"offset":0.0,"notes":610,"bombs":26,"obstacles":53,"nps":4.223,"length":301.0,"characteristic":"Standard","difficulty":"Expert","events":684,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":144.48,"paritySummary":{"errors":88,"warns":67,"resets":4}}],"downloadURL":"https://cdn.beatsaver.com/b9d323fb01bfdd9ece0702256416b44ce1026ec6.zip","coverURL":"https://cdn.beatsaver.com/b9d323fb01bfdd9ece0702256416b44ce1026ec6.jpg","previewURL":"https://cdn.beatsaver.com/b9d323fb01bfdd9ece0702256416b44ce1026ec6.mp3"}],"createdAt":"2018-09-11T23:43:18Z","updatedAt":"2018-09-11T23:43:18Z","lastPublishedAt":"2018-09-11T23:43:18Z"},{"id":"acf","name":"EC2 - Prototyperaptor - Still Waiting","description":"Expert / Hard\r\nPart of the Electric City 2 song pack\r\nhttps://youtu.be/uCekFFk_nWA?t=4m29s","uploader":{"id":12996,"name":"rustic","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e8c4","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro","type":"SIMPLE"},"metadata":{"bpm":125.0,"duration":286,"songName":"EC2 - Still Waiting","songSubName":"Prototyperaptor","songAuthorName":"Rustic","levelAuthorName":"rustic"},"stats":{"plays":0,"downloads":4651,"upvotes":1935,"downvotes":56,"score":0.9239},"uploaded":"2018-07-20T22:07:52Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"32ae684f553e7fa90d1e5325bd54581c0afd37fa","key":"acf","state":"Published","createdAt":"2018-07-20T22:07:52Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":604,"bombs":0,"obstacles":19,"nps":2.192,"length":572.0,"characteristic":"Standard","difficulty":"Hard","events":2545,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":274.56,"paritySummary":{"errors":7,"warns":33,"resets":0},"stars":1.18},{"njs":11.0,"offset":0.0,"notes":902,"bombs":0,"obstacles":35,"nps":3.274,"length":572.0,"characteristic":"Standard","difficulty":"Expert","events":2545,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":274.56,"paritySummary":{"errors":19,"warns":65,"resets":0},"stars":1.99}],"downloadURL":"https://cdn.beatsaver.com/32ae684f553e7fa90d1e5325bd54581c0afd37fa.zip","coverURL":"https://cdn.beatsaver.com/32ae684f553e7fa90d1e5325bd54581c0afd37fa.jpg","previewURL":"https://cdn.beatsaver.com/32ae684f553e7fa90d1e5325bd54581c0afd37fa.mp3"}],"createdAt":"2018-07-20T22:07:52Z","updatedAt":"2018-07-20T22:07:52Z","lastPublishedAt":"2018-07-20T22:07:52Z"},{"id":"10842","name":"Technicolor - Madeon","description":"4th map by Canadian_Dragon in collaboration with Kry\r\nThis map is a friendly gift for a good friend of ours and has been map to their liking. Hope everyone else enjoys it aswell.\r\n\r\nRequires Chroma & Noodle Extension [Wall Map]","uploader":{"id":4013,"name":"canadian_dragon","uniqueSet":true,"hash":"5e0bb55364f9aa0006d6d0fa","avatar":"https://cdn.beatsaver.com/avatar/4013.jpg","type":"SIMPLE"},"metadata":{"bpm":127.0,"duration":385,"songName":"Technicolor","songSubName":"","songAuthorName":"Madeon","levelAuthorName":"Canadian_Dragon & Kry"},"stats":{"plays":0,"downloads":1998,"upvotes":682,"downvotes":5,"score":0.9238},"uploaded":"2020-11-02T01:52:46.653Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"0488692d1d2fa080fe429ee15efc84da40bc78d2","key":"10842","state":"Published","createdAt":"2020-11-02T01:52:46.653Z","sageScore":4,"diffs":[{"njs":19.0,"offset":0.0,"notes":1382,"bombs":0,"obstacles":38787,"nps":3.75,"length":780.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":8054,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":368.504,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/0488692d1d2fa080fe429ee15efc84da40bc78d2.zip","coverURL":"https://cdn.beatsaver.com/0488692d1d2fa080fe429ee15efc84da40bc78d2.jpg","previewURL":"https://cdn.beatsaver.com/0488692d1d2fa080fe429ee15efc84da40bc78d2.mp3"}],"createdAt":"2020-11-02T01:52:46.653Z","updatedAt":"2020-11-02T01:52:46.653Z","lastPublishedAt":"2020-11-02T01:52:46.653Z"},{"id":"142e8","name":"K/DA - MORE (ft. Madison Beer, (G)I-DLE, Lexie Liu, Jaira Burns, Seraphine)","description":"From the unofficial music pack (K/DA ALL OUT) on BSaber.com\nPack: https://bsaber.com/kda-all-out/\nTrailer: https://youtu.be/e1ry_H86zqg\nPreview (Expert+): https://youtu.be/C86ebbseC34\nLightshow: https://youtu.be/lxbch_lAEA8\n__________\nCredits🤍\nMapper: Sotarks\nLighter: Sotarks\nCurators: Pixelguy, JohnnyDee & joey\nSpecial Thanks: eliotttate & Belaya\nTrailer: Tuffiii\n__________\nCheck out K/DA🤍\nhttps://twitter.com/kda_music\nhttps://linktr.ee/kda_music\nProduced by Riot Games","uploader":{"id":2523,"name":"sotarks","uniqueSet":true,"hash":"5cff0b7698cc5a672c8541fd","avatar":"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8541fd?d=retro","type":"SIMPLE"},"metadata":{"bpm":142.0,"duration":219,"songName":"MORE","songSubName":"","songAuthorName":"K/DA","levelAuthorName":"Sotarks"},"stats":{"plays":0,"downloads":11653,"upvotes":1408,"downvotes":33,"score":0.9237},"uploaded":"2021-02-17T18:04:39.306Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"8c5be566e218b8cc59c21e947bc39c1ce1f98908","key":"142e8","state":"Published","createdAt":"2021-02-17T18:04:39.306Z","sageScore":7,"diffs":[{"njs":10.0,"offset":-1.2813157,"notes":245,"bombs":0,"obstacles":19,"nps":1.191,"length":487.0,"characteristic":"Standard","difficulty":"Easy","events":2819,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":205.775,"paritySummary":{"errors":21,"warns":0,"resets":0}},{"njs":12.0,"offset":0.274958,"notes":363,"bombs":2,"obstacles":13,"nps":1.764,"length":487.0,"characteristic":"Standard","difficulty":"Normal","events":2819,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":205.775,"paritySummary":{"errors":3,"warns":0,"resets":0}},{"njs":14.0,"offset":-0.06,"notes":618,"bombs":13,"obstacles":13,"nps":3.003,"length":487.0,"characteristic":"Standard","difficulty":"Hard","events":2819,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":205.775,"paritySummary":{"errors":0,"warns":0,"resets":4}},{"njs":16.0,"offset":-0.3,"notes":863,"bombs":12,"obstacles":106,"nps":4.194,"length":487.0,"characteristic":"Standard","difficulty":"Expert","events":2819,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":205.775,"paritySummary":{"errors":0,"warns":0,"resets":2}},{"njs":18.0,"offset":-0.5,"notes":1041,"bombs":31,"obstacles":271,"nps":5.059,"length":487.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":2821,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":205.775,"paritySummary":{"errors":1,"warns":4,"resets":5}}],"downloadURL":"https://cdn.beatsaver.com/8c5be566e218b8cc59c21e947bc39c1ce1f98908.zip","coverURL":"https://cdn.beatsaver.com/8c5be566e218b8cc59c21e947bc39c1ce1f98908.jpg","previewURL":"https://cdn.beatsaver.com/8c5be566e218b8cc59c21e947bc39c1ce1f98908.mp3"}],"createdAt":"2021-02-17T18:04:39.306Z","updatedAt":"2021-02-17T18:04:39.306Z","lastPublishedAt":"2021-02-17T18:04:39.306Z"},{"id":"90c3","name":"Centuries - Fallout Boy (2020) [Mapped by Ab and Qwasyx]","description":"Phew, that took a while.\nHuge thanks to Qwasyx for lighting this map as well as making all the One Saber difficulties!\nAnother thanks to Fruhead for testing.\n\nI take requests! My Discord is Ab#8582.","uploader":{"id":15368,"name":"theab","uniqueSet":true,"hash":"5cff0b7698cc5a672c853a14","avatar":"https://www.gravatar.com/avatar/5cff0b7698cc5a672c853a14?d=retro","type":"SIMPLE"},"metadata":{"bpm":176.0,"duration":227,"songName":"Centuries","songSubName":"","songAuthorName":"Fallout Boy","levelAuthorName":"Ab & Qwasyx"},"stats":{"plays":0,"downloads":8958,"upvotes":2447,"downvotes":81,"score":0.9237},"uploaded":"2020-03-16T21:06:46.074Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"e3bb02f9ecd08e4c3472fea92e604bc415338f2a","key":"90c3","state":"Published","createdAt":"2020-03-16T21:06:46.074Z","sageScore":6,"diffs":[{"njs":10.0,"offset":0.0,"notes":231,"bombs":0,"obstacles":46,"nps":1.065,"length":636.0,"characteristic":"Standard","difficulty":"Easy","events":14169,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":216.818,"paritySummary":{"errors":84,"warns":0,"resets":0}},{"njs":13.0,"offset":-0.6,"notes":329,"bombs":0,"obstacles":4,"nps":1.517,"length":636.0,"characteristic":"Standard","difficulty":"Normal","events":14169,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":216.818,"paritySummary":{"errors":26,"warns":8,"resets":0}},{"njs":14.0,"offset":0.8,"notes":514,"bombs":92,"obstacles":82,"nps":2.371,"length":636.0,"characteristic":"Standard","difficulty":"Hard","events":14169,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":216.818,"paritySummary":{"errors":0,"warns":0,"resets":2}},{"njs":16.0,"offset":0.4,"notes":667,"bombs":182,"obstacles":11,"nps":3.076,"length":636.0,"characteristic":"Standard","difficulty":"Expert","events":14167,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":216.818,"paritySummary":{"errors":1,"warns":1,"resets":8}},{"njs":20.0,"offset":-0.2,"notes":862,"bombs":164,"obstacles":2,"nps":3.976,"length":636.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":14169,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":216.818,"paritySummary":{"errors":1,"warns":1,"resets":5}},{"njs":10.0,"offset":0.0,"notes":146,"bombs":64,"obstacles":4,"nps":0.671,"length":638.0,"characteristic":"OneSaber","difficulty":"Easy","events":14169,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":217.5,"paritySummary":{"errors":21,"warns":15,"resets":1}},{"njs":13.0,"offset":-0.6,"notes":276,"bombs":144,"obstacles":68,"nps":1.269,"length":638.0,"characteristic":"OneSaber","difficulty":"Normal","events":14169,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":217.5,"paritySummary":{"errors":4,"warns":22,"resets":2}},{"njs":14.0,"offset":0.8,"notes":529,"bombs":8,"obstacles":0,"nps":2.43,"length":638.5,"characteristic":"OneSaber","difficulty":"Hard","events":14169,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":217.67,"paritySummary":{"errors":8,"warns":6,"resets":1}},{"njs":16.0,"offset":0.4,"notes":548,"bombs":96,"obstacles":0,"nps":2.522,"length":637.5,"characteristic":"OneSaber","difficulty":"Expert","events":14169,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":217.33,"paritySummary":{"errors":2,"warns":0,"resets":5}},{"njs":20.0,"offset":-0.2,"notes":830,"bombs":153,"obstacles":0,"nps":3.807,"length":639.5,"characteristic":"OneSaber","difficulty":"ExpertPlus","events":14169,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":218.011,"paritySummary":{"errors":0,"warns":2,"resets":13}},{"njs":20.0,"offset":-0.2,"notes":0,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"Lightshow","difficulty":"ExpertPlus","events":14169,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/e3bb02f9ecd08e4c3472fea92e604bc415338f2a.zip","coverURL":"https://cdn.beatsaver.com/e3bb02f9ecd08e4c3472fea92e604bc415338f2a.jpg","previewURL":"https://cdn.beatsaver.com/e3bb02f9ecd08e4c3472fea92e604bc415338f2a.mp3"}],"createdAt":"2020-03-16T21:06:46.074Z","updatedAt":"2020-03-16T21:06:46.074Z","lastPublishedAt":"2020-03-16T21:06:46.074Z"},{"id":"63ea","name":"Sabaton - Primo Victoria","description":"Old but great song by Sabaton. Hard to Expert+ are mapped.\n\nGenre: Power metal\nBPM: 124.175\nNPS: 5.51 / 3.87 / 3.06\nNJS: 16 / 13 / 11\n\nExpert+ playthrough: https://youtu.be/Z92uPY3met4","uploader":{"id":1207,"name":"wyxi","uniqueSet":true,"hash":"5d0abf96b8c469000699075f","avatar":"https://www.gravatar.com/avatar/5d0abf96b8c469000699075f?d=retro","type":"SIMPLE"},"metadata":{"bpm":124.175,"duration":251,"songName":"Primo Victoria","songSubName":"","songAuthorName":"Sabaton","levelAuthorName":"Wyxi"},"stats":{"plays":0,"downloads":2832,"upvotes":1838,"downvotes":52,"score":0.9237},"uploaded":"2019-09-16T19:33:52.506Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"d18d33e15faab989cc67b7a1ce0b03950295764f","key":"63ea","state":"Published","createdAt":"2019-09-16T19:33:52.506Z","sageScore":6,"diffs":[{"njs":11.0,"offset":1.0,"notes":769,"bombs":4,"obstacles":13,"nps":3.18,"length":500.5,"characteristic":"Standard","difficulty":"Hard","events":2822,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":241.836,"paritySummary":{"errors":10,"warns":2,"resets":2}},{"njs":13.0,"offset":0.5,"notes":972,"bombs":8,"obstacles":12,"nps":4.019,"length":500.5,"characteristic":"Standard","difficulty":"Expert","events":2823,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":241.836,"paritySummary":{"errors":15,"warns":11,"resets":4}},{"njs":16.0,"offset":0.0,"notes":1385,"bombs":8,"obstacles":11,"nps":5.727,"length":500.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":2824,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":241.836,"paritySummary":{"errors":20,"warns":18,"resets":4}}],"downloadURL":"https://cdn.beatsaver.com/d18d33e15faab989cc67b7a1ce0b03950295764f.zip","coverURL":"https://cdn.beatsaver.com/d18d33e15faab989cc67b7a1ce0b03950295764f.jpg","previewURL":"https://cdn.beatsaver.com/d18d33e15faab989cc67b7a1ce0b03950295764f.mp3"}],"createdAt":"2019-09-16T19:33:52.506Z","updatedAt":"2019-09-16T19:33:52.506Z","lastPublishedAt":"2019-09-16T19:33:52.506Z"},{"id":"45eb","name":"Fun Tonight - MACROSS 82-99","description":"Future funk has a special place in my heart, Beat Saber could use some more of this genre.\r\nDifficulties: Expert, Expert+ (Both on the easier end of the spectrum)\r\n\r\n\"DDR/Mystikmol\" Difficulty Rating:\r\nE+ -- 12\r\nExpert -- 10","uploader":{"id":4284569,"name":"checkthepan","uniqueSet":true,"hash":"5cff0b7398cc5a672c84f3d5","avatar":"https://cdn.beatsaver.com/avatar/184355369189900290.png","type":"DISCORD"},"metadata":{"bpm":130.0,"duration":164,"songName":"Fun Tonight","songSubName":"MACROSS 82-99","songAuthorName":"Checkthepan","levelAuthorName":"checkthepan"},"stats":{"plays":0,"downloads":1300,"upvotes":710,"downvotes":6,"score":0.9237},"uploaded":"2019-04-14T19:22:02Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"608bf3c4cd341a7b70199f26d44aaff71550078d","key":"45eb","state":"Published","createdAt":"2019-04-14T19:22:02Z","sageScore":7,"diffs":[{"njs":12.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"Standard","difficulty":"Easy","events":1545,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":14.0,"offset":0.0,"notes":613,"bombs":0,"obstacles":30,"nps":3.795,"length":350.0,"characteristic":"Standard","difficulty":"Expert","events":1545,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":161.538,"paritySummary":{"errors":14,"warns":19,"resets":0}},{"njs":16.0,"offset":0.0,"notes":693,"bombs":0,"obstacles":31,"nps":4.29,"length":350.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":1545,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":161.538,"paritySummary":{"errors":12,"warns":28,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/608bf3c4cd341a7b70199f26d44aaff71550078d.zip","coverURL":"https://cdn.beatsaver.com/608bf3c4cd341a7b70199f26d44aaff71550078d.jpg","previewURL":"https://cdn.beatsaver.com/608bf3c4cd341a7b70199f26d44aaff71550078d.mp3"}],"createdAt":"2019-04-14T19:22:02Z","updatedAt":"2019-04-14T19:22:02Z","lastPublishedAt":"2019-04-14T19:22:02Z"},{"id":"443d","name":"PUSSY - Rammstein","description":"Another one!\r\n\r\nMaybe don't let your kids play this one until they are a bit older....","uploader":{"id":27983,"name":"heisenbergirl","uniqueSet":true,"hash":"5cff0b7298cc5a672c84ec30","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ec30?d=retro","type":"SIMPLE"},"metadata":{"bpm":135.0,"duration":240,"songName":"PUSSY","songSubName":"Rammstein","songAuthorName":"Heisenberg","levelAuthorName":"heisenbergirl"},"stats":{"plays":0,"downloads":1710,"upvotes":1218,"downvotes":25,"score":0.9237},"uploaded":"2019-04-08T04:27:04Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"54f6e76446b3a96cc4707fb2d2aa8bd1efd0baf3","key":"443d","state":"Published","createdAt":"2019-04-08T04:27:04Z","sageScore":6,"diffs":[{"njs":14.0,"offset":0.0,"notes":711,"bombs":0,"obstacles":1,"nps":3.1,"length":516.0,"characteristic":"Standard","difficulty":"Expert","events":12824,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":229.333,"paritySummary":{"errors":13,"warns":24,"resets":0}},{"njs":16.0,"offset":0.0,"notes":967,"bombs":12,"obstacles":7,"nps":4.217,"length":516.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":12824,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":229.333,"paritySummary":{"errors":40,"warns":52,"resets":7}}],"downloadURL":"https://cdn.beatsaver.com/54f6e76446b3a96cc4707fb2d2aa8bd1efd0baf3.zip","coverURL":"https://cdn.beatsaver.com/54f6e76446b3a96cc4707fb2d2aa8bd1efd0baf3.jpg","previewURL":"https://cdn.beatsaver.com/54f6e76446b3a96cc4707fb2d2aa8bd1efd0baf3.mp3"}],"createdAt":"2019-04-08T04:27:04Z","updatedAt":"2019-04-08T04:27:04Z","lastPublishedAt":"2019-04-08T04:27:04Z"},{"id":"1ad55","name":"Porter Robinson & Madeon - Shelter (Modchart)","description":"This is a modchart that i wanted to do for a long time, i saved this song becuase I love it.\r\nAnd today I'm proud to show you my new modchart!\r\nI made this map in a week and i really enjoyed the process!\r\n\r\nShowcase: https://www.youtube.com/watch?v=a4zSCDYRwAQ\r\n\r\nIf you have any feedback dont be shy and tell me on discord:\r\nTzurS11#1111","uploader":{"id":4284455,"name":"TzurS11","uniqueSet":true,"hash":"6040a8135ab13d0006093512","avatar":"https://cdn.beatsaver.com/avatar/474645781786263552.png","type":"DISCORD"},"metadata":{"bpm":200.0,"duration":219,"songName":"Shelter","songSubName":"","songAuthorName":"Porter Robinson & Madeon","levelAuthorName":"TzurS11"},"stats":{"plays":0,"downloads":12349,"upvotes":737,"downvotes":7,"score":0.9236},"uploaded":"2021-08-01T20:31:30.562Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"740c5f5d7b730285c8d13fad1107be4659eb2839","key":"1ad55","state":"Published","createdAt":"2021-08-01T20:31:30.562Z","sageScore":3,"diffs":[{"njs":19.0,"offset":-0.05,"notes":623,"bombs":4,"obstacles":0,"nps":3.146,"length":660.0,"characteristic":"Standard","difficulty":"Expert","events":81591,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":198.0,"paritySummary":{"errors":0,"warns":0,"resets":1}},{"njs":19.0,"offset":-0.05,"notes":623,"bombs":4,"obstacles":24892,"nps":3.146,"length":660.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":81591,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":198.0,"paritySummary":{"errors":0,"warns":0,"resets":1}}],"downloadURL":"https://cdn.beatsaver.com/740c5f5d7b730285c8d13fad1107be4659eb2839.zip","coverURL":"https://cdn.beatsaver.com/740c5f5d7b730285c8d13fad1107be4659eb2839.jpg","previewURL":"https://cdn.beatsaver.com/740c5f5d7b730285c8d13fad1107be4659eb2839.mp3"}],"createdAt":"2021-08-01T20:31:30.562Z","updatedAt":"2021-08-01T20:31:30.562Z","lastPublishedAt":"2021-08-01T20:31:30.562Z"},{"id":"7326","name":"The Greatest Show - Mapped by TheAb","description":"This is the most time I've ever put into a map. Almost 14 hours have been put into it, and I really appreciate the light-show I've done. Truly hope you enjoy!\n\nExpert+: 4.55NPS\nExpert: 3.49NPS\nHard: 2.57NPS\nNormal: 1.61NPS\n12,601 Lighting events.\n\nOriginal Song: https://www.youtube.com/watch?v=NyVYXRD1Ans\n\nTwitter: https://twitter.com/TheAb03 / Discord: Ab#8582\nI take requests! DM Ab#8582 on Discord for more info.","uploader":{"id":15368,"name":"theab","uniqueSet":true,"hash":"5cff0b7698cc5a672c853a14","avatar":"https://www.gravatar.com/avatar/5cff0b7698cc5a672c853a14?d=retro","type":"SIMPLE"},"metadata":{"bpm":158.0,"duration":301,"songName":"The Greatest Show","songSubName":"","songAuthorName":"Hugh Jackman, Keala Settle, Zac Efron, Zendaya & The Greatest Showman Ensemble","levelAuthorName":"Ab"},"stats":{"plays":0,"downloads":3783,"upvotes":1160,"downvotes":23,"score":0.9235},"uploaded":"2019-12-01T19:39:02.667Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"f621c70d06e8f5405ffa428f7b742b123208a656","key":"7326","state":"Published","createdAt":"2019-12-01T19:39:02.667Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":489,"bombs":36,"obstacles":75,"nps":1.672,"length":770.149,"characteristic":"Standard","difficulty":"Normal","events":12599,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":292.462,"paritySummary":{"errors":43,"warns":13,"resets":6}},{"njs":12.0,"offset":0.5,"notes":777,"bombs":31,"obstacles":96,"nps":2.657,"length":770.149,"characteristic":"Standard","difficulty":"Hard","events":12599,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":292.462,"paritySummary":{"errors":1,"warns":0,"resets":8}},{"njs":15.0,"offset":0.3,"notes":1056,"bombs":48,"obstacles":100,"nps":3.611,"length":770.149,"characteristic":"Standard","difficulty":"Expert","events":12986,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":292.462,"paritySummary":{"errors":3,"warns":1,"resets":9}},{"njs":19.0,"offset":0.0,"notes":1376,"bombs":34,"obstacles":97,"nps":4.705,"length":770.149,"characteristic":"Standard","difficulty":"ExpertPlus","events":12595,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":292.462,"paritySummary":{"errors":0,"warns":0,"resets":6}},{"njs":19.0,"offset":0.0,"notes":1,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"Lightshow","difficulty":"Easy","events":12568,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":1,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/f621c70d06e8f5405ffa428f7b742b123208a656.zip","coverURL":"https://cdn.beatsaver.com/f621c70d06e8f5405ffa428f7b742b123208a656.jpg","previewURL":"https://cdn.beatsaver.com/f621c70d06e8f5405ffa428f7b742b123208a656.mp3"}],"createdAt":"2019-12-01T19:39:02.667Z","updatedAt":"2019-12-01T19:39:02.667Z","lastPublishedAt":"2019-12-01T19:39:02.667Z"},{"id":"56c2","name":"On The Floor (ft. Pitbull) - Jennifer Lopez","description":"You can most certainly dance to this song, I hope you like it!\nSend me your thoughts on Discord: Teuflum#5982\n\nExpert+ preview: https://www.youtube.com/watch?v=TPU4mCQngNQ\n\nMany thanks to my playtesters Redmagi, techbutterfly and Helen Carnate!\n\nDM me your feedback on discord: Teuflum#5982","uploader":{"id":68740,"name":"Teuflum","uniqueSet":true,"hash":"5cff0b7498cc5a672c851a6b","avatar":"https://cdn.beatsaver.com/avatar/114706869460664326.png","type":"DISCORD"},"metadata":{"bpm":130.0,"duration":231,"songName":"On The Floor","songSubName":"(ft. Pitbull)","songAuthorName":"Jennifer Lopez","levelAuthorName":"Teuflum"},"stats":{"plays":0,"downloads":8646,"upvotes":1696,"downvotes":46,"score":0.9235},"uploaded":"2019-07-13T12:11:30.889Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"56d18c176906a23b15702d3eb33f8669322ee312","key":"56c2","state":"Published","createdAt":"2019-07-13T12:11:30.889Z","sageScore":7,"diffs":[{"njs":10.0,"offset":1.0,"notes":307,"bombs":0,"obstacles":28,"nps":1.415,"length":470.0,"characteristic":"Standard","difficulty":"Easy","events":3081,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":216.923,"paritySummary":{"errors":87,"warns":4,"resets":0}},{"njs":12.0,"offset":1.0,"notes":383,"bombs":0,"obstacles":30,"nps":1.766,"length":470.0,"characteristic":"Standard","difficulty":"Normal","events":3081,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":216.923,"paritySummary":{"errors":75,"warns":13,"resets":0}},{"njs":14.0,"offset":1.0,"notes":638,"bombs":0,"obstacles":32,"nps":2.941,"length":470.0,"characteristic":"Standard","difficulty":"Hard","events":3081,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":216.923,"paritySummary":{"errors":29,"warns":23,"resets":0}},{"njs":16.0,"offset":0.5,"notes":838,"bombs":0,"obstacles":26,"nps":3.863,"length":470.0,"characteristic":"Standard","difficulty":"Expert","events":3081,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":216.923,"paritySummary":{"errors":30,"warns":36,"resets":0}},{"njs":17.0,"offset":0.0,"notes":949,"bombs":0,"obstacles":23,"nps":4.375,"length":470.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":3081,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":216.923,"paritySummary":{"errors":33,"warns":43,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/56d18c176906a23b15702d3eb33f8669322ee312.zip","coverURL":"https://cdn.beatsaver.com/56d18c176906a23b15702d3eb33f8669322ee312.jpg","previewURL":"https://cdn.beatsaver.com/56d18c176906a23b15702d3eb33f8669322ee312.mp3"}],"createdAt":"2019-07-13T12:11:30.889Z","updatedAt":"2019-07-13T12:11:30.889Z","lastPublishedAt":"2019-07-13T12:11:30.889Z"},{"id":"492e","name":"[OLD] Centuries - Fallout Boy | 2019 version | Mapped and Lighted by Ab","description":"Alright! Another one.\nNormal is pretty much top-Easy, couldn't decide.\nAb#4940 if you're interested in collabs\n\nAlso lights could get laggy","uploader":{"id":15368,"name":"theab","uniqueSet":true,"hash":"5cff0b7698cc5a672c853a14","avatar":"https://www.gravatar.com/avatar/5cff0b7698cc5a672c853a14?d=retro","type":"SIMPLE"},"metadata":{"bpm":176.0,"duration":227,"songName":"Centuries","songSubName":"Fallout Boy","songAuthorName":"Ab","levelAuthorName":"TheAb"},"stats":{"plays":0,"downloads":4393,"upvotes":2252,"downvotes":72,"score":0.9235},"uploaded":"2019-04-28T22:58:20Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"158e65b2e9861c626344049ec4a069d1523ad060","key":"492e","state":"Published","createdAt":"2019-04-28T22:58:20Z","sageScore":4,"diffs":[{"njs":11.0,"offset":0.0,"notes":289,"bombs":42,"obstacles":4,"nps":1.333,"length":635.75,"characteristic":"Standard","difficulty":"Normal","events":22890,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":216.733,"paritySummary":{"errors":79,"warns":35,"resets":2}},{"njs":12.0,"offset":0.0,"notes":527,"bombs":85,"obstacles":5,"nps":2.425,"length":637.5,"characteristic":"Standard","difficulty":"Hard","events":1,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":217.33,"paritySummary":{"errors":62,"warns":51,"resets":9}},{"njs":12.0,"offset":0.0,"notes":762,"bombs":158,"obstacles":7,"nps":3.506,"length":637.5,"characteristic":"Standard","difficulty":"Expert","events":22890,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":217.33,"paritySummary":{"errors":54,"warns":44,"resets":5}},{"njs":18.0,"offset":0.0,"notes":1145,"bombs":186,"obstacles":0,"nps":5.267,"length":637.625,"characteristic":"Standard","difficulty":"ExpertPlus","events":22890,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":217.372,"paritySummary":{"errors":68,"warns":90,"resets":6}}],"downloadURL":"https://cdn.beatsaver.com/158e65b2e9861c626344049ec4a069d1523ad060.zip","coverURL":"https://cdn.beatsaver.com/158e65b2e9861c626344049ec4a069d1523ad060.jpg","previewURL":"https://cdn.beatsaver.com/158e65b2e9861c626344049ec4a069d1523ad060.mp3"}],"createdAt":"2019-04-28T22:58:20Z","updatedAt":"2019-04-28T22:58:20Z","lastPublishedAt":"2019-04-28T22:58:20Z"},{"id":"8215","name":"David Guetta, Brooks & Loote - Better When You're Gone","description":"First map of my Future House pack. I remember that I started this a long time ago, even before I had my VR; about 5 months ago going into September.\n\nVideo: https://youtu.be/NDDn7-Lzrlo\n\nEasy: Notes: 130 NPS: 1.22 NJS: 10\nNormal: Notes: 164 NPS: 1.65 NJS: 12\nHard: Notes: 267 NPS: 2.64 NJS: 14\nExpert: Notes: 398 NPS: 3.94 NJS: 16\nExpert+: Notes: 483 NPS: 4.76 NJS: 18\n\nCheck out my lightshows here: https://www.youtube.com/playlist?list=PLwl6dYq72JOYu1BnKl5WATa4Dh__ZJmuN","uploader":{"id":14808,"name":"halcyon12","uniqueSet":true,"hash":"5cff0b7698cc5a672c8547ad","avatar":"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8547ad?d=retro","type":"SIMPLE"},"metadata":{"bpm":128.0,"duration":106,"songName":"Better When You're Gone","songSubName":"(Ft. Loote)","songAuthorName":"David Guetta, Brooks","levelAuthorName":"Halcyon12"},"stats":{"plays":0,"downloads":2743,"upvotes":977,"downvotes":16,"score":0.9233},"uploaded":"2020-01-27T23:27:20.606Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"048b444b7011388e63e4b7bab1e8f96b4b51fa3d","key":"8215","state":"Published","createdAt":"2020-01-27T23:27:20.606Z","sageScore":6,"diffs":[{"njs":10.0,"offset":1.0,"notes":130,"bombs":0,"obstacles":0,"nps":1.29,"length":215.0,"characteristic":"Standard","difficulty":"Easy","events":2063,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":100.781,"paritySummary":{"errors":54,"warns":2,"resets":0}},{"njs":12.0,"offset":0.5,"notes":164,"bombs":0,"obstacles":7,"nps":1.652,"length":211.75,"characteristic":"Standard","difficulty":"Normal","events":2063,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":99.258,"paritySummary":{"errors":16,"warns":6,"resets":0}},{"njs":14.0,"offset":0.0,"notes":267,"bombs":0,"obstacles":6,"nps":2.643,"length":215.5,"characteristic":"Standard","difficulty":"Hard","events":2063,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":101.016,"paritySummary":{"errors":2,"warns":2,"resets":0}},{"njs":16.0,"offset":-0.25,"notes":398,"bombs":0,"obstacles":5,"nps":3.94,"length":215.5,"characteristic":"Standard","difficulty":"Expert","events":2060,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":101.016,"paritySummary":{"errors":1,"warns":0,"resets":0}},{"njs":18.0,"offset":-0.5,"notes":483,"bombs":4,"obstacles":6,"nps":4.765,"length":216.25,"characteristic":"Standard","difficulty":"ExpertPlus","events":2063,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":101.367,"paritySummary":{"errors":13,"warns":18,"resets":6}}],"downloadURL":"https://cdn.beatsaver.com/048b444b7011388e63e4b7bab1e8f96b4b51fa3d.zip","coverURL":"https://cdn.beatsaver.com/048b444b7011388e63e4b7bab1e8f96b4b51fa3d.jpg","previewURL":"https://cdn.beatsaver.com/048b444b7011388e63e4b7bab1e8f96b4b51fa3d.mp3"}],"createdAt":"2020-01-27T23:27:20.606Z","updatedAt":"2020-01-27T23:27:20.606Z","lastPublishedAt":"2020-01-27T23:27:20.606Z"},{"id":"6352","name":"Paladin - EnV","description":"Map creators:\r\nYume - Notes / Walls\r\nRexxxzi - Lights\r\n\r\nThis is \"High Tier Expert\" difficulty\r\nWe hope you'll enjoy the map!","uploader":{"id":37025,"name":"yume","uniqueSet":true,"hash":"5cff0b7698cc5a672c853e8a","avatar":"https://www.gravatar.com/avatar/5cff0b7698cc5a672c853e8a?d=retro","type":"SIMPLE"},"metadata":{"bpm":130.0,"duration":242,"songName":"Paladin","songSubName":"","songAuthorName":"EnV","levelAuthorName":"Yume ft. Rexxz Lights"},"stats":{"plays":0,"downloads":1187,"upvotes":1079,"downvotes":20,"score":0.9233},"uploaded":"2019-09-14T12:32:01.763Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"583598b60c0ef891738d3b07c564cadff6500c63","key":"6352","state":"Published","createdAt":"2019-09-14T12:32:01.763Z","sageScore":7,"diffs":[{"njs":12.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"Standard","difficulty":"Easy","events":9642,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":16.0,"offset":0.0,"notes":1065,"bombs":0,"obstacles":7902,"nps":4.615,"length":500.0,"characteristic":"Standard","difficulty":"Expert","events":9524,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":230.769,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":16.0,"offset":0.0,"notes":1065,"bombs":0,"obstacles":7923,"nps":4.615,"length":500.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":9524,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":230.769,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/583598b60c0ef891738d3b07c564cadff6500c63.zip","coverURL":"https://cdn.beatsaver.com/583598b60c0ef891738d3b07c564cadff6500c63.jpg","previewURL":"https://cdn.beatsaver.com/583598b60c0ef891738d3b07c564cadff6500c63.mp3"}],"createdAt":"2019-09-14T12:32:01.763Z","updatedAt":"2019-09-14T12:32:01.763Z","lastPublishedAt":"2019-09-14T12:32:01.763Z"},{"id":"2c14","name":"CHVRCHES - The Mother We Share","description":"I noticed CHVRCHES' most popular song didn't have a map, so I gave it a shot. Check out my other maps, too!\r\n\r\nPreview: https://youtu.be/bGnUqfGrglY\r\nNormal / Hard / Expert\r\n\r\nhttps://www.twitch.tv/Syntheseizure","uploader":{"id":31265,"name":"syntheseizure","uniqueSet":true,"hash":"5cff0b7698cc5a672c8546bd","avatar":"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8546bd?d=retro","type":"SIMPLE"},"metadata":{"bpm":87.0,"duration":192,"songName":"The Mother We Share","songSubName":"CHVRCHES","songAuthorName":"Syntheseizure","levelAuthorName":"Syntheseizure"},"stats":{"plays":0,"downloads":1880,"upvotes":1056,"downvotes":19,"score":0.9233},"uploaded":"2019-01-08T20:34:12Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"4f96ae058a970508dad582e0ea60d5e6ad9d38b5","key":"2c14","state":"Published","createdAt":"2019-01-08T20:34:12Z","sageScore":4,"diffs":[{"njs":10.0,"offset":0.0,"notes":373,"bombs":0,"obstacles":2,"nps":2.053,"length":263.5,"characteristic":"Standard","difficulty":"Normal","events":710,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":181.724,"paritySummary":{"errors":36,"warns":7,"resets":0}},{"njs":10.0,"offset":0.0,"notes":480,"bombs":0,"obstacles":6,"nps":2.641,"length":263.5,"characteristic":"Standard","difficulty":"Hard","events":710,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":181.724,"paritySummary":{"errors":20,"warns":12,"resets":0}},{"njs":10.0,"offset":0.0,"notes":683,"bombs":0,"obstacles":12,"nps":3.758,"length":263.5,"characteristic":"Standard","difficulty":"Expert","events":708,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":181.724,"paritySummary":{"errors":21,"warns":7,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/4f96ae058a970508dad582e0ea60d5e6ad9d38b5.zip","coverURL":"https://cdn.beatsaver.com/4f96ae058a970508dad582e0ea60d5e6ad9d38b5.jpg","previewURL":"https://cdn.beatsaver.com/4f96ae058a970508dad582e0ea60d5e6ad9d38b5.mp3"}],"createdAt":"2019-01-08T20:34:12Z","updatedAt":"2019-01-08T20:34:12Z","lastPublishedAt":"2019-01-08T20:34:12Z"},{"id":"2293","name":"My Soul,Your Beats","description":"Over 10 hours of work went into this to make it as good as it could be\r\nI consider this a new beginning, all previous maps of mine pale in comparison","uploader":{"id":47724,"name":"dafrandle","uniqueSet":true,"hash":"5cff0b7598cc5a672c8527e9","avatar":"https://www.gravatar.com/avatar/5cff0b7598cc5a672c8527e9?d=retro","type":"SIMPLE"},"metadata":{"bpm":145.0,"duration":276,"songName":"My Soul,Your Beats","songSubName":"Lia","songAuthorName":"dafrandle","levelAuthorName":"dafrandle"},"stats":{"plays":0,"downloads":3582,"upvotes":1440,"downvotes":35,"score":0.9233},"uploaded":"2018-11-27T23:47:18Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"abc11caed9ca86fda3dacc12dd0bcca51041ebe0","key":"2293","state":"Published","createdAt":"2018-11-27T23:47:18Z","sageScore":6,"diffs":[{"njs":9.0,"offset":0.0,"notes":505,"bombs":0,"obstacles":3,"nps":1.9,"length":642.375,"characteristic":"Standard","difficulty":"Normal","events":3955,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":265.81,"paritySummary":{"errors":77,"warns":13,"resets":0}},{"njs":10.0,"offset":0.0,"notes":768,"bombs":0,"obstacles":26,"nps":2.889,"length":642.375,"characteristic":"Standard","difficulty":"Hard","events":3955,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":265.81,"paritySummary":{"errors":64,"warns":24,"resets":0}},{"njs":11.0,"offset":0.0,"notes":1120,"bombs":62,"obstacles":29,"nps":4.214,"length":642.375,"characteristic":"Standard","difficulty":"Expert","events":3955,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":265.81,"paritySummary":{"errors":89,"warns":40,"resets":5}}],"downloadURL":"https://cdn.beatsaver.com/abc11caed9ca86fda3dacc12dd0bcca51041ebe0.zip","coverURL":"https://cdn.beatsaver.com/abc11caed9ca86fda3dacc12dd0bcca51041ebe0.jpg","previewURL":"https://cdn.beatsaver.com/abc11caed9ca86fda3dacc12dd0bcca51041ebe0.mp3"}],"createdAt":"2018-11-27T23:47:18Z","updatedAt":"2018-11-27T23:47:18Z","lastPublishedAt":"2018-11-27T23:47:18Z"},{"id":"1a0ba","name":"[Electro Swing Pack] Wolfgang Lohr & Maskarade - Hit The Road Jack","description":"Nixie Presents: Electro Swing Pack!\n\n10 electro swing songs with expert and expert+ diffs to make your booty swing!\n\nGet The Pack: \nhttps://bsaber.com/electro-swing-pack/\n\nMap Gameplay:\nhttps://youtu.be/0ObNR9n_dDs\n\nComplete Pack Playthrough:\nhttps://youtu.be/yj9rw4MEh7s\n\nHeyya! After looking for some dancey electro swing maps, I noticed that there barely are any!\nSo I took matters into my own hands, learning mapping basically from scratch,\nscrapping my first failed attempts and then finally making a map that was good.\nI found it so fun that I ended up making 9 more maps,\nand fine tuned them with the help of the testplayers in BSMG,\nas well as the lovely curators from the bsaber discord.\n\nHuge thanks in particular to:\nMonstor, Bearly, Noxn, Bullet, Vaser888, Tocxx, Jafdy, Storm Knight and Pixelguy!\n\nIf you want to talk to me, here is my Discord:\nNixie.Korten#6944","uploader":{"id":4286374,"name":"nixiekorten","uniqueSet":true,"hash":"6096752e12772e0006e2f7e6","avatar":"https://cdn.beatsaver.com/avatar/840550221690699776.png","type":"DISCORD"},"metadata":{"bpm":124.0,"duration":159,"songName":"Hit The Road Jack","songSubName":"","songAuthorName":"Wolfgang Lohr & Maskarade","levelAuthorName":"Nixie.Korten"},"stats":{"plays":0,"downloads":14063,"upvotes":841,"downvotes":11,"score":0.9232},"uploaded":"2021-07-08T15:26:18.072Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"75f10751d58f6f1ab0bc36e94039a144256adccb","key":"1a0ba","state":"Published","createdAt":"2021-07-08T15:26:18.072Z","sageScore":4,"diffs":[{"njs":16.0,"offset":-0.25,"notes":475,"bombs":0,"obstacles":0,"nps":3.089,"length":317.75,"characteristic":"Standard","difficulty":"Expert","events":1846,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":153.75,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":19.0,"offset":0.25,"notes":750,"bombs":0,"obstacles":0,"nps":4.878,"length":317.75,"characteristic":"Standard","difficulty":"ExpertPlus","events":1846,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":153.75,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/75f10751d58f6f1ab0bc36e94039a144256adccb.zip","coverURL":"https://cdn.beatsaver.com/75f10751d58f6f1ab0bc36e94039a144256adccb.jpg","previewURL":"https://cdn.beatsaver.com/75f10751d58f6f1ab0bc36e94039a144256adccb.mp3"}],"createdAt":"2021-07-08T15:26:18.072Z","updatedAt":"2021-07-08T15:26:18.072Z","lastPublishedAt":"2021-07-08T15:26:18.072Z"},{"id":"924a","name":"JoJo ~Sono Chi no Sadame~ [JoJo's Bizarre Adventure Opening] - Hiroaki \"TOMMY\" Tominaga","description":"Not many people know this but my full name is actually Joetastic Joestar ;)\n\n\"JoJo ~Sono Chi no Sadame~\" is the first opening of JoJo's Bizarre Adventure: Phantom Blood by Hiroaki \"TOMMY\" Tominaga.\n\nMap Preview: https://youtu.be/WPprA9AS35A","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":146.0,"duration":263,"songName":"JoJo ~Sono Chi no Sadame~","songSubName":"","songAuthorName":"Hiroaki \"TOMMY\" Tominaga","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":6854,"upvotes":1594,"downvotes":42,"score":0.9232},"uploaded":"2020-03-21T18:09:50.603Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"eb2b28402e27f784a64f99d338696a2bdd59fe2c","key":"924a","state":"Published","createdAt":"2020-03-21T18:09:50.603Z","sageScore":5,"diffs":[{"njs":16.0,"offset":0.0,"notes":1305,"bombs":0,"obstacles":16,"nps":5.053,"length":628.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":4918,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":258.288,"paritySummary":{"errors":30,"warns":38,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/eb2b28402e27f784a64f99d338696a2bdd59fe2c.zip","coverURL":"https://cdn.beatsaver.com/eb2b28402e27f784a64f99d338696a2bdd59fe2c.jpg","previewURL":"https://cdn.beatsaver.com/eb2b28402e27f784a64f99d338696a2bdd59fe2c.mp3"}],"createdAt":"2020-03-21T18:09:50.603Z","updatedAt":"2020-03-21T18:09:50.603Z","lastPublishedAt":"2020-03-21T18:09:50.603Z"},{"id":"aa5c","name":"MOMOLAND - BAAM (Remaster)","description":"Expert+ Preview: https://www.youtube.com/watch?v=5PUSZT6jUaY\n\nMan, I have been doing this for a year now. I feel old. Well enjoy this remake of the first map I uploaded!\n\nComments? Like it? Hate it? Let me know on Discord @Bloodcloak#5725 ! Or drop by the Kpop discord at: https://discord.gg/c9uHGYP","uploader":{"id":71661,"name":"bloodcloak","uniqueSet":true,"hash":"5cff0b7698cc5a672c8551d3","avatar":"https://cdn.beatsaver.com/avatar/205707707187986442.png","type":"DISCORD"},"metadata":{"bpm":127.0,"duration":209,"songName":"BAAM","songSubName":"Remastered Map","songAuthorName":"MOMOLAND","levelAuthorName":"Bloodcloak"},"stats":{"plays":0,"downloads":8638,"upvotes":1222,"downvotes":26,"score":0.9231},"uploaded":"2020-05-25T19:34:51.367Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"72746e0a89246d11a8fe7f3a23113f4605980a09","key":"aa5c","state":"Published","createdAt":"2020-05-25T19:34:51.367Z","sageScore":5,"diffs":[{"njs":12.0,"offset":0.4,"notes":551,"bombs":0,"obstacles":148,"nps":2.706,"length":431.0,"characteristic":"Standard","difficulty":"Hard","events":2998,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":203.622,"paritySummary":{"errors":4,"warns":0,"resets":0}},{"njs":16.0,"offset":-0.2,"notes":823,"bombs":0,"obstacles":120,"nps":4.041,"length":431.063,"characteristic":"Standard","difficulty":"Expert","events":2998,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":203.652,"paritySummary":{"errors":6,"warns":2,"resets":0}},{"njs":18.0,"offset":-0.4,"notes":885,"bombs":0,"obstacles":111,"nps":4.346,"length":431.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":2998,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":203.622,"paritySummary":{"errors":3,"warns":7,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/72746e0a89246d11a8fe7f3a23113f4605980a09.zip","coverURL":"https://cdn.beatsaver.com/72746e0a89246d11a8fe7f3a23113f4605980a09.jpg","previewURL":"https://cdn.beatsaver.com/72746e0a89246d11a8fe7f3a23113f4605980a09.mp3"}],"createdAt":"2020-05-25T19:34:51.367Z","updatedAt":"2020-05-25T19:34:51.367Z","lastPublishedAt":"2020-05-25T19:34:51.367Z"},{"id":"33dc","name":"CeeLo Green ft. Jack Black - Kung Fu Fighting","description":"I only realised this yesterday, but I've managed to make a map of this Chinese inspired classic just in time for the Lunar new year. So happy Chinese new year everybody and I hope you enjoy it!\r\nTime spent mapping: 8:49\r\n\r\nVideo Preview: https://www.youtube.com/watch?v=73jUl1rH0Fo\r\nBeastSaber: https://bsaber.com/members/stumi/","uploader":{"id":4785,"name":"stumi","uniqueSet":false,"hash":"5cff0b7398cc5a672c84f720","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro","type":"SIMPLE"},"metadata":{"bpm":110.0,"duration":140,"songName":"Kung Fu Fighting","songSubName":"CeeLo Green ft.Jack Black","songAuthorName":"Stumi","levelAuthorName":"stumi"},"stats":{"plays":0,"downloads":7920,"upvotes":1959,"downvotes":59,"score":0.9231},"uploaded":"2019-02-05T21:06:09Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"b653e83bdae8028e77e84f751d23d619bc55f6f7","key":"33dc","state":"Published","createdAt":"2019-02-05T21:06:09Z","sageScore":6,"diffs":[{"njs":10.0,"offset":0.0,"notes":154,"bombs":0,"obstacles":26,"nps":1.26,"length":224.0,"characteristic":"Standard","difficulty":"Easy","events":1344,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":122.182,"paritySummary":{"errors":16,"warns":18,"resets":0}},{"njs":10.0,"offset":0.0,"notes":197,"bombs":0,"obstacles":24,"nps":1.612,"length":224.0,"characteristic":"Standard","difficulty":"Normal","events":1344,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":122.182,"paritySummary":{"errors":17,"warns":32,"resets":0}},{"njs":11.0,"offset":0.0,"notes":351,"bombs":0,"obstacles":13,"nps":2.873,"length":224.0,"characteristic":"Standard","difficulty":"Hard","events":1344,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":122.182,"paritySummary":{"errors":29,"warns":29,"resets":0}},{"njs":14.0,"offset":0.0,"notes":502,"bombs":0,"obstacles":17,"nps":4.109,"length":224.0,"characteristic":"Standard","difficulty":"Expert","events":1346,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":122.182,"paritySummary":{"errors":32,"warns":40,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/b653e83bdae8028e77e84f751d23d619bc55f6f7.zip","coverURL":"https://cdn.beatsaver.com/b653e83bdae8028e77e84f751d23d619bc55f6f7.jpg","previewURL":"https://cdn.beatsaver.com/b653e83bdae8028e77e84f751d23d619bc55f6f7.mp3"}],"createdAt":"2019-02-05T21:06:09Z","updatedAt":"2019-02-05T21:06:09Z","lastPublishedAt":"2019-02-05T21:06:09Z"},{"id":"24e","name":"Maculate - Get Schwifty (Andromulus Remix)","description":"Finished version! This track has 4 difficulties: Easy, Normal, Hard and Expert. So everyone can now get schwifty, regardless of skill level. \r\n\r\nThis is my first finished track, all feedback is welcome!","uploader":{"id":53049,"name":"enclose","uniqueSet":false,"hash":"5cff0b7398cc5a672c84ed3b","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ed3b?d=retro","type":"SIMPLE"},"metadata":{"bpm":200.0,"duration":279,"songName":"Get Schwifty (Andromulus Remix)","songSubName":"","songAuthorName":"Maculate","levelAuthorName":"enclose"},"stats":{"plays":0,"downloads":5744,"upvotes":4485,"downvotes":191,"score":0.9231},"uploaded":"2018-05-26T15:22:35Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"33d5c4fff97822eef1f02fc53bb0561f23489efe","key":"24e","state":"Published","createdAt":"2018-05-26T15:22:35Z","sageScore":6,"diffs":[{"njs":10.0,"offset":0.0,"notes":411,"bombs":0,"obstacles":77,"nps":1.527,"length":897.0,"characteristic":"Standard","difficulty":"Easy","events":1673,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":269.1,"paritySummary":{"errors":120,"warns":53,"resets":0}},{"njs":10.0,"offset":0.0,"notes":518,"bombs":0,"obstacles":120,"nps":1.925,"length":897.0,"characteristic":"Standard","difficulty":"Normal","events":1754,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":269.1,"paritySummary":{"errors":123,"warns":64,"resets":0}},{"njs":10.0,"offset":0.0,"notes":629,"bombs":0,"obstacles":131,"nps":2.337,"length":897.0,"characteristic":"Standard","difficulty":"Hard","events":1890,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":269.1,"paritySummary":{"errors":119,"warns":77,"resets":0}},{"njs":10.0,"offset":0.0,"notes":684,"bombs":0,"obstacles":220,"nps":2.542,"length":897.0,"characteristic":"Standard","difficulty":"Expert","events":1905,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":269.1,"paritySummary":{"errors":112,"warns":75,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/33d5c4fff97822eef1f02fc53bb0561f23489efe.zip","coverURL":"https://cdn.beatsaver.com/33d5c4fff97822eef1f02fc53bb0561f23489efe.jpg","previewURL":"https://cdn.beatsaver.com/33d5c4fff97822eef1f02fc53bb0561f23489efe.mp3"}],"createdAt":"2018-05-26T15:22:35Z","updatedAt":"2018-05-26T15:22:35Z","lastPublishedAt":"2018-05-26T15:22:35Z"},{"id":"13bea","name":"The Wall - (Buunshin Remix) [WALL MAP + CHROMA]","description":"Just wanna say that Rustic has inspired me, and has made me want to start mapping a while back, and with that, it has brought me many opportunities, and many friends.\n\nPrograms used\nScuffedWalls: https://github.com/thelightdesigner/ScuffedWalls\nbeatwalls: https://github.com/spookyGh0st/beatwalls\n\nNoodleExtensions: https://github.com/Aeroluna/NoodleExtensions/releases\n\nPreview: https://youtu.be/lFxGmGO2kww","uploader":{"id":4284667,"name":"tall_chilis_boi","uniqueSet":true,"hash":"5dec6d85fffaa6000679dc23","avatar":"https://cdn.beatsaver.com/avatar/427307106970894336.png","type":"DISCORD"},"metadata":{"bpm":172.0,"duration":270,"songName":"The Wall","songSubName":"(Buunshin Remix)","songAuthorName":"ABIS & Signal & Tasha Baxter","levelAuthorName":"Tall_Chilis_Boi"},"stats":{"plays":0,"downloads":2353,"upvotes":1376,"downvotes":33,"score":0.9229},"uploaded":"2021-02-08T08:27:12.773Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"9192703d277e652e3dc367bc87c68107967c6898","key":"13bea","state":"Published","createdAt":"2021-02-08T08:27:12.773Z","sageScore":4,"diffs":[{"njs":20.0,"offset":-0.5,"notes":768,"bombs":0,"obstacles":14814,"nps":2.991,"length":736.0,"characteristic":"Standard","difficulty":"Expert","events":15872,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":256.744,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/9192703d277e652e3dc367bc87c68107967c6898.zip","coverURL":"https://cdn.beatsaver.com/9192703d277e652e3dc367bc87c68107967c6898.jpg","previewURL":"https://cdn.beatsaver.com/9192703d277e652e3dc367bc87c68107967c6898.mp3"}],"createdAt":"2021-02-08T08:27:12.773Z","updatedAt":"2021-02-08T08:27:12.773Z","lastPublishedAt":"2021-02-08T08:27:12.773Z"},{"id":"9b89","name":"Stronger","description":"A wall map for this masterpiece of a song.\n----------------------------------------------\nPlease give feedback @Reddek#5864\nAnd thanks for playing!","uploader":{"id":4233941,"name":"reddek","uniqueSet":true,"hash":"5dbfb4426dea0b0006bd328d","avatar":"https://cdn.beatsaver.com/avatar/177436487086768129.png","type":"DISCORD"},"metadata":{"bpm":160.0,"duration":207,"songName":"Stronger","songSubName":"","songAuthorName":"TheFatRat, Slaydit & Anjulie","levelAuthorName":"Reddek"},"stats":{"plays":0,"downloads":1299,"upvotes":938,"downvotes":15,"score":0.9229},"uploaded":"2020-04-16T06:37:29.656Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"e48afe3d1a2b94f5396f63e32972651495caf034","key":"9b89","state":"Published","createdAt":"2020-04-16T06:37:29.656Z","sageScore":4,"diffs":[{"njs":18.0,"offset":0.0,"notes":892,"bombs":168,"obstacles":2648,"nps":4.471,"length":532.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":3423,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":199.5,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/e48afe3d1a2b94f5396f63e32972651495caf034.zip","coverURL":"https://cdn.beatsaver.com/e48afe3d1a2b94f5396f63e32972651495caf034.jpg","previewURL":"https://cdn.beatsaver.com/e48afe3d1a2b94f5396f63e32972651495caf034.mp3"}],"createdAt":"2020-04-16T06:37:29.656Z","updatedAt":"2020-04-16T06:37:29.656Z","lastPublishedAt":"2020-04-16T06:37:29.656Z"},{"id":"613b","name":"Seraphim On The Ring - Mitchie M ft. Hatsune Miku, Kagamine Rin, KAITO","description":"\"Seraphim On The Ring\" is a song by Mitchie M about pro wrestling match which Miku and Rin play against Meiko and Luka. The ringside commentator is KAITO and the referee is Len.","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":175.0,"duration":223,"songName":"Seraphim On The Ring","songSubName":"","songAuthorName":"Mitchie M ft. Hatsune Miku, Kagamine Rin, KAITO","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":2013,"upvotes":992,"downvotes":17,"score":0.9229},"uploaded":"2019-09-04T09:20:18.405Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"605da022c1e9688e122688e3abf3ddc8321299a8","key":"613b","state":"Published","createdAt":"2019-09-04T09:20:18.405Z","sageScore":5,"diffs":[{"njs":12.0,"offset":0.0,"notes":679,"bombs":0,"obstacles":33,"nps":3.215,"length":616.0,"characteristic":"Standard","difficulty":"Hard","events":5807,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":211.2,"paritySummary":{"errors":54,"warns":41,"resets":0}},{"njs":14.0,"offset":0.0,"notes":913,"bombs":0,"obstacles":27,"nps":4.323,"length":616.0,"characteristic":"Standard","difficulty":"Expert","events":5807,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":211.2,"paritySummary":{"errors":20,"warns":21,"resets":0}},{"njs":16.0,"offset":0.0,"notes":1038,"bombs":0,"obstacles":30,"nps":4.915,"length":616.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":5807,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":211.2,"paritySummary":{"errors":33,"warns":43,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/605da022c1e9688e122688e3abf3ddc8321299a8.zip","coverURL":"https://cdn.beatsaver.com/605da022c1e9688e122688e3abf3ddc8321299a8.jpg","previewURL":"https://cdn.beatsaver.com/605da022c1e9688e122688e3abf3ddc8321299a8.mp3"}],"createdAt":"2019-09-04T09:20:18.405Z","updatedAt":"2019-09-04T09:20:18.405Z","lastPublishedAt":"2019-09-04T09:20:18.405Z"},{"id":"199e","name":"Super Mario 64 - Dire, Dire Docks (Wisp X Remix)","description":"Normal/Expert/Expert+ | BPM: 130 | Length: 3:23 | Notes: 376/688/1020\r\n\r\nI was just wondering how \"Dire, Dire Docks\" would look like in Beat Saber..\r\nThis is the result!\r\n\r\nLighting done with \"Lightmap V2\"\r\n\r\n12th Map.\r\n\r\nPreview:\r\nhttps://www.youtube.com/watch?v=dRprfDRvJJY\r\nSong:\r\nhttps://www.youtube.com/watch?v=56eIZKyhM6c","uploader":{"id":4285825,"name":"fefeland","uniqueSet":true,"hash":"5cff0b7398cc5a672c84f3bb","avatar":"https://cdn.beatsaver.com/avatar/119360573191225344.png","type":"DISCORD"},"metadata":{"bpm":130.0,"duration":203,"songName":"Dire, Dire Docks (Wisp X Remix)","songSubName":"Super Mario 64","songAuthorName":"FEFELAND","levelAuthorName":"fefeland"},"stats":{"plays":0,"downloads":2005,"upvotes":1351,"downvotes":32,"score":0.9228},"uploaded":"2018-10-10T20:02:06Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"b8d647a30f15e33d77808f9a143f02e3af6016b4","key":"199e","state":"Published","createdAt":"2018-10-10T20:02:06Z","sageScore":5,"diffs":[{"njs":8.0,"offset":0.0,"notes":376,"bombs":0,"obstacles":50,"nps":1.958,"length":416.0,"characteristic":"Standard","difficulty":"Normal","events":831,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":192.0,"paritySummary":{"errors":72,"warns":22,"resets":0}},{"njs":12.0,"offset":0.0,"notes":688,"bombs":0,"obstacles":51,"nps":3.583,"length":416.0,"characteristic":"Standard","difficulty":"Expert","events":831,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":192.0,"paritySummary":{"errors":46,"warns":44,"resets":0}},{"njs":15.0,"offset":0.0,"notes":1020,"bombs":0,"obstacles":48,"nps":5.313,"length":416.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":831,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":192.0,"paritySummary":{"errors":36,"warns":32,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/b8d647a30f15e33d77808f9a143f02e3af6016b4.zip","coverURL":"https://cdn.beatsaver.com/b8d647a30f15e33d77808f9a143f02e3af6016b4.jpg","previewURL":"https://cdn.beatsaver.com/b8d647a30f15e33d77808f9a143f02e3af6016b4.mp3"}],"createdAt":"2018-10-10T20:02:06Z","updatedAt":"2018-10-10T20:02:06Z","lastPublishedAt":"2018-10-10T20:02:06Z"},{"id":"65bb","name":"TWICE - Feel Special","description":"New Twice map by Aggrogahu and myself. I hope you enjoy it!\n\nKikaeaeon: Expert/Expert+\nAggrogahu: Hard/Normal","uploader":{"id":4285107,"name":"kikaeaeon","uniqueSet":true,"hash":"5cff0b7498cc5a672c85109b","avatar":"https://cdn.beatsaver.com/avatar/103715469822816256.png","type":"DISCORD"},"metadata":{"bpm":129.0,"duration":208,"songName":"Feel Special","songSubName":"","songAuthorName":"TWICE","levelAuthorName":"KikaeAeon & Aggrogahu"},"stats":{"plays":0,"downloads":5121,"upvotes":1156,"downvotes":24,"score":0.9226},"uploaded":"2019-09-25T05:14:20.078Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"4644faf2fbb084c248d7e0f8d3592829ec7e19d0","key":"65bb","state":"Published","createdAt":"2019-09-25T05:14:20.078Z","sageScore":4,"diffs":[{"njs":10.0,"offset":1.0,"notes":351,"bombs":0,"obstacles":17,"nps":1.747,"length":432.0,"characteristic":"Standard","difficulty":"Normal","events":1268,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":200.93,"paritySummary":{"errors":58,"warns":30,"resets":0}},{"njs":10.0,"offset":1.0,"notes":552,"bombs":0,"obstacles":17,"nps":2.747,"length":432.0,"characteristic":"Standard","difficulty":"Hard","events":1268,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":200.93,"paritySummary":{"errors":51,"warns":36,"resets":0}},{"njs":12.0,"offset":0.0,"notes":762,"bombs":0,"obstacles":16,"nps":3.792,"length":432.0,"characteristic":"Standard","difficulty":"Expert","events":1266,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":200.93,"paritySummary":{"errors":16,"warns":18,"resets":0}},{"njs":16.0,"offset":0.0,"notes":952,"bombs":0,"obstacles":36,"nps":4.738,"length":432.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":1266,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":200.93,"paritySummary":{"errors":9,"warns":9,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/4644faf2fbb084c248d7e0f8d3592829ec7e19d0.zip","coverURL":"https://cdn.beatsaver.com/4644faf2fbb084c248d7e0f8d3592829ec7e19d0.jpg","previewURL":"https://cdn.beatsaver.com/4644faf2fbb084c248d7e0f8d3592829ec7e19d0.mp3"}],"createdAt":"2019-09-25T05:14:20.078Z","updatedAt":"2019-09-25T05:14:20.078Z","lastPublishedAt":"2019-09-25T05:14:20.078Z"},{"id":"48ff","name":"Sewayaki Kisune no Senko-san OP - Koyoi MofuMofu!!","description":"Twitter: https://twitter.com/Dack731","uploader":{"id":4285250,"name":"dack","uniqueSet":true,"hash":"5cff0b7598cc5a672c852c6f","avatar":"https://cdn.beatsaver.com/avatar/297344689798119424.png","type":"DISCORD"},"metadata":{"bpm":103.0,"duration":91,"songName":"Koyoi MofuMofu","songSubName":"Agasa.K","songAuthorName":"Dack","levelAuthorName":"Dack"},"stats":{"plays":0,"downloads":2294,"upvotes":1317,"downvotes":31,"score":0.9225},"uploaded":"2019-04-28T12:14:58Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"52cba6c4432bca35081296a7e98be638f3f69c65","key":"48ff","state":"Published","createdAt":"2019-04-28T12:14:58Z","sageScore":2,"diffs":[{"njs":12.0,"offset":0.0,"notes":177,"bombs":0,"obstacles":0,"nps":2.074,"length":146.5,"characteristic":"Standard","difficulty":"Normal","events":146,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":85.34,"paritySummary":{"errors":10,"warns":5,"resets":0}},{"njs":13.0,"offset":0.0,"notes":256,"bombs":0,"obstacles":0,"nps":3.0,"length":146.5,"characteristic":"Standard","difficulty":"Hard","events":146,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":85.34,"paritySummary":{"errors":13,"warns":13,"resets":0}},{"njs":14.0,"offset":0.0,"notes":300,"bombs":0,"obstacles":0,"nps":3.515,"length":146.5,"characteristic":"Standard","difficulty":"Expert","events":146,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":85.34,"paritySummary":{"errors":6,"warns":7,"resets":0}},{"njs":15.0,"offset":0.0,"notes":315,"bombs":0,"obstacles":0,"nps":3.691,"length":146.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":146,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":85.34,"paritySummary":{"errors":7,"warns":8,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/52cba6c4432bca35081296a7e98be638f3f69c65.zip","coverURL":"https://cdn.beatsaver.com/52cba6c4432bca35081296a7e98be638f3f69c65.jpg","previewURL":"https://cdn.beatsaver.com/52cba6c4432bca35081296a7e98be638f3f69c65.mp3"}],"createdAt":"2019-04-28T12:14:58Z","updatedAt":"2019-04-28T12:14:58Z","lastPublishedAt":"2019-04-28T12:14:58Z"},{"id":"27f6","name":"We All Lift Together - Keith Power (From \"Warframe\")","description":"Welcome to Fortuna. Explore the frigid landscape of Venus populated with new Corpus threats, subterranean mysteries and an ecosystem on the brink of destruction.\r\nPlaying movie (Hard) : https://youtu.be/M1s6G4ib5Ew","uploader":{"id":43083,"name":"trgsonic","uniqueSet":true,"hash":"5cff0b7598cc5a672c852c78","avatar":"https://www.gravatar.com/avatar/5cff0b7598cc5a672c852c78?d=retro","type":"SIMPLE"},"metadata":{"bpm":134.0,"duration":155,"songName":"We All Lift Together","songSubName":"","songAuthorName":"Keith Power","levelAuthorName":"TRGsonic"},"stats":{"plays":0,"downloads":1436,"upvotes":736,"downvotes":8,"score":0.9224},"uploaded":"2018-12-25T14:00:28Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"050d447ebe73685cdb5515867dd7f065e0001fb7","key":"27f6","state":"Published","createdAt":"2018-12-25T14:00:28Z","sageScore":6,"diffs":[{"njs":10.0,"offset":0.0,"notes":197,"bombs":0,"obstacles":24,"nps":1.375,"length":320.0,"characteristic":"Standard","difficulty":"Easy","events":144,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":143.284,"paritySummary":{"errors":37,"warns":23,"resets":0}},{"njs":10.01,"offset":0.0,"notes":304,"bombs":6,"obstacles":23,"nps":2.122,"length":320.0,"characteristic":"Standard","difficulty":"Normal","events":144,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":143.284,"paritySummary":{"errors":30,"warns":21,"resets":0}},{"njs":10.05,"offset":0.0,"notes":360,"bombs":8,"obstacles":24,"nps":2.513,"length":320.0,"characteristic":"Standard","difficulty":"Hard","events":144,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":143.284,"paritySummary":{"errors":34,"warns":29,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/050d447ebe73685cdb5515867dd7f065e0001fb7.zip","coverURL":"https://cdn.beatsaver.com/050d447ebe73685cdb5515867dd7f065e0001fb7.jpg","previewURL":"https://cdn.beatsaver.com/050d447ebe73685cdb5515867dd7f065e0001fb7.mp3"}],"createdAt":"2018-12-25T14:00:28Z","updatedAt":"2018-12-25T14:00:28Z","lastPublishedAt":"2018-12-25T14:00:28Z"},{"id":"7b5f","name":"My Stick! - Bad Lip Reading (Standard, 90 degree)","description":"Happy New Year 2020! I am a huge fan of the Bad Lip Reading Star Wars songs. I probably account for half of the 100s of millions of views they have received on youtube! If you're not familiar with them, go check them out! This newest one - My Stick! - just came out a few days ago and as soon as I heard it, I wanted to map it. So here it is - Easy, Normal, Hard, Expert, and Expert 90 degree difficulties available. \n\nBig thanks to my playtesters Maybeemae, MajorPickle, and Brentastic! You guys really help put the polish on these maps!\n\nhttps://www.youtube.com/watch?v=372GmcbFwCI","uploader":{"id":78593,"name":"techbutterfly","uniqueSet":true,"hash":"5cff0b7798cc5a672c8566f7","avatar":"https://cdn.beatsaver.com/avatar/527111497617506304.png","type":"DISCORD"},"metadata":{"bpm":126.0,"duration":205,"songName":"My Stick","songSubName":"","songAuthorName":"Bad Lip Reading","levelAuthorName":"TechButterfly"},"stats":{"plays":0,"downloads":2769,"upvotes":1048,"downvotes":20,"score":0.9223},"uploaded":"2020-01-01T01:33:52.347Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"4837ebdf91168a5e26eb5beebda03ebef31e6841","key":"7b5f","state":"Published","createdAt":"2020-01-01T01:33:52.347Z","sageScore":4,"diffs":[{"njs":8.0,"offset":0.0,"notes":173,"bombs":14,"obstacles":38,"nps":0.881,"length":412.5,"characteristic":"Standard","difficulty":"Easy","events":795,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":196.429,"paritySummary":{"errors":47,"warns":21,"resets":5}},{"njs":10.0,"offset":0.0,"notes":292,"bombs":22,"obstacles":38,"nps":1.458,"length":420.5,"characteristic":"Standard","difficulty":"Normal","events":795,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":200.238,"paritySummary":{"errors":48,"warns":72,"resets":10}},{"njs":13.0,"offset":0.0,"notes":572,"bombs":22,"obstacles":38,"nps":2.857,"length":420.5,"characteristic":"Standard","difficulty":"Hard","events":795,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":200.238,"paritySummary":{"errors":33,"warns":84,"resets":10}},{"njs":13.0,"offset":0.0,"notes":683,"bombs":22,"obstacles":38,"nps":3.411,"length":420.5,"characteristic":"Standard","difficulty":"Expert","events":795,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":200.238,"paritySummary":{"errors":31,"warns":31,"resets":9}},{"njs":13.0,"offset":0.0,"notes":577,"bombs":22,"obstacles":7,"nps":2.882,"length":420.5,"characteristic":"90Degree","difficulty":"Expert","events":1050,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":200.238,"paritySummary":{"errors":34,"warns":85,"resets":10}}],"downloadURL":"https://cdn.beatsaver.com/4837ebdf91168a5e26eb5beebda03ebef31e6841.zip","coverURL":"https://cdn.beatsaver.com/4837ebdf91168a5e26eb5beebda03ebef31e6841.jpg","previewURL":"https://cdn.beatsaver.com/4837ebdf91168a5e26eb5beebda03ebef31e6841.mp3"}],"createdAt":"2020-01-01T01:33:52.347Z","updatedAt":"2020-01-01T01:33:52.347Z","lastPublishedAt":"2020-01-01T01:33:52.347Z"},{"id":"9137","name":"Uno - Little Big","description":"https://www.youtube.com/watch?v=8hiHXbvsT8o","uploader":{"id":4285760,"name":"okdisplay","uniqueSet":true,"hash":"5cff0b7398cc5a672c84eda2","avatar":"https://cdn.beatsaver.com/avatar/404020982676717570.png","type":"DISCORD"},"metadata":{"bpm":142.0,"duration":163,"songName":"UNO","songSubName":"","songAuthorName":"Little Big","levelAuthorName":"OkDisplay"},"stats":{"plays":0,"downloads":1734,"upvotes":997,"downvotes":18,"score":0.9223},"uploaded":"2020-03-18T02:49:03.418Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"359433e3d701cc06b47ac0d7fbb9b077cd970c01","key":"9137","state":"Published","createdAt":"2020-03-18T02:49:03.418Z","sageScore":4,"diffs":[{"njs":15.0,"offset":0.0,"notes":706,"bombs":0,"obstacles":0,"nps":4.54,"length":368.0,"characteristic":"Standard","difficulty":"Expert","events":1500,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":155.493,"paritySummary":{"errors":13,"warns":14,"resets":0}},{"njs":17.0,"offset":0.0,"notes":705,"bombs":9,"obstacles":23,"nps":4.534,"length":368.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":1464,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":155.493,"paritySummary":{"errors":11,"warns":8,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/359433e3d701cc06b47ac0d7fbb9b077cd970c01.zip","coverURL":"https://cdn.beatsaver.com/359433e3d701cc06b47ac0d7fbb9b077cd970c01.jpg","previewURL":"https://cdn.beatsaver.com/359433e3d701cc06b47ac0d7fbb9b077cd970c01.mp3"}],"createdAt":"2020-03-18T02:49:03.418Z","updatedAt":"2020-03-18T02:49:03.418Z","lastPublishedAt":"2020-03-18T02:49:03.418Z"},{"id":"7310","name":"The Struts - Body Talks ft. Kesha","description":"There is a significant lack of The Struts maps out there, so figured I'd get the ball rolling with this one. \n\nThe expert+ map was made by the incredible ConnorJC. He has a great mapping style and regularly uploads charts in the expert to expert+ range. You can check him out here:\nhttps://www.youtube.com/channel/UC_XqKPpfBiWEYZ-dhcKRPBw\nhttps://bsaber.com/members/connorjc/\n\nAll other difficulties are included as well\n\nEnjoy!","uploader":{"id":4785,"name":"stumi","uniqueSet":false,"hash":"5cff0b7398cc5a672c84f720","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro","type":"SIMPLE"},"metadata":{"bpm":186.0,"duration":176,"songName":"Body Talks","songSubName":"Ft. Kesha","songAuthorName":"The Struts","levelAuthorName":"Stumi & ConnorJC"},"stats":{"plays":0,"downloads":1554,"upvotes":760,"downvotes":9,"score":0.9223},"uploaded":"2019-12-01T13:43:45.996Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"ed72bd798a0d05592ff63a5ad844cdff01a76800","key":"7310","state":"Published","createdAt":"2019-12-01T13:43:45.996Z","sageScore":6,"diffs":[{"njs":12.0,"offset":0.0,"notes":130,"bombs":0,"obstacles":54,"nps":0.766,"length":526.0,"characteristic":"Standard","difficulty":"Easy","events":2193,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":169.677,"paritySummary":{"errors":26,"warns":14,"resets":0}},{"njs":12.0,"offset":0.0,"notes":218,"bombs":4,"obstacles":60,"nps":1.285,"length":526.0,"characteristic":"Standard","difficulty":"Normal","events":2193,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":169.677,"paritySummary":{"errors":37,"warns":26,"resets":0}},{"njs":14.0,"offset":0.8,"notes":446,"bombs":7,"obstacles":65,"nps":2.614,"length":529.0,"characteristic":"Standard","difficulty":"Hard","events":2193,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":170.645,"paritySummary":{"errors":20,"warns":10,"resets":5}},{"njs":16.0,"offset":0.4,"notes":704,"bombs":22,"obstacles":67,"nps":4.115,"length":530.333,"characteristic":"Standard","difficulty":"Expert","events":2193,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":171.075,"paritySummary":{"errors":5,"warns":7,"resets":1}},{"njs":19.0,"offset":0.25,"notes":777,"bombs":6,"obstacles":25,"nps":4.566,"length":527.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":2193,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":170.161,"paritySummary":{"errors":7,"warns":8,"resets":2}}],"downloadURL":"https://cdn.beatsaver.com/ed72bd798a0d05592ff63a5ad844cdff01a76800.zip","coverURL":"https://cdn.beatsaver.com/ed72bd798a0d05592ff63a5ad844cdff01a76800.jpg","previewURL":"https://cdn.beatsaver.com/ed72bd798a0d05592ff63a5ad844cdff01a76800.mp3"}],"createdAt":"2019-12-01T13:43:45.996Z","updatedAt":"2019-12-01T13:43:45.996Z","lastPublishedAt":"2019-12-01T13:43:45.996Z"},{"id":"38ec","name":"The Bad Touch - Bloodhound Gang - BT90","description":"This map is part of a 90s songpack. Search \"BT90\" to find all the songs in the songpack.\r\nMap is created by Heisenberg_IRL. Check out https://www.twitch.tv/heisenberg_irl\r\nLights are made by XypherOrion. Check out https://www.twitch.tv/xypherorion\r\n\r\nSpecial thanks to Fafurion for feedback and playtesting","uploader":{"id":27983,"name":"heisenbergirl","uniqueSet":true,"hash":"5cff0b7298cc5a672c84ec30","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ec30?d=retro","type":"SIMPLE"},"metadata":{"bpm":123.0,"duration":234,"songName":"The Bad Touch","songSubName":"Bloodhound Gang [BT90]","songAuthorName":"Heisenberg & XypherOrion","levelAuthorName":"heisenbergirl"},"stats":{"plays":0,"downloads":5177,"upvotes":2043,"downvotes":65,"score":0.9223},"uploaded":"2019-02-23T13:21:25Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"d5e0ebff74ee79f517bbb580f3c55e389b09bfa0","key":"38ec","state":"Published","createdAt":"2019-02-23T13:21:25Z","sageScore":6,"diffs":[{"njs":14.0,"offset":0.0,"notes":809,"bombs":0,"obstacles":12,"nps":3.694,"length":449.0,"characteristic":"Standard","difficulty":"Expert","events":2108,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":219.024,"paritySummary":{"errors":55,"warns":110,"resets":0}},{"njs":16.0,"offset":0.0,"notes":1062,"bombs":2,"obstacles":0,"nps":4.849,"length":449.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":2108,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":219.024,"paritySummary":{"errors":113,"warns":137,"resets":2}}],"downloadURL":"https://cdn.beatsaver.com/d5e0ebff74ee79f517bbb580f3c55e389b09bfa0.zip","coverURL":"https://cdn.beatsaver.com/d5e0ebff74ee79f517bbb580f3c55e389b09bfa0.jpg","previewURL":"https://cdn.beatsaver.com/d5e0ebff74ee79f517bbb580f3c55e389b09bfa0.mp3"}],"createdAt":"2019-02-23T13:21:25Z","updatedAt":"2019-02-23T13:21:25Z","lastPublishedAt":"2019-02-23T13:21:25Z"},{"id":"abbf","name":"PSYQUI feat. Marpril - Girly Cupid [Noodle Extensions]","description":"Expert Preview: https://www.youtube.com/watch?v=oD8JbrtlhZc\n\nSubmission #47 | 2nd place in the Building Blocks 2020 mapping contest. I hope you enjoy my first dive into Noodle Extensions and Chroma. This was a blast to make!\n\nComments? Like it? Hate it? Let me know on Discord @Bloodcloak#5725 !","uploader":{"id":71661,"name":"bloodcloak","uniqueSet":true,"hash":"5cff0b7698cc5a672c8551d3","avatar":"https://cdn.beatsaver.com/avatar/205707707187986442.png","type":"DISCORD"},"metadata":{"bpm":133.0,"duration":244,"songName":"Girly Cupid","songSubName":"feat. Marpril","songAuthorName":"PSYQUI","levelAuthorName":"Bloodcloak"},"stats":{"plays":0,"downloads":4637,"upvotes":1327,"downvotes":32,"score":0.9222},"uploaded":"2020-05-29T01:13:29.257Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"09083ec4540755cac095737c4af6af2910c4e856","key":"abbf","state":"Published","createdAt":"2020-05-29T01:13:29.257Z","sageScore":3,"diffs":[{"njs":18.0,"offset":-0.2,"notes":764,"bombs":0,"obstacles":36331,"nps":3.232,"length":524.0,"characteristic":"Standard","difficulty":"Expert","events":3539,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":236.391,"paritySummary":{"errors":28,"warns":16,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/09083ec4540755cac095737c4af6af2910c4e856.zip","coverURL":"https://cdn.beatsaver.com/09083ec4540755cac095737c4af6af2910c4e856.jpg","previewURL":"https://cdn.beatsaver.com/09083ec4540755cac095737c4af6af2910c4e856.mp3"}],"createdAt":"2020-05-29T01:13:29.257Z","updatedAt":"2020-05-29T01:13:29.257Z","lastPublishedAt":"2020-05-29T01:13:29.257Z"},{"id":"1f90","name":"RIOT - Overkill","description":"","uploader":{"id":408,"name":"nuketime","uniqueSet":true,"hash":"5cff0b7498cc5a672c8507f7","avatar":"https://cdn.beatsaver.com/avatar/175811186007343104.png","type":"DISCORD"},"metadata":{"bpm":174.0,"duration":308,"songName":"Overkill","songSubName":"RIOT","songAuthorName":"Nuketime","levelAuthorName":"Nuketime"},"stats":{"plays":0,"downloads":7566,"upvotes":8186,"downvotes":415,"score":0.9222},"uploaded":"2018-11-10T20:57:38Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"2fddb136bda7f9e29b4cb6621d6d8e0f8a43b126","key":"1f90","state":"Published","createdAt":"2018-11-10T20:57:38Z","sageScore":5,"diffs":[{"njs":17.0,"offset":0.0,"notes":1812,"bombs":108,"obstacles":132,"nps":6.121,"length":858.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":3602,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":296.034,"paritySummary":{"errors":85,"warns":90,"resets":0},"stars":7.32}],"downloadURL":"https://cdn.beatsaver.com/2fddb136bda7f9e29b4cb6621d6d8e0f8a43b126.zip","coverURL":"https://cdn.beatsaver.com/2fddb136bda7f9e29b4cb6621d6d8e0f8a43b126.jpg","previewURL":"https://cdn.beatsaver.com/2fddb136bda7f9e29b4cb6621d6d8e0f8a43b126.mp3"}],"createdAt":"2018-11-10T20:57:38Z","updatedAt":"2018-11-10T20:57:38Z","lastPublishedAt":"2018-11-10T20:57:38Z"},{"id":"58e","name":"History Maker - Dean Fujioka","description":"Expert / Hard / Normal | Get your Beat Saber -- on ICE!!! The lighting for this is top notch ;)\r\n\r\nVideo: https://youtu.be/ZS8YwPvKLgw\r\n\r\nThis map is best practice compliant: https://bit.ly/2LjbURw","uploader":{"id":44595,"name":"awfulnaut","uniqueSet":true,"hash":"5cff0b7398cc5a672c84edac","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84edac?d=retro","type":"SIMPLE"},"metadata":{"bpm":201.0,"duration":187,"songName":"History Maker","songSubName":"Dean Fujioka","songAuthorName":"Awfulnaut","levelAuthorName":"awfulnaut"},"stats":{"plays":0,"downloads":2623,"upvotes":1327,"downvotes":32,"score":0.9222},"uploaded":"2018-06-17T19:41:50Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"998f9b0a3e8b85ad697e8a7aa2c8b7d1f70936ce","key":"58e","state":"Published","createdAt":"2018-06-17T19:41:50Z","sageScore":6,"diffs":[{"njs":10.0,"offset":0.0,"notes":513,"bombs":12,"obstacles":27,"nps":2.836,"length":606.0,"characteristic":"Standard","difficulty":"Normal","events":1153,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":180.896,"paritySummary":{"errors":86,"warns":4,"resets":0},"stars":1.77},{"njs":10.0,"offset":0.0,"notes":566,"bombs":0,"obstacles":27,"nps":3.129,"length":606.0,"characteristic":"Standard","difficulty":"Hard","events":1153,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":180.896,"paritySummary":{"errors":47,"warns":48,"resets":0}},{"njs":10.0,"offset":0.0,"notes":566,"bombs":0,"obstacles":27,"nps":3.129,"length":606.0,"characteristic":"Standard","difficulty":"Expert","events":1153,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":180.896,"paritySummary":{"errors":43,"warns":35,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/998f9b0a3e8b85ad697e8a7aa2c8b7d1f70936ce.zip","coverURL":"https://cdn.beatsaver.com/998f9b0a3e8b85ad697e8a7aa2c8b7d1f70936ce.jpg","previewURL":"https://cdn.beatsaver.com/998f9b0a3e8b85ad697e8a7aa2c8b7d1f70936ce.mp3"}],"createdAt":"2018-06-17T19:41:50Z","updatedAt":"2018-06-17T19:41:50Z","lastPublishedAt":"2018-06-17T19:41:50Z"},{"id":"14bd","name":"Starship - We Built This City","description":"Collab map between BennyDaBeast, Rustic and GreatYazer\r\nExper / Hard / Normal\r\nhttps://www.youtube.com/watch?v=KnLnUBIbfbM\r\nhttps://streamable.com/s8xvc","uploader":{"id":12996,"name":"rustic","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e8c4","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro","type":"SIMPLE"},"metadata":{"bpm":143.0,"duration":298,"songName":"We Built this City","songSubName":"Starship","songAuthorName":"GreatYazer, Rustic, BennyDaBeast","levelAuthorName":"rustic"},"stats":{"plays":0,"downloads":9482,"upvotes":3568,"downvotes":145,"score":0.9221},"uploaded":"2018-09-12T19:05:18Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"477fac9561e8931c7efaf49faa065611348f159d","key":"14bd","state":"Published","createdAt":"2018-09-12T19:05:18Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":472,"bombs":26,"obstacles":32,"nps":1.64,"length":686.0,"characteristic":"Standard","difficulty":"Normal","events":1843,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":287.832,"paritySummary":{"errors":64,"warns":56,"resets":0},"stars":1.03},{"njs":10.0,"offset":0.0,"notes":759,"bombs":26,"obstacles":34,"nps":2.633,"length":687.0,"characteristic":"Standard","difficulty":"Hard","events":1843,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":288.252,"paritySummary":{"errors":69,"warns":90,"resets":0},"stars":1.66},{"njs":11.0,"offset":0.0,"notes":967,"bombs":26,"obstacles":36,"nps":3.355,"length":687.0,"characteristic":"Standard","difficulty":"Expert","events":1843,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":288.252,"paritySummary":{"errors":71,"warns":126,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/477fac9561e8931c7efaf49faa065611348f159d.zip","coverURL":"https://cdn.beatsaver.com/477fac9561e8931c7efaf49faa065611348f159d.jpg","previewURL":"https://cdn.beatsaver.com/477fac9561e8931c7efaf49faa065611348f159d.mp3"}],"createdAt":"2018-09-12T19:05:18Z","updatedAt":"2018-09-12T19:05:18Z","lastPublishedAt":"2018-09-12T19:05:18Z"},{"id":"10e6","name":"We Wont Be Alone","description":"And here it is! \r\n\r\nAnother highly requested map!\r\n\r\nEnjoy to your hearts content!\r\n\r\n(P.s Thanks to everyone who supports me in my mapping endeavors and appreciate my work! it means a lot to me!)","uploader":{"id":4289111,"name":"blackblazon","uniqueSet":true,"hash":"5cff0b7398cc5a672c84ef34","avatar":"https://cdn.beatsaver.com/avatar/127162370538733568.png","type":"DISCORD"},"metadata":{"bpm":175.0,"duration":236,"songName":"We Wont Be Alone","songSubName":"Feint","songAuthorName":"BlackBlazon","levelAuthorName":"blackblazon"},"stats":{"plays":0,"downloads":1611,"upvotes":1677,"downvotes":48,"score":0.9221},"uploaded":"2018-08-20T13:09:23Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"fdb563492b79e57464424f73aa95ccc719f44576","key":"10e6","state":"Published","createdAt":"2018-08-20T13:09:23Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":1017,"bombs":0,"obstacles":0,"nps":4.461,"length":665.0,"characteristic":"Standard","difficulty":"Expert","events":1043,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":228.0,"paritySummary":{"errors":15,"warns":5,"resets":0}},{"njs":15.0,"offset":0.0,"notes":1017,"bombs":0,"obstacles":0,"nps":4.461,"length":665.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":1043,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":228.0,"paritySummary":{"errors":15,"warns":5,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/fdb563492b79e57464424f73aa95ccc719f44576.zip","coverURL":"https://cdn.beatsaver.com/fdb563492b79e57464424f73aa95ccc719f44576.jpg","previewURL":"https://cdn.beatsaver.com/fdb563492b79e57464424f73aa95ccc719f44576.mp3"}],"createdAt":"2018-08-20T13:09:23Z","updatedAt":"2018-08-20T13:09:23Z","lastPublishedAt":"2018-08-20T13:09:23Z"},{"id":"1a0b6","name":"[Electro Swing Pack] The Electric Swing Circus - Empires","description":"Nixie Presents: Electro Swing Pack!\n\n10 electro swing songs with expert and expert+ diffs to make your booty swing!\n\nGet The Pack: \nhttps://bsaber.com/electro-swing-pack/\n\nMap Gameplay:\nhttps://youtu.be/WJy6_2cTPYg\n\nComplete Pack Playthrough:\nhttps://youtu.be/yj9rw4MEh7s\n\nHeyya! After looking for some dancey electro swing maps, I noticed that there barely are any!\nSo I took matters into my own hands, learning mapping basically from scratch,\nscrapping my first failed attempts and then finally making a map that was good.\nI found it so fun that I ended up making 9 more maps,\nand fine tuned them with the help of the testplayers in BSMG,\nas well as the lovely curators from the bsaber discord.\n\nHuge thanks in particular to:\nMonstor, Bearly, Noxn, Bullet, Vaser888, Tocxx, Jafdy, Storm Knight and Pixelguy!\n\nIf you want to talk to me, here is my Discord:\nNixie.Korten#6944","uploader":{"id":4286374,"name":"nixiekorten","uniqueSet":true,"hash":"6096752e12772e0006e2f7e6","avatar":"https://cdn.beatsaver.com/avatar/840550221690699776.png","type":"DISCORD"},"metadata":{"bpm":120.0,"duration":173,"songName":"Empires","songSubName":"","songAuthorName":"The Electric Swing Circus","levelAuthorName":"Nixie.Korten"},"stats":{"plays":0,"downloads":12715,"upvotes":577,"downvotes":3,"score":0.922},"uploaded":"2021-07-08T15:24:55.769Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"cecc89118b3a75ea7d65ceff5949b3ef19fea716","key":"1a0b6","state":"Published","createdAt":"2021-07-08T15:24:55.769Z","sageScore":4,"diffs":[{"njs":16.0,"offset":-0.5,"notes":522,"bombs":0,"obstacles":24,"nps":3.173,"length":329.0,"characteristic":"Standard","difficulty":"Expert","events":2051,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":164.5,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":19.0,"offset":0.25,"notes":823,"bombs":0,"obstacles":0,"nps":5.003,"length":329.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":2051,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":164.5,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/cecc89118b3a75ea7d65ceff5949b3ef19fea716.zip","coverURL":"https://cdn.beatsaver.com/cecc89118b3a75ea7d65ceff5949b3ef19fea716.jpg","previewURL":"https://cdn.beatsaver.com/cecc89118b3a75ea7d65ceff5949b3ef19fea716.mp3"}],"createdAt":"2021-07-08T15:24:55.769Z","updatedAt":"2021-07-08T15:24:55.769Z","lastPublishedAt":"2021-07-08T15:24:55.769Z"},{"id":"97ec","name":"TheFatRat ft. Laura Brehm - MAYDAY (Nightcore Mix)","description":"#214\n\nYoutube Preview : https://youtu.be/YuAvugqwLiA","uploader":{"id":4284588,"name":"rigid","uniqueSet":true,"hash":"5cff0b7598cc5a672c852224","avatar":"https://cdn.beatsaver.com/avatar/295613108947386368.png","type":"DISCORD"},"metadata":{"bpm":173.0,"duration":217,"songName":"MAYDAY (Nightcore Mix)","songSubName":"","songAuthorName":"TheFatRat ft. Laura Brehm","levelAuthorName":"Rigid"},"stats":{"plays":0,"downloads":1384,"upvotes":782,"downvotes":10,"score":0.922},"uploaded":"2020-04-06T03:03:12.881Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"596010af1d16182372e2145d3b1687ecfed46387","key":"97ec","state":"Published","createdAt":"2020-04-06T03:03:12.881Z","sageScore":4,"diffs":[{"njs":16.0,"offset":0.0,"notes":751,"bombs":30,"obstacles":128,"nps":3.599,"length":600.0,"characteristic":"Standard","difficulty":"Expert","events":2311,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":208.092,"paritySummary":{"errors":0,"warns":0,"resets":5}}],"downloadURL":"https://cdn.beatsaver.com/596010af1d16182372e2145d3b1687ecfed46387.zip","coverURL":"https://cdn.beatsaver.com/596010af1d16182372e2145d3b1687ecfed46387.jpg","previewURL":"https://cdn.beatsaver.com/596010af1d16182372e2145d3b1687ecfed46387.mp3"}],"createdAt":"2020-04-06T03:03:12.881Z","updatedAt":"2020-04-06T03:03:12.881Z","lastPublishedAt":"2020-04-06T03:03:12.881Z"},{"id":"33c2","name":"Drive By - Train","description":"Another non weeb song, \"Drive by\" by Train, one of my favorite songs from the early days. Brought it from Itunes a long time ago so it's the highest quality file you can get :)","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":122.0,"duration":196,"songName":"Drive By","songSubName":"Train","songAuthorName":"Joetastic","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":3897,"upvotes":1087,"downvotes":22,"score":0.922},"uploaded":"2019-02-05T09:08:27Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"5d3f6821934945c581882c067ef44d7e8c086423","key":"33c2","state":"Published","createdAt":"2019-02-05T09:08:27Z","sageScore":6,"diffs":[{"njs":15.0,"offset":0.0,"notes":895,"bombs":0,"obstacles":6,"nps":4.795,"length":379.5,"characteristic":"Standard","difficulty":"Expert","events":1734,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":186.639,"paritySummary":{"errors":67,"warns":85,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/5d3f6821934945c581882c067ef44d7e8c086423.zip","coverURL":"https://cdn.beatsaver.com/5d3f6821934945c581882c067ef44d7e8c086423.jpg","previewURL":"https://cdn.beatsaver.com/5d3f6821934945c581882c067ef44d7e8c086423.mp3"}],"createdAt":"2019-02-05T09:08:27Z","updatedAt":"2019-02-05T09:08:27Z","lastPublishedAt":"2019-02-05T09:08:27Z"},{"id":"edf","name":"VORACITY","description":"enjoy :)","uploader":{"id":4285521,"name":"ejiejidayo","uniqueSet":true,"hash":"5cff0b7398cc5a672c84fc58","avatar":"https://cdn.beatsaver.com/avatar/224894241279574016.png","type":"DISCORD"},"metadata":{"bpm":200.0,"duration":221,"songName":"VORACITY","songSubName":"OVERLOAD III OP","songAuthorName":"ejiejidayo","levelAuthorName":"ejiejidayo"},"stats":{"plays":0,"downloads":4278,"upvotes":3077,"downvotes":119,"score":0.922},"uploaded":"2018-08-10T09:36:58Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"7e096457e053dc0ee70fb5d08ed10332e5d5b75b","key":"edf","state":"Published","createdAt":"2018-08-10T09:36:58Z","sageScore":4,"diffs":[{"njs":10.0,"offset":0.0,"notes":778,"bombs":37,"obstacles":10,"nps":3.723,"length":696.5,"characteristic":"Standard","difficulty":"Expert","events":827,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":208.95,"paritySummary":{"errors":117,"warns":85,"resets":3}}],"downloadURL":"https://cdn.beatsaver.com/7e096457e053dc0ee70fb5d08ed10332e5d5b75b.zip","coverURL":"https://cdn.beatsaver.com/7e096457e053dc0ee70fb5d08ed10332e5d5b75b.jpg","previewURL":"https://cdn.beatsaver.com/7e096457e053dc0ee70fb5d08ed10332e5d5b75b.mp3"}],"createdAt":"2018-08-10T09:36:58Z","updatedAt":"2018-08-10T09:36:58Z","lastPublishedAt":"2018-08-10T09:36:58Z"},{"id":"4f55","name":"Setting Sail, Coming Home (Bastion OST) - Darren Korb","description":"I remade my first map. Now with 75% less mid notes, and 300% more difficulty options! Disclaimer: Easy difficulty is actually Normal.\nSetting Sail, Coming Home is the credits theme for the game Bastion by Supergiant Games. It features vocals by Ashley Barrett and Darren Korb, who sing the verses of Zia and Zulf, respectively. As there are two vocalists in this song, I made two Normal difficulties, which each follow a different vocalist. The Hard and Expert difficulties follow both at the same time. Expert is mostly just a bit more fleshed out Hard, it's not too much more difficult.\nDefinitely check out this game if you haven't played it already.\nThanks to the playtesters Fruhead and CyanSnow on the modding Discord for testing this one.\nSee it played here:\nZia: https://youtu.be/WCcH3Sd6n-Y\nZulf: https://youtu.be/vcu_FX3c3t0\nHard: https://youtu.be/zUvWu9XglNA\nExpert: https://youtu.be/s2E2uvX5lJ4","uploader":{"id":12233,"name":"wolfb","uniqueSet":true,"hash":"5cff0b7698cc5a672c854e4f","avatar":"https://www.gravatar.com/avatar/5cff0b7698cc5a672c854e4f?d=retro","type":"SIMPLE"},"metadata":{"bpm":120.0,"duration":164,"songName":"Setting Sail, Coming Home","songSubName":"Darren Korb","songAuthorName":"Wolfb","levelAuthorName":"wolfb"},"stats":{"plays":0,"downloads":1272,"upvotes":666,"downvotes":6,"score":0.9219},"uploaded":"2019-05-27T11:55:36Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"df2178c8d5cfa459861c263934e6a598b15a5452","key":"4f55","state":"Published","createdAt":"2019-05-27T11:55:36Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":251,"bombs":0,"obstacles":11,"nps":1.569,"length":320.0,"characteristic":"Standard","difficulty":"Easy","events":1099,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":160.0,"paritySummary":{"errors":27,"warns":5,"resets":0}},{"njs":10.0,"offset":0.0,"notes":242,"bombs":0,"obstacles":11,"nps":1.513,"length":320.0,"characteristic":"Standard","difficulty":"Normal","events":1099,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":160.0,"paritySummary":{"errors":26,"warns":7,"resets":0}},{"njs":12.0,"offset":0.0,"notes":368,"bombs":0,"obstacles":11,"nps":2.3,"length":320.0,"characteristic":"Standard","difficulty":"Hard","events":1102,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":160.0,"paritySummary":{"errors":27,"warns":36,"resets":0}},{"njs":14.0,"offset":0.0,"notes":444,"bombs":0,"obstacles":11,"nps":2.775,"length":320.0,"characteristic":"Standard","difficulty":"Expert","events":1104,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":160.0,"paritySummary":{"errors":17,"warns":37,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/df2178c8d5cfa459861c263934e6a598b15a5452.zip","coverURL":"https://cdn.beatsaver.com/df2178c8d5cfa459861c263934e6a598b15a5452.jpg","previewURL":"https://cdn.beatsaver.com/df2178c8d5cfa459861c263934e6a598b15a5452.mp3"}],"createdAt":"2019-05-27T11:55:36Z","updatedAt":"2019-05-27T11:55:36Z","lastPublishedAt":"2019-05-27T11:55:36Z"},{"id":"1f03","name":"Monster - Skillet (Kole Edit)","description":"2018-11-08: Reupload because of ranking! Scoreboards are unaffected.\r\n\r\nMonster by hard rock band Skillet was a request I got and I found it worthy and fun to make into a Beat Saber map, so here it is!\r\nSong has been edited and re-arranged to be tighter and not too repetitive.\r\n\r\nPreview:\r\nhttps://youtu.be/avTEevEonOA\r\n\r\nBPM: 135\r\nDuration: 1:52\r\nEasy, Normal, Hard and Expert difficulties.\r\n\r\nEasy: 247, 8 obstacles, 4 mines\r\nNormal: 300 notes, 8 obstacles, 8 mines\r\nHard: 423 notes, 8 obstacles, 8 mines\r\nExpert: 437 notes, 8 obstacles, 8 mines\r\n\r\nThanks to Edzo, RaZn, VenclaireVR, squeaksies and Todokete for playtesting!\r\n\r\nEnjoy!","uploader":{"id":4285318,"name":"kolezan","uniqueSet":true,"hash":"5cff0b7398cc5a672c84fcbb","avatar":"https://cdn.beatsaver.com/avatar/220513618763055106.png","type":"DISCORD"},"metadata":{"bpm":135.0,"duration":112,"songName":"Monster","songSubName":"Skillet","songAuthorName":"Kolezan","levelAuthorName":"Kolezan"},"stats":{"plays":0,"downloads":8892,"upvotes":4266,"downvotes":185,"score":0.9219},"uploaded":"2018-11-08T21:27:23Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"5730ecc93a6bc9147bda83f7975791a03ba5b90b","key":"1f03","state":"Published","createdAt":"2018-11-08T21:27:23Z","sageScore":4,"diffs":[{"njs":10.5,"offset":0.0,"notes":247,"bombs":4,"obstacles":8,"nps":2.365,"length":235.0,"characteristic":"Standard","difficulty":"Easy","events":627,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":104.444,"paritySummary":{"errors":47,"warns":7,"resets":2}},{"njs":10.5,"offset":0.0,"notes":300,"bombs":8,"obstacles":8,"nps":2.872,"length":235.0,"characteristic":"Standard","difficulty":"Normal","events":627,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":104.444,"paritySummary":{"errors":32,"warns":20,"resets":0}},{"njs":11.0,"offset":0.0,"notes":423,"bombs":8,"obstacles":8,"nps":4.05,"length":235.0,"characteristic":"Standard","difficulty":"Hard","events":627,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":104.444,"paritySummary":{"errors":77,"warns":51,"resets":0}},{"njs":11.0,"offset":0.0,"notes":437,"bombs":8,"obstacles":8,"nps":4.184,"length":235.0,"characteristic":"Standard","difficulty":"Expert","events":627,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":104.444,"paritySummary":{"errors":71,"warns":71,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/5730ecc93a6bc9147bda83f7975791a03ba5b90b.zip","coverURL":"https://cdn.beatsaver.com/5730ecc93a6bc9147bda83f7975791a03ba5b90b.jpg","previewURL":"https://cdn.beatsaver.com/5730ecc93a6bc9147bda83f7975791a03ba5b90b.mp3"}],"createdAt":"2018-11-08T21:27:23Z","updatedAt":"2018-11-08T21:27:23Z","lastPublishedAt":"2018-11-08T21:27:23Z"},{"id":"15c6","name":"Ghostbusters - Ray Parker Jr","description":"","uploader":{"id":4285018,"name":"majorpickle","uniqueSet":true,"hash":"5cff0b7398cc5a672c84f792","avatar":"https://cdn.beatsaver.com/avatar/450358937657671680.png","type":"DISCORD"},"metadata":{"bpm":115.22,"duration":246,"songName":"Ghostbusters","songSubName":"","songAuthorName":"Ray Parker Jr.","levelAuthorName":"Majorpickle"},"stats":{"plays":0,"downloads":7046,"upvotes":1877,"downvotes":58,"score":0.9219},"uploaded":"2018-09-19T02:38:07Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"cc424123372e316bd2fc9439bf0972aded811d04","state":"Published","createdAt":"2021-08-27T12:04:43.371828Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":651,"bombs":15,"obstacles":80,"nps":2.828,"length":442.0,"characteristic":"Standard","difficulty":"Normal","events":3704,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":230.168,"paritySummary":{"errors":25,"warns":25,"resets":4}},{"njs":11.0,"offset":0.0,"notes":933,"bombs":15,"obstacles":80,"nps":4.035,"length":444.031,"characteristic":"Standard","difficulty":"Hard","events":3704,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":231.226,"paritySummary":{"errors":54,"warns":62,"resets":4}},{"njs":15.0,"offset":0.0,"notes":933,"bombs":15,"obstacles":80,"nps":4.035,"length":444.031,"characteristic":"Standard","difficulty":"Expert","events":3704,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":231.226,"paritySummary":{"errors":54,"warns":62,"resets":4}},{"njs":13.0,"offset":0.0,"notes":921,"bombs":15,"obstacles":72,"nps":3.983,"length":444.031,"characteristic":"360Degree","difficulty":"Expert","events":2719,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":231.226,"paritySummary":{"errors":51,"warns":50,"resets":6}}],"downloadURL":"https://cdn.beatsaver.com/cc424123372e316bd2fc9439bf0972aded811d04.zip","coverURL":"https://cdn.beatsaver.com/cc424123372e316bd2fc9439bf0972aded811d04.jpg","previewURL":"https://cdn.beatsaver.com/cc424123372e316bd2fc9439bf0972aded811d04.mp3"}],"createdAt":"2018-09-19T02:38:07Z","updatedAt":"2021-08-27T12:05:13.876602Z","lastPublishedAt":"2021-08-27T12:04:50.582582Z"},{"id":"19e23","name":"Home Free - Sea Shanty Medley","description":"Home Free medleys are amazing. This one was kind of a chat request. Cinema included.","uploader":{"id":4287802,"name":"origintt","uniqueSet":true,"hash":"5ef66418cb25920006b50ff3","avatar":"https://cdn.beatsaver.com/avatar/414156328072773632.png","type":"DISCORD"},"metadata":{"bpm":99.0,"duration":236,"songName":"Sea Shanty Medley","songSubName":"","songAuthorName":"Home Free","levelAuthorName":"OriginTT"},"stats":{"plays":0,"downloads":6705,"upvotes":603,"downvotes":4,"score":0.9218},"uploaded":"2021-07-04T19:18:25.991Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"1fb8f1cd4a7e05c0a2463e36522298f0b24353ad","key":"19e23","state":"Published","createdAt":"2021-07-04T19:18:25.991Z","sageScore":5,"diffs":[{"njs":19.0,"offset":0.0,"notes":990,"bombs":0,"obstacles":20,"nps":4.341,"length":376.316,"characteristic":"Standard","difficulty":"ExpertPlus","events":1464,"chroma":false,"me":false,"ne":false,"cinema":true,"seconds":228.07,"paritySummary":{"errors":5,"warns":8,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/1fb8f1cd4a7e05c0a2463e36522298f0b24353ad.zip","coverURL":"https://cdn.beatsaver.com/1fb8f1cd4a7e05c0a2463e36522298f0b24353ad.jpg","previewURL":"https://cdn.beatsaver.com/1fb8f1cd4a7e05c0a2463e36522298f0b24353ad.mp3"}],"createdAt":"2021-07-04T19:18:25.991Z","updatedAt":"2021-07-04T19:18:25.991Z","lastPublishedAt":"2021-07-04T19:18:25.991Z"},{"id":"744f","name":"Fantastic Dreamer (TV Size) [Konosuba! Opening] - Machico","description":"This map was converted from one of my old maps.\n\nFeel free to DM me on discord @Joetastic#2501","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":185.0,"duration":91,"songName":"Fantastic Dreamer (TV Size)","songSubName":"","songAuthorName":"Machico","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":4444,"upvotes":1290,"downvotes":31,"score":0.9218},"uploaded":"2019-12-07T07:21:35.291Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"c86360baf99485e61e18a80d48470c38f0faf4d3","key":"744f","state":"Published","createdAt":"2019-12-07T07:21:35.291Z","sageScore":3,"diffs":[{"njs":11.0,"offset":0.0,"notes":256,"bombs":0,"obstacles":0,"nps":2.99,"length":264.0,"characteristic":"Standard","difficulty":"Hard","events":1956,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":85.622,"paritySummary":{"errors":20,"warns":16,"resets":0}},{"njs":13.0,"offset":0.0,"notes":371,"bombs":0,"obstacles":2,"nps":4.333,"length":264.0,"characteristic":"Standard","difficulty":"Expert","events":1956,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":85.622,"paritySummary":{"errors":15,"warns":25,"resets":0}},{"njs":15.0,"offset":0.0,"notes":490,"bombs":0,"obstacles":4,"nps":5.723,"length":264.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":1956,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":85.622,"paritySummary":{"errors":20,"warns":24,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/c86360baf99485e61e18a80d48470c38f0faf4d3.zip","coverURL":"https://cdn.beatsaver.com/c86360baf99485e61e18a80d48470c38f0faf4d3.jpg","previewURL":"https://cdn.beatsaver.com/c86360baf99485e61e18a80d48470c38f0faf4d3.mp3"}],"createdAt":"2019-12-07T07:21:35.291Z","updatedAt":"2019-12-07T07:21:35.291Z","lastPublishedAt":"2019-12-07T07:21:35.291Z"},{"id":"4a3f","name":"[Anniversary] I Remember - Tristam [Heisenberg]","description":"Part of the Anniversary Song Pack","uploader":{"id":37070,"name":"anniversaryteam","uniqueSet":true,"hash":"5cff0b7798cc5a672c8565a3","avatar":"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro","type":"SIMPLE"},"metadata":{"bpm":110.0,"duration":231,"songName":"I Remember","songSubName":"Tristam","songAuthorName":"Heisenberg","levelAuthorName":"AnniversaryTeam"},"stats":{"plays":0,"downloads":3832,"upvotes":2835,"downvotes":107,"score":0.9218},"uploaded":"2019-05-03T14:09:51Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"349ef04192948a8404ab7942d2813be3e37cd8fd","key":"4a3f","state":"Published","createdAt":"2019-05-03T14:09:51Z","sageScore":8,"diffs":[{"njs":11.0,"offset":0.0,"notes":237,"bombs":0,"obstacles":4,"nps":1.137,"length":382.0,"characteristic":"Standard","difficulty":"Easy","events":8143,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":208.364,"paritySummary":{"errors":13,"warns":24,"resets":0}},{"njs":12.0,"offset":0.0,"notes":362,"bombs":0,"obstacles":6,"nps":1.737,"length":382.0,"characteristic":"Standard","difficulty":"Normal","events":8143,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":208.364,"paritySummary":{"errors":50,"warns":35,"resets":0}},{"njs":13.0,"offset":0.0,"notes":465,"bombs":0,"obstacles":6,"nps":2.232,"length":382.0,"characteristic":"Standard","difficulty":"Hard","events":8143,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":208.364,"paritySummary":{"errors":24,"warns":36,"resets":0}},{"njs":14.0,"offset":0.0,"notes":627,"bombs":0,"obstacles":16,"nps":3.009,"length":382.0,"characteristic":"Standard","difficulty":"Expert","events":8143,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":208.364,"paritySummary":{"errors":15,"warns":26,"resets":0}},{"njs":16.0,"offset":0.0,"notes":853,"bombs":0,"obstacles":17,"nps":4.094,"length":382.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":8153,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":208.364,"paritySummary":{"errors":43,"warns":111,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/349ef04192948a8404ab7942d2813be3e37cd8fd.zip","coverURL":"https://cdn.beatsaver.com/349ef04192948a8404ab7942d2813be3e37cd8fd.jpg","previewURL":"https://cdn.beatsaver.com/349ef04192948a8404ab7942d2813be3e37cd8fd.mp3"}],"createdAt":"2019-05-03T14:09:51Z","updatedAt":"2019-05-03T14:09:51Z","lastPublishedAt":"2019-05-03T14:09:51Z"},{"id":"17ac","name":"Holiday - Green Day","description":"Preview: https://www.youtube.com/watch?v=3eya5H-dYCc\nAlways enjoy making green day songs! We need more of them on beat saber!\nExpert - Hard - Normal\n\nhttps://twitter.com/TheDownyCat\nhttps://www.twitch.tv/downycat\nhttps://streamlabs.com/downycat/tip","uploader":{"id":4285982,"name":"downycat","uniqueSet":true,"hash":"5cff0b7398cc5a672c84ede5","avatar":"https://cdn.beatsaver.com/avatar/173538829888782336.png","type":"DISCORD"},"metadata":{"bpm":146.0,"duration":233,"songName":"Holiday","songSubName":"Green Day","songAuthorName":"DownyCat","levelAuthorName":"downycat"},"stats":{"plays":0,"downloads":4708,"upvotes":2355,"downvotes":82,"score":0.9218},"uploaded":"2018-09-28T14:34:41Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"403efd4b7ec08f129f45f0859323f2d0ee052b34","key":"17ac","state":"Published","createdAt":"2018-09-28T14:34:41Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":477,"bombs":0,"obstacles":42,"nps":2.161,"length":539.0,"characteristic":"Standard","difficulty":"Normal","events":1703,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":221.507,"paritySummary":{"errors":45,"warns":16,"resets":0}},{"njs":10.0,"offset":0.0,"notes":857,"bombs":0,"obstacles":2,"nps":3.872,"length":540.313,"characteristic":"Standard","difficulty":"Hard","events":1703,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":222.046,"paritySummary":{"errors":40,"warns":78,"resets":0}},{"njs":10.0,"offset":0.0,"notes":1075,"bombs":14,"obstacles":2,"nps":4.747,"length":552.875,"characteristic":"Standard","difficulty":"Expert","events":1703,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":227.209,"paritySummary":{"errors":44,"warns":69,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/403efd4b7ec08f129f45f0859323f2d0ee052b34.zip","coverURL":"https://cdn.beatsaver.com/403efd4b7ec08f129f45f0859323f2d0ee052b34.jpg","previewURL":"https://cdn.beatsaver.com/403efd4b7ec08f129f45f0859323f2d0ee052b34.mp3"}],"createdAt":"2018-09-28T14:34:41Z","updatedAt":"2018-09-28T14:34:41Z","lastPublishedAt":"2018-09-28T14:34:41Z"},{"id":"5c83","name":"The Kids Arent Alright - The Offspring","description":"Shoutouts to twitch.tv/bearlyj and twitch.tv/whipstickgostop for playtesting!","uploader":{"id":4285077,"name":"ris","uniqueSet":true,"hash":"5cff0b7598cc5a672c8535df","avatar":"https://cdn.beatsaver.com/avatar/191597992061435904.png","type":"DISCORD"},"metadata":{"bpm":194.0,"duration":183,"songName":"The Kids Arent Alright","songSubName":"","songAuthorName":"The Offspring","levelAuthorName":"Ris"},"stats":{"plays":0,"downloads":5715,"upvotes":2235,"downvotes":76,"score":0.9217},"uploaded":"2019-08-12T23:40:01.490Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"20986d8f9b32820de9a1953bf11db91abd27db27","key":"5c83","state":"Published","createdAt":"2019-08-12T23:40:01.490Z","sageScore":4,"diffs":[{"njs":10.0,"offset":1.0,"notes":328,"bombs":2,"obstacles":3,"nps":1.848,"length":573.809,"characteristic":"Standard","difficulty":"Normal","events":396,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":177.467,"paritySummary":{"errors":44,"warns":50,"resets":0}},{"njs":12.0,"offset":1.0,"notes":553,"bombs":8,"obstacles":3,"nps":3.116,"length":573.809,"characteristic":"Standard","difficulty":"Hard","events":396,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":177.467,"paritySummary":{"errors":70,"warns":70,"resets":0}},{"njs":16.0,"offset":1.0,"notes":909,"bombs":8,"obstacles":3,"nps":5.122,"length":573.809,"characteristic":"Standard","difficulty":"Expert","events":396,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":177.467,"paritySummary":{"errors":61,"warns":70,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/20986d8f9b32820de9a1953bf11db91abd27db27.zip","coverURL":"https://cdn.beatsaver.com/20986d8f9b32820de9a1953bf11db91abd27db27.jpg","previewURL":"https://cdn.beatsaver.com/20986d8f9b32820de9a1953bf11db91abd27db27.mp3"}],"createdAt":"2019-08-12T23:40:01.490Z","updatedAt":"2019-08-12T23:40:01.490Z","lastPublishedAt":"2019-08-12T23:40:01.490Z"},{"id":"4a45","name":"[Anniversary] Nothing Stopping Me (ft. Kat Nestel) - Vicetone [BennyDaBeast]","description":"Part of the Anniversary Song Pack","uploader":{"id":37070,"name":"anniversaryteam","uniqueSet":true,"hash":"5cff0b7798cc5a672c8565a3","avatar":"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro","type":"SIMPLE"},"metadata":{"bpm":127.0,"duration":223,"songName":"Nothing Stopping Me (ft. Kat Nestel)","songSubName":"Vicetone","songAuthorName":"BennyDaBeast","levelAuthorName":"AnniversaryTeam"},"stats":{"plays":0,"downloads":3386,"upvotes":2390,"downvotes":84,"score":0.9217},"uploaded":"2019-05-03T14:10:40Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"01e9554069556f1756cbfcf9ac233b68d98b19c8","key":"4a45","state":"Published","createdAt":"2019-05-03T14:10:40Z","sageScore":7,"diffs":[{"njs":10.0,"offset":0.0,"notes":403,"bombs":104,"obstacles":22,"nps":1.568,"length":544.0,"characteristic":"Standard","difficulty":"Easy","events":2514,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":257.008,"paritySummary":{"errors":61,"warns":32,"resets":16}},{"njs":10.0,"offset":0.0,"notes":481,"bombs":104,"obstacles":22,"nps":1.872,"length":544.0,"characteristic":"Standard","difficulty":"Normal","events":2514,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":257.008,"paritySummary":{"errors":71,"warns":49,"resets":20}},{"njs":12.0,"offset":0.0,"notes":647,"bombs":104,"obstacles":22,"nps":2.517,"length":544.0,"characteristic":"Standard","difficulty":"Hard","events":2514,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":257.008,"paritySummary":{"errors":105,"warns":80,"resets":18}},{"njs":12.0,"offset":0.0,"notes":693,"bombs":104,"obstacles":22,"nps":3.274,"length":448.0,"characteristic":"Standard","difficulty":"Expert","events":2514,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":211.654,"paritySummary":{"errors":65,"warns":109,"resets":20}},{"njs":15.0,"offset":0.0,"notes":914,"bombs":96,"obstacles":34,"nps":4.318,"length":448.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":2514,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":211.654,"paritySummary":{"errors":94,"warns":128,"resets":20}}],"downloadURL":"https://cdn.beatsaver.com/01e9554069556f1756cbfcf9ac233b68d98b19c8.zip","coverURL":"https://cdn.beatsaver.com/01e9554069556f1756cbfcf9ac233b68d98b19c8.jpg","previewURL":"https://cdn.beatsaver.com/01e9554069556f1756cbfcf9ac233b68d98b19c8.mp3"}],"createdAt":"2019-05-03T14:10:40Z","updatedAt":"2019-05-03T14:10:40Z","lastPublishedAt":"2019-05-03T14:10:40Z"},{"id":"485a","name":"Lost in the Rhythm - Jamie Berry ft. Octavia Rose","description":"Got me twistin' and turnin' around in my Jimmy Choos\r\n\r\nOnce again get a variety of maps from the Funrankable team: Lighting and Ex+ by LittleAsi, Ex+ by Ryger, with Ex+, Expert, and Normal by baxter395. Enjoy each difficulty for a variety of novel styles.\r\n\r\nIf you enjoy our maps, please support the Funrankable Collective by contributing to our Patreon:\r\nhttps://www.patreon.com/funrankable\r\n\r\nThanks to these hip cats for playtesting and feedback: RedMagi, Qwasix","uploader":{"id":37517,"name":"funrankable","uniqueSet":true,"hash":"5cff0b7798cc5a672c8561ac","avatar":"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8561ac?d=retro","type":"SIMPLE"},"metadata":{"bpm":121.0,"duration":185,"songName":"Lost in the Rhythm","songSubName":"Jamie Berry ft. Octavia Rose","songAuthorName":"Funrankable","levelAuthorName":"Funrankable"},"stats":{"plays":0,"downloads":2942,"upvotes":2309,"downvotes":80,"score":0.9217},"uploaded":"2019-04-25T19:03:46Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"f819a2f44993ed7ea1630e103a106b2d1f7808ac","key":"485a","state":"Published","createdAt":"2019-04-25T19:03:46Z","sageScore":7,"diffs":[{"njs":11.0,"offset":1.0,"notes":350,"bombs":0,"obstacles":12,"nps":2.028,"length":348.0,"characteristic":"Standard","difficulty":"Easy","events":7779,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":172.562,"paritySummary":{"errors":48,"warns":44,"resets":0}},{"njs":12.0,"offset":1.0,"notes":673,"bombs":32,"obstacles":6,"nps":3.9,"length":348.0,"characteristic":"Standard","difficulty":"Normal","events":7779,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":172.562,"paritySummary":{"errors":39,"warns":20,"resets":9}},{"njs":14.0,"offset":0.0,"notes":785,"bombs":207,"obstacles":10,"nps":4.549,"length":348.0,"characteristic":"Standard","difficulty":"Hard","events":7779,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":172.562,"paritySummary":{"errors":37,"warns":22,"resets":11}},{"njs":14.0,"offset":0.0,"notes":899,"bombs":0,"obstacles":4,"nps":5.008,"length":362.0,"characteristic":"Standard","difficulty":"Expert","events":7794,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":179.504,"paritySummary":{"errors":38,"warns":35,"resets":0}},{"njs":16.0,"offset":0.0,"notes":786,"bombs":5,"obstacles":79,"nps":4.355,"length":364.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":7779,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":180.496,"paritySummary":{"errors":63,"warns":97,"resets":4}},{"njs":12.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"Lightshow","difficulty":"Easy","events":7779,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/f819a2f44993ed7ea1630e103a106b2d1f7808ac.zip","coverURL":"https://cdn.beatsaver.com/f819a2f44993ed7ea1630e103a106b2d1f7808ac.jpg","previewURL":"https://cdn.beatsaver.com/f819a2f44993ed7ea1630e103a106b2d1f7808ac.mp3"}],"createdAt":"2019-04-25T19:03:46Z","updatedAt":"2019-04-25T19:03:46Z","lastPublishedAt":"2019-04-25T19:03:46Z"},{"id":"19ca","name":"Bubble Pop - Hyuna","description":"Made for Nichole!\r\nCheck her out on twitch: https://www.twitch.tv/lovingwaifuu\r\n\r\nSee it in action: https://www.youtube.com/watch?v=U2-JYSybh9Y\r\n\r\nThank you to my playtesters:\r\n\r\nQTpop (https://www.twitch.tv/qtpop)\r\nDuovr (https://www.twitch.tv/duovr)\r\nXypherorion (https://www.twitch.tv/Xypherorion)\r\n\r\nI stream playing and making maps for beat saber: https://www.twitch.tv/fafurion","uploader":{"id":38202,"name":"fafurion","uniqueSet":false,"hash":"5cff0b7398cc5a672c84f945","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f945?d=retro","type":"SIMPLE"},"metadata":{"bpm":146.0,"duration":214,"songName":"Bubble Pop","songSubName":"Hyuna","songAuthorName":"Fafurion","levelAuthorName":"fafurion"},"stats":{"plays":0,"downloads":8139,"upvotes":2698,"downvotes":100,"score":0.9217},"uploaded":"2018-10-12T03:28:19Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"e8ed13a78cd1e566f754d0cb47d4b5cde8918abe","key":"19ca","state":"Published","createdAt":"2018-10-12T03:28:19Z","sageScore":6,"diffs":[{"njs":10.0,"offset":0.0,"notes":355,"bombs":0,"obstacles":2,"nps":1.695,"length":509.719,"characteristic":"Standard","difficulty":"Easy","events":1211,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":209.473,"paritySummary":{"errors":15,"warns":2,"resets":0},"stars":0.91},{"njs":10.0,"offset":0.0,"notes":497,"bombs":0,"obstacles":2,"nps":2.373,"length":509.719,"characteristic":"Standard","difficulty":"Normal","events":1211,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":209.473,"paritySummary":{"errors":28,"warns":3,"resets":0}},{"njs":10.0,"offset":0.0,"notes":677,"bombs":0,"obstacles":87,"nps":3.232,"length":509.719,"characteristic":"Standard","difficulty":"Hard","events":1211,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":209.473,"paritySummary":{"errors":51,"warns":47,"resets":0},"stars":2.17},{"njs":13.0,"offset":0.0,"notes":791,"bombs":0,"obstacles":118,"nps":3.776,"length":509.719,"characteristic":"Standard","difficulty":"Expert","events":1211,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":209.473,"paritySummary":{"errors":70,"warns":64,"resets":0},"stars":2.8}],"downloadURL":"https://cdn.beatsaver.com/e8ed13a78cd1e566f754d0cb47d4b5cde8918abe.zip","coverURL":"https://cdn.beatsaver.com/e8ed13a78cd1e566f754d0cb47d4b5cde8918abe.jpg","previewURL":"https://cdn.beatsaver.com/e8ed13a78cd1e566f754d0cb47d4b5cde8918abe.mp3"}],"createdAt":"2018-10-12T03:28:19Z","updatedAt":"2018-10-12T03:28:19Z","lastPublishedAt":"2018-10-12T03:28:19Z"},{"id":"3a4","name":"Boulevard of Broken Dreams - Green Day","description":"Expert - Hard - Normal\n1000+ Notes on Expert\nLighting Events\n\nhttps://twitter.com/TheDownyCat\nhttps://www.twitch.tv/downycat\nhttps://streamlabs.com/downycat/tip","uploader":{"id":4285982,"name":"downycat","uniqueSet":true,"hash":"5cff0b7398cc5a672c84ede5","avatar":"https://cdn.beatsaver.com/avatar/173538829888782336.png","type":"DISCORD"},"metadata":{"bpm":167.0,"duration":266,"songName":"Boulevard of Broken Dreams","songSubName":"Green Day","songAuthorName":"DownyCat","levelAuthorName":"downycat"},"stats":{"plays":0,"downloads":6999,"upvotes":6552,"downvotes":321,"score":0.9216},"uploaded":"2018-06-04T08:30:49Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"fa36428f6eed2648dade2fe320156adfaabe07b5","key":"3a4","state":"Published","createdAt":"2018-06-04T08:30:49Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":474,"bombs":0,"obstacles":0,"nps":1.932,"length":683.0,"characteristic":"Standard","difficulty":"Normal","events":1076,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":245.389,"paritySummary":{"errors":182,"warns":9,"resets":0}},{"njs":10.0,"offset":0.0,"notes":747,"bombs":0,"obstacles":0,"nps":3.044,"length":683.0,"characteristic":"Standard","difficulty":"Hard","events":1076,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":245.389,"paritySummary":{"errors":97,"warns":30,"resets":0}},{"njs":10.0,"offset":0.0,"notes":1049,"bombs":0,"obstacles":0,"nps":4.275,"length":683.0,"characteristic":"Standard","difficulty":"Expert","events":1076,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":245.389,"paritySummary":{"errors":91,"warns":73,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/fa36428f6eed2648dade2fe320156adfaabe07b5.zip","coverURL":"https://cdn.beatsaver.com/fa36428f6eed2648dade2fe320156adfaabe07b5.jpg","previewURL":"https://cdn.beatsaver.com/fa36428f6eed2648dade2fe320156adfaabe07b5.mp3"}],"createdAt":"2018-06-04T08:30:49Z","updatedAt":"2018-06-04T08:30:49Z","lastPublishedAt":"2018-06-04T08:30:49Z"},{"id":"10fe4","name":"We Like To Party (on the train tracks)","description":"Don't play on the tracks.\n\n\n\n\n\n\n\n\n\n\n\n\n(account definitely isn't a Mawntee alt account no sir)","uploader":{"id":1602,"name":"chief-queef","uniqueSet":true,"hash":"5f9a4d2a030219000627c2bf","avatar":"https://cdn.beatsaver.com/avatar/1602.jpg","type":"SIMPLE"},"metadata":{"bpm":136.0,"duration":34,"songName":"We Like To Party","songSubName":"","songAuthorName":"CHURCH OF LEL","levelAuthorName":"Chief Queef"},"stats":{"plays":0,"downloads":2345,"upvotes":1022,"downvotes":20,"score":0.9215},"uploaded":"2020-11-15T18:12:41.227Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"d004ad1ee631ae38ba7f0d336a039da8beb0b552","key":"10fe4","state":"Published","createdAt":"2020-11-15T18:12:41.227Z","sageScore":5,"diffs":[{"njs":69.0,"offset":0.0,"notes":781,"bombs":0,"obstacles":0,"nps":23.922,"length":73.984,"characteristic":"Lawless","difficulty":"Easy","events":939,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":32.64,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/d004ad1ee631ae38ba7f0d336a039da8beb0b552.zip","coverURL":"https://cdn.beatsaver.com/d004ad1ee631ae38ba7f0d336a039da8beb0b552.jpg","previewURL":"https://cdn.beatsaver.com/d004ad1ee631ae38ba7f0d336a039da8beb0b552.mp3"}],"createdAt":"2020-11-15T18:12:41.227Z","updatedAt":"2020-11-15T18:12:41.227Z","lastPublishedAt":"2020-11-15T18:12:41.227Z"},{"id":"a72f","name":"The World of Tune - Onoken feat. GaQdan","description":"88-2","uploader":{"id":4285521,"name":"ejiejidayo","uniqueSet":true,"hash":"5cff0b7398cc5a672c84fc58","avatar":"https://cdn.beatsaver.com/avatar/224894241279574016.png","type":"DISCORD"},"metadata":{"bpm":108.0,"duration":217,"songName":"The World of Tune","songSubName":"Tones and Souls","songAuthorName":"Onoken feat. GaQdan","levelAuthorName":"ejiejidayo"},"stats":{"plays":0,"downloads":814,"upvotes":597,"downvotes":4,"score":0.9215},"uploaded":"2020-05-17T11:49:56.405Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"750910ebc1b4e958ed2266ba31786ba52569c6a5","key":"a72f","state":"Published","createdAt":"2020-05-17T11:49:56.405Z","sageScore":6,"diffs":[{"njs":13.0,"offset":-0.3,"notes":400,"bombs":0,"obstacles":65,"nps":1.893,"length":380.393,"characteristic":"Standard","difficulty":"Hard","events":1813,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":211.329,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":15.0,"offset":-0.6,"notes":761,"bombs":0,"obstacles":56,"nps":3.601,"length":380.393,"characteristic":"Standard","difficulty":"Expert","events":1813,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":211.329,"paritySummary":{"errors":5,"warns":5,"resets":0}},{"njs":17.0,"offset":0.2,"notes":948,"bombs":0,"obstacles":57,"nps":4.486,"length":380.393,"characteristic":"Standard","difficulty":"ExpertPlus","events":1813,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":211.329,"paritySummary":{"errors":3,"warns":3,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/750910ebc1b4e958ed2266ba31786ba52569c6a5.zip","coverURL":"https://cdn.beatsaver.com/750910ebc1b4e958ed2266ba31786ba52569c6a5.jpg","previewURL":"https://cdn.beatsaver.com/750910ebc1b4e958ed2266ba31786ba52569c6a5.mp3"}],"createdAt":"2020-05-17T11:49:56.405Z","updatedAt":"2020-05-17T11:49:56.405Z","lastPublishedAt":"2020-05-17T11:49:56.405Z"},{"id":"3b6c","name":"Happatai - YATTA!","description":"edited: fixed a mistake in the Hard mode\r\n\r\nG-R-EE-N LEAVES! Japanese YMCA tbh\r\nIf you know this song, you a legend\r\n\r\nYoutube Preview: coming soon\r\n\r\nBPM 133\r\nHard, Expert\r\n\r\nHave fun!\r\n\r\ncontact me on discord\r\nDiscord: ETAN#8341","uploader":{"id":4235140,"name":"etan","uniqueSet":true,"hash":"5cff0b7798cc5a672c855775","avatar":"https://cdn.beatsaver.com/avatar/136373107559497728.png","type":"DISCORD"},"metadata":{"bpm":133.0,"duration":237,"songName":"YATTA!","songSubName":"Happatai","songAuthorName":"ETAN","levelAuthorName":"ETAN"},"stats":{"plays":0,"downloads":1630,"upvotes":874,"downvotes":14,"score":0.9215},"uploaded":"2019-03-04T07:04:15Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"9a7a73b32c7ffbc48a352963eb7298a918269458","key":"3b6c","state":"Published","createdAt":"2019-03-04T07:04:15Z","sageScore":6,"diffs":[{"njs":12.0,"offset":0.0,"notes":729,"bombs":14,"obstacles":8,"nps":3.192,"length":506.25,"characteristic":"Standard","difficulty":"Hard","events":1354,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":228.383,"paritySummary":{"errors":83,"warns":23,"resets":2}},{"njs":12.0,"offset":0.0,"notes":833,"bombs":14,"obstacles":8,"nps":3.647,"length":506.25,"characteristic":"Standard","difficulty":"Expert","events":1354,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":228.383,"paritySummary":{"errors":75,"warns":27,"resets":2}}],"downloadURL":"https://cdn.beatsaver.com/9a7a73b32c7ffbc48a352963eb7298a918269458.zip","coverURL":"https://cdn.beatsaver.com/9a7a73b32c7ffbc48a352963eb7298a918269458.jpg","previewURL":"https://cdn.beatsaver.com/9a7a73b32c7ffbc48a352963eb7298a918269458.mp3"}],"createdAt":"2019-03-04T07:04:15Z","updatedAt":"2019-03-04T07:04:15Z","lastPublishedAt":"2019-03-04T07:04:15Z"},{"id":"d411","name":"[FUTURE FUNK PACK] SUPER RISER! (Short Ver.) - Nanidato","description":"FUTURE FUNK MAP PACK\n2 songs uploaded everyday through August 10th - 14th!\n\n\"SUPER RISER!\" by Nanidato was sampled from Chieri Ito's \"Merry Christmas\" \n\nThis version of \"SUPER RISER!\" is a short edit I made to reduce the repetitive sections of the song near the end\n\nPlease look forward to the upcoming maps!\n\nDM any feedback on Discord\nETAN#8341","uploader":{"id":4235140,"name":"etan","uniqueSet":true,"hash":"5cff0b7798cc5a672c855775","avatar":"https://cdn.beatsaver.com/avatar/136373107559497728.png","type":"DISCORD"},"metadata":{"bpm":141.0,"duration":155,"songName":"SUPER RISER!","songSubName":"(Short Ver.)","songAuthorName":"Nanidato","levelAuthorName":"ETAN"},"stats":{"plays":0,"downloads":3828,"upvotes":766,"downvotes":10,"score":0.9214},"uploaded":"2020-08-11T17:47:02.338Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"c6b7136536ef5647374198769b3211b2b2e4ee17","key":"d411","state":"Published","createdAt":"2020-08-11T17:47:02.338Z","sageScore":7,"diffs":[{"njs":10.0,"offset":0.0,"notes":158,"bombs":0,"obstacles":14,"nps":1.066,"length":347.5,"characteristic":"Standard","difficulty":"Easy","events":8420,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":147.872,"paritySummary":{"errors":57,"warns":10,"resets":0}},{"njs":11.0,"offset":1.0,"notes":218,"bombs":0,"obstacles":14,"nps":1.454,"length":351.5,"characteristic":"Standard","difficulty":"Normal","events":8420,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":149.574,"paritySummary":{"errors":14,"warns":2,"resets":0}},{"njs":13.0,"offset":1.0,"notes":398,"bombs":0,"obstacles":16,"nps":2.654,"length":351.5,"characteristic":"Standard","difficulty":"Hard","events":8420,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":149.574,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":16.0,"offset":0.1,"notes":578,"bombs":0,"obstacles":16,"nps":3.854,"length":351.5,"characteristic":"Standard","difficulty":"Expert","events":8420,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":149.574,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":19.0,"offset":-0.4,"notes":781,"bombs":0,"obstacles":15,"nps":5.207,"length":351.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":8420,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":149.574,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/c6b7136536ef5647374198769b3211b2b2e4ee17.zip","coverURL":"https://cdn.beatsaver.com/c6b7136536ef5647374198769b3211b2b2e4ee17.jpg","previewURL":"https://cdn.beatsaver.com/c6b7136536ef5647374198769b3211b2b2e4ee17.mp3"}],"createdAt":"2020-08-11T17:47:02.338Z","updatedAt":"2020-08-11T17:47:02.338Z","lastPublishedAt":"2020-08-11T17:47:02.338Z"},{"id":"6e6e","name":"The Pretender - Foo Fighters","description":"Shoutout to twitch.tv/whipstickgostop for playtesting!","uploader":{"id":4285077,"name":"ris","uniqueSet":true,"hash":"5cff0b7598cc5a672c8535df","avatar":"https://cdn.beatsaver.com/avatar/191597992061435904.png","type":"DISCORD"},"metadata":{"bpm":173.0,"duration":271,"songName":"The Pretender","songSubName":"","songAuthorName":"Foo Fighters","levelAuthorName":"Ris"},"stats":{"plays":0,"downloads":6031,"upvotes":2032,"downvotes":67,"score":0.9213},"uploaded":"2019-11-05T23:48:37.168Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"aa64d183dbdfd111f578e3ab80beeca2f61d13eb","key":"6e6e","state":"Published","createdAt":"2019-11-05T23:48:37.168Z","sageScore":2,"diffs":[{"njs":10.0,"offset":0.0,"notes":427,"bombs":0,"obstacles":6,"nps":1.612,"length":764.0,"characteristic":"Standard","difficulty":"Normal","events":471,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":264.971,"paritySummary":{"errors":70,"warns":44,"resets":0}},{"njs":12.0,"offset":0.0,"notes":641,"bombs":0,"obstacles":6,"nps":2.418,"length":764.5,"characteristic":"Standard","difficulty":"Hard","events":471,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":265.145,"paritySummary":{"errors":78,"warns":64,"resets":0}},{"njs":16.0,"offset":0.7,"notes":958,"bombs":4,"obstacles":6,"nps":3.613,"length":764.5,"characteristic":"Standard","difficulty":"Expert","events":471,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":265.145,"paritySummary":{"errors":64,"warns":63,"resets":2}}],"downloadURL":"https://cdn.beatsaver.com/aa64d183dbdfd111f578e3ab80beeca2f61d13eb.zip","coverURL":"https://cdn.beatsaver.com/aa64d183dbdfd111f578e3ab80beeca2f61d13eb.jpg","previewURL":"https://cdn.beatsaver.com/aa64d183dbdfd111f578e3ab80beeca2f61d13eb.mp3"}],"createdAt":"2019-11-05T23:48:37.168Z","updatedAt":"2019-11-05T23:48:37.168Z","lastPublishedAt":"2019-11-05T23:48:37.168Z"},{"id":"68c5","name":"Sky Fracture VIP (ft. Miss Lina) - Getsix","description":"Ever wondered how one song would look like when mapped by several different mappers in their own mapping style? Then this map is for you! A big collaboration project started by Sykes19, it features a total of 17 maps and 6 unique lightshows, made by 15 mappers and 5 lighters. Special thanks to Getsix for making a Beat Saber edit of his song Sky Fracture VIP ft. Miss Lina!\n\nMapping Extensions mod required for some difficulties (see below).\nChromaLite mod highly recommended for Chroma colored lights.\nSongCore mod highly recommended for custom colors.\n\nStandard:\n1. techbutterfly (794 notes)\n2. Helen Carnate (833 notes)\n3. Bloodcloak (845 notes)\n4. Teuflum (1327 notes)\n5. Skyler Wallace (1329 notes)\n6. Raxan (1444 notes [found in No Arrows])\n7. LEh4nnes (1725 notes [found in No Arrows])\n\nLawless:\n1. Aeroluna (1355 notes)\n2. EncodeRed (1390 notes)\n3. xScaramouche (1585 notes)\n4. CyanSnow (1361 notes [Mapping Extensions])\n5. spooky ghost & Skyler Wallace (633 notes [Mapping Extensions])\n\nOne Saber:\n1. Skyler Wallace (775 notes)\n2. Kolezan (793 notes)\n3. 219278 (968 notes)\n4. 219278 (1104 notes)\n5. thelitlewiseowl (1347 notes)\n\nLightshows:\n1. Halcyon12 (17,993 lighting events)\n2. 219278 - (23,157 lighting events)\n3. Skeelie (26,500 lighting events)\n4. Aeroluna (29,982 lighting events)\n5. spooky ghost (27,387 lighting events, 26,047 walls [Mapping Extensions])\n6. 125K Lightshow (125,038 lighting events [found in No Arrows])","uploader":{"id":37070,"name":"anniversaryteam","uniqueSet":true,"hash":"5cff0b7798cc5a672c8565a3","avatar":"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro","type":"SIMPLE"},"metadata":{"bpm":176.0,"duration":219,"songName":"Sky Fracture VIP","songSubName":"ft. Miss Lina","songAuthorName":"Getsix","levelAuthorName":"Various Mappers"},"stats":{"plays":0,"downloads":4504,"upvotes":2272,"downvotes":79,"score":0.9213},"uploaded":"2019-10-09T06:45:54.603Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"499e94f2ffb162dba02d4e499163a9cde3b925e5","key":"68c5","state":"Published","createdAt":"2019-10-09T06:45:54.603Z","sageScore":7,"diffs":[{"njs":16.0,"offset":1.0,"notes":794,"bombs":0,"obstacles":122,"nps":2.019,"length":1153.797,"characteristic":"Standard","difficulty":"Easy","events":23157,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":393.34,"paritySummary":{"errors":49,"warns":43,"resets":0}},{"njs":15.0,"offset":1.0,"notes":833,"bombs":34,"obstacles":10,"nps":3.858,"length":633.356,"characteristic":"Standard","difficulty":"Normal","events":29982,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":215.917,"paritySummary":{"errors":62,"warns":52,"resets":2}},{"njs":16.0,"offset":0.75,"notes":845,"bombs":24,"obstacles":64,"nps":3.913,"length":633.419,"characteristic":"Standard","difficulty":"Hard","events":26500,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":215.938,"paritySummary":{"errors":12,"warns":4,"resets":8}},{"njs":19.0,"offset":0.0,"notes":1327,"bombs":84,"obstacles":74,"nps":6.146,"length":633.356,"characteristic":"Standard","difficulty":"Expert","events":17993,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":215.917,"paritySummary":{"errors":18,"warns":19,"resets":11}},{"njs":20.0,"offset":0.0,"notes":1329,"bombs":29,"obstacles":153,"nps":6.155,"length":633.356,"characteristic":"Standard","difficulty":"ExpertPlus","events":27387,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":215.917,"paritySummary":{"errors":90,"warns":100,"resets":10}},{"njs":16.0,"offset":0.75,"notes":775,"bombs":25,"obstacles":215,"nps":3.589,"length":633.356,"characteristic":"OneSaber","difficulty":"Easy","events":17993,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":215.917,"paritySummary":{"errors":37,"warns":62,"resets":2}},{"njs":16.0,"offset":0.75,"notes":793,"bombs":72,"obstacles":54,"nps":3.673,"length":633.356,"characteristic":"OneSaber","difficulty":"Normal","events":26500,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":215.917,"paritySummary":{"errors":32,"warns":94,"resets":3}},{"njs":17.0,"offset":0.25,"notes":968,"bombs":0,"obstacles":58,"nps":4.483,"length":633.356,"characteristic":"OneSaber","difficulty":"Hard","events":23157,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":215.917,"paritySummary":{"errors":8,"warns":4,"resets":0}},{"njs":17.0,"offset":0.25,"notes":1104,"bombs":0,"obstacles":58,"nps":5.113,"length":633.356,"characteristic":"OneSaber","difficulty":"Expert","events":23157,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":215.917,"paritySummary":{"errors":27,"warns":23,"resets":0}},{"njs":19.0,"offset":0.125,"notes":1347,"bombs":26,"obstacles":22,"nps":6.236,"length":633.656,"characteristic":"OneSaber","difficulty":"ExpertPlus","events":27387,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":216.019,"paritySummary":{"errors":38,"warns":85,"resets":3}},{"njs":22.0,"offset":0.0,"notes":1444,"bombs":0,"obstacles":37,"nps":6.688,"length":633.356,"characteristic":"NoArrows","difficulty":"Hard","events":29982,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":215.917,"paritySummary":{"errors":9,"warns":20,"resets":0}},{"njs":22.0,"offset":0.0,"notes":1725,"bombs":118,"obstacles":104,"nps":7.989,"length":633.356,"characteristic":"NoArrows","difficulty":"Expert","events":17993,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":215.917,"paritySummary":{"errors":10,"warns":4,"resets":13}},{"njs":100.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"NoArrows","difficulty":"ExpertPlus","events":125018,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":10.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"Lightshow","difficulty":"Easy","events":17993,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":10.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"Lightshow","difficulty":"Normal","events":23157,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":10.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"Lightshow","difficulty":"Hard","events":26500,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":10.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"Lightshow","difficulty":"Expert","events":29982,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":20.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":26047,"nps":0.0,"length":0.0,"characteristic":"Lightshow","difficulty":"ExpertPlus","events":27387,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":20.0,"offset":0.0,"notes":1355,"bombs":18,"obstacles":0,"nps":6.276,"length":633.356,"characteristic":"Lawless","difficulty":"Easy","events":29982,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":215.917,"paritySummary":{"errors":26,"warns":28,"resets":0}},{"njs":17.0,"offset":1.0,"notes":1390,"bombs":46,"obstacles":65,"nps":6.437,"length":633.419,"characteristic":"Lawless","difficulty":"Normal","events":23157,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":215.938,"paritySummary":{"errors":32,"warns":18,"resets":0}},{"njs":19.0,"offset":0.0,"notes":1585,"bombs":46,"obstacles":25,"nps":7.341,"length":633.356,"characteristic":"Lawless","difficulty":"Hard","events":17993,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":215.917,"paritySummary":{"errors":16,"warns":14,"resets":0}},{"njs":21.0,"offset":0.0,"notes":1361,"bombs":46,"obstacles":1,"nps":6.303,"length":633.356,"characteristic":"Lawless","difficulty":"Expert","events":26083,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":215.917,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":20.0,"offset":0.0,"notes":633,"bombs":0,"obstacles":26047,"nps":3.077,"length":603.356,"characteristic":"Lawless","difficulty":"ExpertPlus","events":27387,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":205.69,"paritySummary":{"errors":64,"warns":39,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/499e94f2ffb162dba02d4e499163a9cde3b925e5.zip","coverURL":"https://cdn.beatsaver.com/499e94f2ffb162dba02d4e499163a9cde3b925e5.jpg","previewURL":"https://cdn.beatsaver.com/499e94f2ffb162dba02d4e499163a9cde3b925e5.mp3"}],"createdAt":"2019-10-09T06:45:54.603Z","updatedAt":"2019-10-09T06:45:54.603Z","lastPublishedAt":"2019-10-09T06:45:54.603Z"},{"id":"612d","name":"[Anniversary] Overkill - RIOT [Heisenberg & Skyler Wallace]","description":"Part of the Anniversary Song Pack","uploader":{"id":37070,"name":"anniversaryteam","uniqueSet":true,"hash":"5cff0b7798cc5a672c8565a3","avatar":"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro","type":"SIMPLE"},"metadata":{"bpm":174.0,"duration":310,"songName":"Overkill","songSubName":"","songAuthorName":"RIOT","levelAuthorName":"Heisenberg & Skyler Wallace"},"stats":{"plays":0,"downloads":2777,"upvotes":1933,"downvotes":62,"score":0.9213},"uploaded":"2019-09-04T02:20:01.432Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"8af36a369b051a4a82348dccd2051ee64530d12d","key":"612d","state":"Published","createdAt":"2019-09-04T02:20:01.432Z","sageScore":6,"diffs":[{"njs":15.0,"offset":0.75,"notes":826,"bombs":664,"obstacles":25,"nps":2.79,"length":858.5,"characteristic":"Standard","difficulty":"Hard","events":12607,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":296.035,"paritySummary":{"errors":58,"warns":88,"resets":16}},{"njs":17.0,"offset":0.25,"notes":1114,"bombs":668,"obstacles":27,"nps":3.763,"length":858.5,"characteristic":"Standard","difficulty":"Expert","events":12190,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":296.034,"paritySummary":{"errors":60,"warns":107,"resets":16}},{"njs":19.0,"offset":0.25,"notes":1925,"bombs":462,"obstacles":1000,"nps":6.503,"length":858.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":12513,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":296.035,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/8af36a369b051a4a82348dccd2051ee64530d12d.zip","coverURL":"https://cdn.beatsaver.com/8af36a369b051a4a82348dccd2051ee64530d12d.jpg","previewURL":"https://cdn.beatsaver.com/8af36a369b051a4a82348dccd2051ee64530d12d.mp3"}],"createdAt":"2019-09-04T02:20:01.432Z","updatedAt":"2019-09-04T02:20:01.432Z","lastPublishedAt":"2019-09-04T02:20:01.432Z"},{"id":"5222","name":"To see the future [Sword Art Online Alternative: Gun Gale Online Ending]","description":"Preview:\r\nhttps://www.youtube.com/watch?v=DEp-eEgl1_w\r\n\r\nMAPPING EXTENSIONS REQUIRED for walls and such\r\nThis took forever but it was SOOO worth it\r\n\r\nThanks to Sehria_K for playtesting!\r\n\r\nSAO Alternative: GGO ED by LLENN (Tomori Kusunoki)\r\n\r\nPlease enjoy\r\ngimme feedback on Discord\r\nETAN#8341","uploader":{"id":4235140,"name":"etan","uniqueSet":true,"hash":"5cff0b7798cc5a672c855775","avatar":"https://cdn.beatsaver.com/avatar/136373107559497728.png","type":"DISCORD"},"metadata":{"bpm":137.0,"duration":256,"songName":"To see the future","songSubName":"Tomori Kusunoki","songAuthorName":"ETAN","levelAuthorName":"ETAN"},"stats":{"plays":0,"downloads":3227,"upvotes":940,"downvotes":17,"score":0.9212},"uploaded":"2019-06-07T21:47:12Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"7e33f5491f94b5b3590864629579ed59f3f8fc90","key":"5222","state":"Published","createdAt":"2019-06-07T21:47:12Z","sageScore":6,"diffs":[{"njs":13.0,"offset":0.0,"notes":622,"bombs":111,"obstacles":692,"nps":2.479,"length":573.0,"characteristic":"Standard","difficulty":"Hard","events":3793,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":250.949,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":18.0,"offset":0.0,"notes":924,"bombs":92,"obstacles":692,"nps":3.68,"length":573.25,"characteristic":"Standard","difficulty":"Expert","events":3793,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":251.058,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/7e33f5491f94b5b3590864629579ed59f3f8fc90.zip","coverURL":"https://cdn.beatsaver.com/7e33f5491f94b5b3590864629579ed59f3f8fc90.jpg","previewURL":"https://cdn.beatsaver.com/7e33f5491f94b5b3590864629579ed59f3f8fc90.mp3"}],"createdAt":"2019-06-07T21:47:12Z","updatedAt":"2019-06-07T21:47:12Z","lastPublishedAt":"2019-06-07T21:47:12Z"},{"id":"2ece","name":"#CookieJar - Red Velvet","description":"I love Nichole (LovingWaifuu) I made this chart for her\r\nFollow her twitch: https://www.twitch.tv/lovingwaifuu\r\nAlso follow me on twitch: https://www.twitch.tv/rinkusenpai\r\nThank you Redmagi and Don for the testplays!\r\nEdit: I fixed some weird stuff that happened with copy/paste and my stupidity, sorry about leaderboards","uploader":{"id":16388,"name":"rinkusenpai","uniqueSet":true,"hash":"5cff0b7398cc5a672c84f6cc","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f6cc?d=retro","type":"SIMPLE"},"metadata":{"bpm":159.0,"duration":214,"songName":"#Cookie Jar","songSubName":"Red Velvet","songAuthorName":"RinkuSenpai","levelAuthorName":"rinkusenpai"},"stats":{"plays":0,"downloads":2705,"upvotes":1202,"downvotes":28,"score":0.9212},"uploaded":"2019-01-19T01:42:07Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"ae11541d849b9126469c79f5ab61b088def692c1","key":"2ece","state":"Published","createdAt":"2019-01-19T01:42:07Z","sageScore":5,"diffs":[{"njs":12.0,"offset":0.0,"notes":821,"bombs":0,"obstacles":20,"nps":4.029,"length":540.0,"characteristic":"Standard","difficulty":"Expert","events":2173,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":203.774,"paritySummary":{"errors":43,"warns":50,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/ae11541d849b9126469c79f5ab61b088def692c1.zip","coverURL":"https://cdn.beatsaver.com/ae11541d849b9126469c79f5ab61b088def692c1.jpg","previewURL":"https://cdn.beatsaver.com/ae11541d849b9126469c79f5ab61b088def692c1.mp3"}],"createdAt":"2019-01-19T01:42:07Z","updatedAt":"2019-01-19T01:42:07Z","lastPublishedAt":"2019-01-19T01:42:07Z"},{"id":"83b","name":"Otter Pop (feat. Hollis) - Shawn Wasabi","description":"Difficulties: Expert+ Only\r\nMore Benny Originals: https://beatsaver.com/searchhtml.php?q=bennydabeast","uploader":{"id":30311,"name":"bennydabeast","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e98d","avatar":"https://cdn.beatsaver.com/avatar/30311.jpg","type":"SIMPLE"},"metadata":{"bpm":93.0,"duration":170,"songName":"Otter Pop (feat. Hollis)","songSubName":"Shawn Wasabi","songAuthorName":"BennyDaBeast","levelAuthorName":"bennydabeast"},"stats":{"plays":0,"downloads":3164,"upvotes":2048,"downvotes":68,"score":0.9212},"uploaded":"2018-07-06T21:44:56Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"c7e15a9eaeaae0fe9dd8e4ad62cfd849e3cc6cc7","key":"83b","state":"Published","createdAt":"2018-07-06T21:44:56Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":706,"bombs":2,"obstacles":36,"nps":4.275,"length":256.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":235,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":165.161,"paritySummary":{"errors":89,"warns":89,"resets":1}}],"downloadURL":"https://cdn.beatsaver.com/c7e15a9eaeaae0fe9dd8e4ad62cfd849e3cc6cc7.zip","coverURL":"https://cdn.beatsaver.com/c7e15a9eaeaae0fe9dd8e4ad62cfd849e3cc6cc7.jpg","previewURL":"https://cdn.beatsaver.com/c7e15a9eaeaae0fe9dd8e4ad62cfd849e3cc6cc7.mp3"}],"createdAt":"2018-07-06T21:44:56Z","updatedAt":"2018-07-06T21:44:56Z","lastPublishedAt":"2018-07-06T21:44:56Z"},{"id":"dd1d","name":"yasuoP - Electric Angel/えれくとりっく・えんじぇぅ - Kagamine Rin Kagamine Ren - ArrangeCover 【Wall Map】(Fixed)","description":"Fixed\n\n【Preview】\nhttps://youtu.be/RI2jxRwj6WY","uploader":{"id":4285467,"name":"fefy","uniqueSet":true,"hash":"5cff0b7798cc5a672c856908","avatar":"https://cdn.beatsaver.com/avatar/380656936460484620.png","type":"DISCORD"},"metadata":{"bpm":150.0,"duration":192,"songName":"えれくとりっく・えんじぇぅ","songSubName":"鏡音リン・鏡音レンアレンジカバー","songAuthorName":"ヤスオ","levelAuthorName":"Fefy〈ふぇふぃー〉"},"stats":{"plays":0,"downloads":1627,"upvotes":963,"downvotes":18,"score":0.9211},"uploaded":"2020-08-24T09:58:50.214Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"bba2b6d3af3dc614c65c4b87b6a50f118ed181a8","key":"dd1d","state":"Published","createdAt":"2020-08-24T09:58:50.214Z","sageScore":3,"diffs":[{"njs":16.0,"offset":0.0,"notes":639,"bombs":0,"obstacles":39988,"nps":3.41,"length":468.5,"characteristic":"Standard","difficulty":"Hard","events":5,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":187.4,"paritySummary":{"errors":14,"warns":15,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/bba2b6d3af3dc614c65c4b87b6a50f118ed181a8.zip","coverURL":"https://cdn.beatsaver.com/bba2b6d3af3dc614c65c4b87b6a50f118ed181a8.jpg","previewURL":"https://cdn.beatsaver.com/bba2b6d3af3dc614c65c4b87b6a50f118ed181a8.mp3"}],"createdAt":"2020-08-24T09:58:50.214Z","updatedAt":"2020-08-24T09:58:50.214Z","lastPublishedAt":"2020-08-24T09:58:50.214Z"},{"id":"86e9","name":"Best Day Of My Life - American Authors","description":"\"Best Day of My Life\" is a song by American pop rock band American Authors. The song was written by band members Zac Barnett, Dave Rublin, Matt Sanchez, and James Adam Shelley, along with producers Aaron Accetta and Shep Goodman. \"Best Day of My Life\" was originally recorded for release as a single by Mercury Records and Island Records on March 19, 2013.","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":100.0,"duration":194,"songName":"Best Day Of My Life","songSubName":"","songAuthorName":"American Authors","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":2731,"upvotes":863,"downvotes":14,"score":0.9211},"uploaded":"2020-02-14T16:59:24.776Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"6b253cbb5a2a81c2575e0778614bf009d7954834","key":"86e9","state":"Published","createdAt":"2020-02-14T16:59:24.776Z","sageScore":9,"diffs":[{"njs":8.0,"offset":0.4,"notes":194,"bombs":0,"obstacles":4,"nps":1.017,"length":318.0,"characteristic":"Standard","difficulty":"Easy","events":3091,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":190.8,"paritySummary":{"errors":28,"warns":5,"resets":0}},{"njs":10.0,"offset":0.2,"notes":399,"bombs":0,"obstacles":4,"nps":2.091,"length":318.0,"characteristic":"Standard","difficulty":"Normal","events":3091,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":190.8,"paritySummary":{"errors":25,"warns":24,"resets":0}},{"njs":12.0,"offset":0.0,"notes":634,"bombs":0,"obstacles":4,"nps":3.323,"length":318.0,"characteristic":"Standard","difficulty":"Hard","events":3091,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":190.8,"paritySummary":{"errors":4,"warns":5,"resets":0}},{"njs":14.0,"offset":0.0,"notes":837,"bombs":0,"obstacles":11,"nps":4.387,"length":318.0,"characteristic":"Standard","difficulty":"Expert","events":3091,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":190.8,"paritySummary":{"errors":20,"warns":20,"resets":0}},{"njs":16.0,"offset":0.4,"notes":948,"bombs":0,"obstacles":11,"nps":4.969,"length":318.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":3095,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":190.8,"paritySummary":{"errors":15,"warns":15,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/6b253cbb5a2a81c2575e0778614bf009d7954834.zip","coverURL":"https://cdn.beatsaver.com/6b253cbb5a2a81c2575e0778614bf009d7954834.jpg","previewURL":"https://cdn.beatsaver.com/6b253cbb5a2a81c2575e0778614bf009d7954834.mp3"}],"createdAt":"2020-02-14T16:59:24.776Z","updatedAt":"2020-02-14T16:59:24.776Z","lastPublishedAt":"2020-02-14T16:59:24.776Z"},{"id":"5335","name":"David Guetta, Martin Garrix & Brooks - Like I Do","description":"This map - trust me - is sensational..\nCheck out my lightshows here: https://www.youtube.com/playlist?list=PLwl6dYq72JOYu1BnKl5WATa4Dh__ZJmuN","uploader":{"id":14808,"name":"halcyon12","uniqueSet":true,"hash":"5cff0b7698cc5a672c8547ad","avatar":"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8547ad?d=retro","type":"SIMPLE"},"metadata":{"bpm":128.0,"duration":99,"songName":"Like I Do","songSubName":"","songAuthorName":"David Guetta, Martin Garrix, Brooks","levelAuthorName":"Halcyon12"},"stats":{"plays":0,"downloads":2486,"upvotes":1153,"downvotes":26,"score":0.9211},"uploaded":"2019-06-16T19:05:31.814Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"59e1b8fa392e26bbcc528dcea08b80699efdbeb6","key":"5335","state":"Published","createdAt":"2019-06-16T19:05:31.814Z","sageScore":3,"diffs":[{"njs":11.0,"offset":1.0,"notes":171,"bombs":0,"obstacles":1,"nps":1.91,"length":191.0,"characteristic":"Standard","difficulty":"Normal","events":4711,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":89.531,"paritySummary":{"errors":16,"warns":3,"resets":0}},{"njs":13.0,"offset":1.0,"notes":234,"bombs":0,"obstacles":3,"nps":2.6,"length":192.0,"characteristic":"Standard","difficulty":"Hard","events":4711,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":90.0,"paritySummary":{"errors":7,"warns":0,"resets":0}},{"njs":15.0,"offset":0.0,"notes":305,"bombs":4,"obstacles":7,"nps":3.407,"length":191.0,"characteristic":"Standard","difficulty":"Expert","events":4711,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":89.531,"paritySummary":{"errors":9,"warns":6,"resets":0}},{"njs":17.0,"offset":0.0,"notes":397,"bombs":12,"obstacles":10,"nps":4.411,"length":192.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":4764,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":90.0,"paritySummary":{"errors":3,"warns":2,"resets":3}}],"downloadURL":"https://cdn.beatsaver.com/59e1b8fa392e26bbcc528dcea08b80699efdbeb6.zip","coverURL":"https://cdn.beatsaver.com/59e1b8fa392e26bbcc528dcea08b80699efdbeb6.jpg","previewURL":"https://cdn.beatsaver.com/59e1b8fa392e26bbcc528dcea08b80699efdbeb6.mp3"}],"createdAt":"2019-06-16T19:05:31.814Z","updatedAt":"2019-06-16T19:05:31.814Z","lastPublishedAt":"2019-06-16T19:05:31.814Z"},{"id":"e44","name":"Big Girl (You Are Beautiful) - MIKA","description":"Prepare yourself for some big moves!\r\nPlaythrough : https://youtu.be/hzGaITR-648","uploader":{"id":13320,"name":"novashaft","uniqueSet":true,"hash":"5cff0b7398cc5a672c84ee55","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee55?d=retro","type":"SIMPLE"},"metadata":{"bpm":116.0,"duration":241,"songName":"Big Girl (You Are Beatiful)","songSubName":"MIKA","songAuthorName":"NovaShaft","levelAuthorName":"novashaft"},"stats":{"plays":0,"downloads":3095,"upvotes":1222,"downvotes":29,"score":0.9211},"uploaded":"2018-08-07T12:02:28Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"6c4f86a126cd7465ec536837f3e73874e07068ef","key":"e44","state":"Published","createdAt":"2018-08-07T12:02:28Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":855,"bombs":0,"obstacles":18,"nps":3.723,"length":444.0,"characteristic":"Standard","difficulty":"Expert","events":645,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":229.655,"paritySummary":{"errors":56,"warns":63,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/6c4f86a126cd7465ec536837f3e73874e07068ef.zip","coverURL":"https://cdn.beatsaver.com/6c4f86a126cd7465ec536837f3e73874e07068ef.jpg","previewURL":"https://cdn.beatsaver.com/6c4f86a126cd7465ec536837f3e73874e07068ef.mp3"}],"createdAt":"2018-08-07T12:02:28Z","updatedAt":"2018-08-07T12:02:28Z","lastPublishedAt":"2018-08-07T12:02:28Z"},{"id":"6bfa","name":"Approaching Nirvana - Alone","description":"https://www.youtube.com/watch?v=lZvGn7RUC7c","uploader":{"id":12996,"name":"rustic","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e8c4","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro","type":"SIMPLE"},"metadata":{"bpm":128.0,"duration":170,"songName":"Alone","songSubName":"","songAuthorName":"Approaching Nirvana","levelAuthorName":"Rustic"},"stats":{"plays":0,"downloads":1796,"upvotes":1032,"downvotes":21,"score":0.921},"uploaded":"2019-10-24T19:54:05.671Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"ccf70e940a4ec45c70a8f3ae7be18a2ea771461d","key":"6bfa","state":"Published","createdAt":"2019-10-24T19:54:05.671Z","sageScore":6,"diffs":[{"njs":18.0,"offset":0.0,"notes":416,"bombs":0,"obstacles":1689,"nps":2.558,"length":347.0,"characteristic":"Standard","difficulty":"Expert","events":3383,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":162.656,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/ccf70e940a4ec45c70a8f3ae7be18a2ea771461d.zip","coverURL":"https://cdn.beatsaver.com/ccf70e940a4ec45c70a8f3ae7be18a2ea771461d.jpg","previewURL":"https://cdn.beatsaver.com/ccf70e940a4ec45c70a8f3ae7be18a2ea771461d.mp3"}],"createdAt":"2019-10-24T19:54:05.671Z","updatedAt":"2019-10-24T19:54:05.671Z","lastPublishedAt":"2019-10-24T19:54:05.671Z"},{"id":"6330","name":"dj-Jo - The Legend of Zelda Ocarina of Time Title Theme Remix","description":"Ocarina of Time is one of my favorites games for the N64. Hope you guys enjoy it as much as I did","uploader":{"id":4285107,"name":"kikaeaeon","uniqueSet":true,"hash":"5cff0b7498cc5a672c85109b","avatar":"https://cdn.beatsaver.com/avatar/103715469822816256.png","type":"DISCORD"},"metadata":{"bpm":165.0,"duration":249,"songName":"The Legend of Zelda Ocarina of Time Title Theme Remix","songSubName":"","songAuthorName":"dj-Jo","levelAuthorName":"KikaeAeon"},"stats":{"plays":0,"downloads":2252,"upvotes":670,"downvotes":7,"score":0.9209},"uploaded":"2019-09-13T19:15:16.984Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"35dffa3cbcaca2261d3bdd7306df9503fd9adc0f","key":"6330","state":"Published","createdAt":"2019-09-13T19:15:16.984Z","sageScore":6,"diffs":[{"njs":14.0,"offset":0.0,"notes":745,"bombs":0,"obstacles":28,"nps":3.242,"length":632.0,"characteristic":"Standard","difficulty":"Expert","events":890,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":229.818,"paritySummary":{"errors":18,"warns":7,"resets":0}},{"njs":16.0,"offset":0.0,"notes":955,"bombs":0,"obstacles":30,"nps":4.155,"length":632.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":1030,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":229.818,"paritySummary":{"errors":21,"warns":17,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/35dffa3cbcaca2261d3bdd7306df9503fd9adc0f.zip","coverURL":"https://cdn.beatsaver.com/35dffa3cbcaca2261d3bdd7306df9503fd9adc0f.jpg","previewURL":"https://cdn.beatsaver.com/35dffa3cbcaca2261d3bdd7306df9503fd9adc0f.mp3"}],"createdAt":"2019-09-13T19:15:16.984Z","updatedAt":"2019-09-13T19:15:16.984Z","lastPublishedAt":"2019-09-13T19:15:16.984Z"},{"id":"217","name":"Beat it - Michael Jackson","description":"Easy/Normal/Hard/Expert - Obstacles and mines purely for dance moves! 100% Expert Playthrough: https://bit.ly/2IKzCp3\r\n\r\n- Freeek =)","uploader":{"id":47581,"name":"freeek","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e8ad","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8ad?d=retro","type":"SIMPLE"},"metadata":{"bpm":139.0,"duration":143,"songName":"Beat it","songSubName":"Michael Jackson","songAuthorName":"Freeek","levelAuthorName":"freeek"},"stats":{"plays":0,"downloads":19417,"upvotes":15233,"downvotes":887,"score":0.9209},"uploaded":"2018-05-25T14:20:19Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"4b2da842b687ec4cfbc948c583c21c79d4120de0","key":"217","state":"Published","createdAt":"2018-05-25T14:20:19Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":188,"bombs":0,"obstacles":84,"nps":1.431,"length":303.875,"characteristic":"Standard","difficulty":"Easy","events":878,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":131.169,"paritySummary":{"errors":0,"warns":0,"resets":0},"stars":0.39},{"njs":10.0,"offset":0.0,"notes":219,"bombs":40,"obstacles":70,"nps":1.667,"length":304.0,"characteristic":"Standard","difficulty":"Normal","events":878,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":131.223,"paritySummary":{"errors":29,"warns":8,"resets":1},"stars":0.64},{"njs":10.0,"offset":0.0,"notes":386,"bombs":42,"obstacles":72,"nps":2.937,"length":304.0,"characteristic":"Standard","difficulty":"Hard","events":878,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":131.223,"paritySummary":{"errors":80,"warns":49,"resets":4},"stars":1.7},{"njs":10.0,"offset":0.0,"notes":623,"bombs":46,"obstacles":69,"nps":4.741,"length":304.0,"characteristic":"Standard","difficulty":"Expert","events":878,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":131.223,"paritySummary":{"errors":87,"warns":31,"resets":2}}],"downloadURL":"https://cdn.beatsaver.com/4b2da842b687ec4cfbc948c583c21c79d4120de0.zip","coverURL":"https://cdn.beatsaver.com/4b2da842b687ec4cfbc948c583c21c79d4120de0.jpg","previewURL":"https://cdn.beatsaver.com/4b2da842b687ec4cfbc948c583c21c79d4120de0.mp3"}],"createdAt":"2018-05-25T14:20:19Z","updatedAt":"2018-05-25T14:20:19Z","lastPublishedAt":"2018-05-25T14:20:19Z"},{"id":"bb4","name":"Octopath Traveler Main Theme - Yasunori Nishiki","description":"SS Full Combo: https://www.youtube.com/watch?v=zhwpW6ZfBqo","uploader":{"id":41168,"name":"edzo","uniqueSet":true,"hash":"5cff0b7398cc5a672c84f56a","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f56a?d=retro","type":"SIMPLE"},"metadata":{"bpm":264.0,"duration":150,"songName":"Octopath Traveler Main Theme","songSubName":"Yasunori Nishiki","songAuthorName":"Edzo","levelAuthorName":"edzo"},"stats":{"plays":0,"downloads":1163,"upvotes":518,"downvotes":2,"score":0.9207},"uploaded":"2018-07-25T01:41:47Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"4ba6575e63038cc8bb747f7c1e56bf2202d551be","key":"bb4","state":"Published","createdAt":"2018-07-25T01:41:47Z","sageScore":4,"diffs":[{"njs":10.0,"offset":0.0,"notes":505,"bombs":0,"obstacles":5,"nps":3.45,"length":644.0,"characteristic":"Standard","difficulty":"Expert","events":666,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":146.364,"paritySummary":{"errors":46,"warns":29,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/4ba6575e63038cc8bb747f7c1e56bf2202d551be.zip","coverURL":"https://cdn.beatsaver.com/4ba6575e63038cc8bb747f7c1e56bf2202d551be.jpg","previewURL":"https://cdn.beatsaver.com/4ba6575e63038cc8bb747f7c1e56bf2202d551be.mp3"}],"createdAt":"2018-07-25T01:41:47Z","updatedAt":"2018-07-25T01:41:47Z","lastPublishedAt":"2018-07-25T01:41:47Z"},{"id":"94cb","name":"Buttercup | By Jack Stauber | Charted By StyngMe |","description":"Difficulties: Hard\nEnjoy! <3","uploader":{"id":30754,"name":"styngme","uniqueSet":false,"hash":"5cff0b7298cc5a672c84e9cd","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9cd?d=retro","type":"SIMPLE"},"metadata":{"bpm":120.0,"duration":202,"songName":"Buttercup","songSubName":"","songAuthorName":"Jack Stauber","levelAuthorName":"StyngMe"},"stats":{"plays":0,"downloads":1776,"upvotes":692,"downvotes":8,"score":0.9206},"uploaded":"2020-03-29T01:21:28.921Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"eb750f2dcec62ac3a816583854dbdee4514d8581","key":"94cb","state":"Published","createdAt":"2020-03-29T01:21:28.921Z","sageScore":2,"diffs":[{"njs":14.0,"offset":0.0,"notes":441,"bombs":112,"obstacles":41,"nps":2.297,"length":384.0,"characteristic":"Standard","difficulty":"Hard","events":658,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":192.0,"paritySummary":{"errors":32,"warns":19,"resets":8}}],"downloadURL":"https://cdn.beatsaver.com/eb750f2dcec62ac3a816583854dbdee4514d8581.zip","coverURL":"https://cdn.beatsaver.com/eb750f2dcec62ac3a816583854dbdee4514d8581.jpg","previewURL":"https://cdn.beatsaver.com/eb750f2dcec62ac3a816583854dbdee4514d8581.mp3"}],"createdAt":"2020-03-29T01:21:28.921Z","updatedAt":"2020-03-29T01:21:28.921Z","lastPublishedAt":"2020-03-29T01:21:28.921Z"},{"id":"a3a","name":"Platinum Disco - Yuka Iguchi","description":"One of the OPs in Nisemonogatari\r\nI know its a bit easy for an expert map. tried to keep it's flow mostly.\r\nBPM : 117, Duration 4:14\r\nDifficulties: Easy, Normal, Hard, Expert\r\n\r\nDemo : https://youtu.be/EV07KuV_DrA","uploader":{"id":47059,"name":"rocket","uniqueSet":true,"hash":"5cff0b7398cc5a672c84f1c0","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f1c0?d=retro","type":"SIMPLE"},"metadata":{"bpm":117.0,"duration":254,"songName":"Platinum Disco","songSubName":"Yuka Iguchi","songAuthorName":"Rocket","levelAuthorName":"rocket"},"stats":{"plays":0,"downloads":3105,"upvotes":1914,"downvotes":63,"score":0.9205},"uploaded":"2018-07-18T00:14:28Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"a372fee60c26b5e35861c71d9c38b4ef60974e93","key":"a3a","state":"Published","createdAt":"2018-07-18T00:14:28Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":264,"bombs":0,"obstacles":27,"nps":1.059,"length":486.0,"characteristic":"Standard","difficulty":"Easy","events":605,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":249.231,"paritySummary":{"errors":73,"warns":54,"resets":0}},{"njs":10.0,"offset":0.0,"notes":483,"bombs":0,"obstacles":27,"nps":1.938,"length":486.0,"characteristic":"Standard","difficulty":"Normal","events":605,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":249.231,"paritySummary":{"errors":82,"warns":100,"resets":0}},{"njs":10.0,"offset":0.0,"notes":738,"bombs":0,"obstacles":27,"nps":2.961,"length":486.0,"characteristic":"Standard","difficulty":"Hard","events":605,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":249.231,"paritySummary":{"errors":107,"warns":118,"resets":0}},{"njs":10.0,"offset":0.0,"notes":845,"bombs":0,"obstacles":27,"nps":3.39,"length":486.0,"characteristic":"Standard","difficulty":"Expert","events":604,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":249.231,"paritySummary":{"errors":128,"warns":111,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/a372fee60c26b5e35861c71d9c38b4ef60974e93.zip","coverURL":"https://cdn.beatsaver.com/a372fee60c26b5e35861c71d9c38b4ef60974e93.jpg","previewURL":"https://cdn.beatsaver.com/a372fee60c26b5e35861c71d9c38b4ef60974e93.mp3"}],"createdAt":"2018-07-18T00:14:28Z","updatedAt":"2018-07-18T00:14:28Z","lastPublishedAt":"2018-07-18T00:14:28Z"},{"id":"b8d7","name":"Contradiction [The God of High School Opening] - KSUKE ft. Tyler Carter","description":"Everyone step to the left. Wait, wrong song xD but it does have walls that make you go left right down up.\n\n\"Contradiction\" is KSUKE's latest Single featuring American singer Tyler Carter. It is used as the opening song in the upcoming Crunchyroll anime adaption of The God of High School.","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":130.0,"duration":200,"songName":"Contradiction","songSubName":"ft. Tyler Carter","songAuthorName":"KSUKE","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":9869,"upvotes":1479,"downvotes":42,"score":0.9204},"uploaded":"2020-07-03T04:53:48.515Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"980cf4979240c9d2b1107a24d6143dd9b85f8098","key":"b8d7","state":"Published","createdAt":"2020-07-03T04:53:48.515Z","sageScore":4,"diffs":[{"njs":10.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"Standard","difficulty":"Easy","events":13893,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":12.0,"offset":0.35,"notes":711,"bombs":0,"obstacles":70,"nps":3.633,"length":424.0,"characteristic":"Standard","difficulty":"Hard","events":13893,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":195.692,"paritySummary":{"errors":4,"warns":2,"resets":0}},{"njs":16.0,"offset":-0.25,"notes":1075,"bombs":0,"obstacles":110,"nps":5.493,"length":424.0,"characteristic":"Standard","difficulty":"Expert","events":13893,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":195.692,"paritySummary":{"errors":3,"warns":4,"resets":0}},{"njs":20.0,"offset":0.4,"notes":1219,"bombs":0,"obstacles":102,"nps":6.229,"length":424.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":13893,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":195.692,"paritySummary":{"errors":0,"warns":10,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/980cf4979240c9d2b1107a24d6143dd9b85f8098.zip","coverURL":"https://cdn.beatsaver.com/980cf4979240c9d2b1107a24d6143dd9b85f8098.jpg","previewURL":"https://cdn.beatsaver.com/980cf4979240c9d2b1107a24d6143dd9b85f8098.mp3"}],"createdAt":"2020-07-03T04:53:48.515Z","updatedAt":"2020-07-03T04:53:48.515Z","lastPublishedAt":"2020-07-03T04:53:48.515Z"},{"id":"d565","name":"[FUTURE FUNK PACK] Idolstep Dreaming - Mikazuki BIGWAVE","description":"FUTURE FUNK MAP PACK\n2 songs uploaded everyday through August 10th - 14th!\n\n\"Idolstep 夢見\" by ミカヅキBIGWAVE was sampled from Hidemi Ishikawa's \"めざめ\" (Mezame). \n\nPlease look forward to the upcoming maps!\n\nDM any feedback on Discord\nETAN#8341","uploader":{"id":4235140,"name":"etan","uniqueSet":true,"hash":"5cff0b7798cc5a672c855775","avatar":"https://cdn.beatsaver.com/avatar/136373107559497728.png","type":"DISCORD"},"metadata":{"bpm":105.0,"duration":178,"songName":"Idolstep Dreaming","songSubName":"","songAuthorName":"Mikazuki BIGWAVE","levelAuthorName":"ETAN"},"stats":{"plays":0,"downloads":3733,"upvotes":816,"downvotes":13,"score":0.9203},"uploaded":"2020-08-13T18:37:52.866Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"44bd3be82800591c926b63f16b02f34c85730130","key":"d565","state":"Published","createdAt":"2020-08-13T18:37:52.866Z","sageScore":6,"diffs":[{"njs":10.0,"offset":1.0,"notes":192,"bombs":21,"obstacles":37,"nps":1.135,"length":296.0,"characteristic":"Standard","difficulty":"Easy","events":7255,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":169.143,"paritySummary":{"errors":4,"warns":2,"resets":2}},{"njs":12.0,"offset":0.5,"notes":224,"bombs":21,"obstacles":37,"nps":1.324,"length":296.0,"characteristic":"Standard","difficulty":"Normal","events":7255,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":169.143,"paritySummary":{"errors":1,"warns":0,"resets":3}},{"njs":12.0,"offset":0.0,"notes":361,"bombs":19,"obstacles":38,"nps":2.134,"length":296.0,"characteristic":"Standard","difficulty":"Hard","events":7255,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":169.143,"paritySummary":{"errors":0,"warns":0,"resets":1}},{"njs":14.0,"offset":-0.2,"notes":570,"bombs":19,"obstacles":38,"nps":3.347,"length":298.0,"characteristic":"Standard","difficulty":"Expert","events":7255,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":170.286,"paritySummary":{"errors":0,"warns":0,"resets":1}},{"njs":16.0,"offset":0.5,"notes":695,"bombs":17,"obstacles":34,"nps":4.081,"length":298.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":7255,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":170.286,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/44bd3be82800591c926b63f16b02f34c85730130.zip","coverURL":"https://cdn.beatsaver.com/44bd3be82800591c926b63f16b02f34c85730130.jpg","previewURL":"https://cdn.beatsaver.com/44bd3be82800591c926b63f16b02f34c85730130.mp3"}],"createdAt":"2020-08-13T18:37:52.866Z","updatedAt":"2020-08-13T18:37:52.866Z","lastPublishedAt":"2020-08-13T18:37:52.866Z"},{"id":"7b9a","name":"League of Legends - RISE (ft. The Glitch Mob, Mako, and The Word Alive)","description":"Prove yourself and RISE! Normal to Expert, custom lighting.\n\nExpert - 719 notes | 15 NJS | 0 bombs | 6 walls\nHard - 575 notes | 12 NJS | 0 bombs | 6 walls\nNormal - 411 notes | 10 NJS | 0 bombs | 6 walls","uploader":{"id":30,"name":"cookiesaber","uniqueSet":true,"hash":"5d1356c9f8b4040007dcb9fd","avatar":"https://www.gravatar.com/avatar/5d1356c9f8b4040007dcb9fd?d=retro","type":"SIMPLE"},"metadata":{"bpm":177.0,"duration":194,"songName":"RISE (ft. The Glitch Mob, Mako, and The Word Alive)","songSubName":"","songAuthorName":"League Of Legends","levelAuthorName":"cookie"},"stats":{"plays":0,"downloads":4858,"upvotes":1257,"downvotes":32,"score":0.9202},"uploaded":"2020-01-01T19:07:55.492Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"0c296f8b51f4d7669987117f7b3fa68a1fd7d6b1","key":"7b9a","state":"Published","createdAt":"2020-01-01T19:07:55.492Z","sageScore":3,"diffs":[{"njs":10.0,"offset":0.0,"notes":411,"bombs":0,"obstacles":9,"nps":2.323,"length":522.0,"characteristic":"Standard","difficulty":"Normal","events":874,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":176.949,"paritySummary":{"errors":14,"warns":7,"resets":0}},{"njs":12.0,"offset":0.0,"notes":575,"bombs":0,"obstacles":6,"nps":3.225,"length":526.0,"characteristic":"Standard","difficulty":"Hard","events":874,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":178.305,"paritySummary":{"errors":6,"warns":6,"resets":0}},{"njs":15.0,"offset":1.0,"notes":719,"bombs":0,"obstacles":6,"nps":4.032,"length":526.0,"characteristic":"Standard","difficulty":"Expert","events":875,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":178.305,"paritySummary":{"errors":19,"warns":23,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/0c296f8b51f4d7669987117f7b3fa68a1fd7d6b1.zip","coverURL":"https://cdn.beatsaver.com/0c296f8b51f4d7669987117f7b3fa68a1fd7d6b1.jpg","previewURL":"https://cdn.beatsaver.com/0c296f8b51f4d7669987117f7b3fa68a1fd7d6b1.mp3"}],"createdAt":"2020-01-01T19:07:55.492Z","updatedAt":"2020-01-01T19:07:55.492Z","lastPublishedAt":"2020-01-01T19:07:55.492Z"},{"id":"65e6","name":"Kamado Tanjiro no Uta - Kimetsu no Yaiba EP 19 ED","description":"Video https://youtu.be/szYb7faqnkQ\nVideo by Monteblanco: https://www.youtube.com/watch?v=aI7nCWuC-dc\nVideo by Rigid (PogU): https://youtu.be/pnETOIkHv-o","uploader":{"id":14262,"name":"suzuki.dll","uniqueSet":true,"hash":"5d664fb90a981e00064ede12","avatar":"https://cdn.beatsaver.com/avatar/14262.jpg","type":"SIMPLE"},"metadata":{"bpm":152.0,"duration":329,"songName":"Kamado Tanjiro no Uta","songSubName":"ft. Nami Nakagawa","songAuthorName":"Go Shiina","levelAuthorName":"Suzuki.DLL"},"stats":{"plays":0,"downloads":2575,"upvotes":1259,"downvotes":32,"score":0.9202},"uploaded":"2019-09-26T02:31:39.964Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"746847c0026657a7235d845b7d014335c47972da","key":"65e6","state":"Published","createdAt":"2019-09-26T02:31:39.964Z","sageScore":5,"diffs":[{"njs":12.0,"offset":0.5,"notes":561,"bombs":0,"obstacles":173,"nps":1.752,"length":811.0,"characteristic":"Standard","difficulty":"Hard","events":806,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":320.132,"paritySummary":{"errors":45,"warns":34,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/746847c0026657a7235d845b7d014335c47972da.zip","coverURL":"https://cdn.beatsaver.com/746847c0026657a7235d845b7d014335c47972da.jpg","previewURL":"https://cdn.beatsaver.com/746847c0026657a7235d845b7d014335c47972da.mp3"}],"createdAt":"2019-09-26T02:31:39.964Z","updatedAt":"2019-09-26T02:31:39.964Z","lastPublishedAt":"2019-09-26T02:31:39.964Z"},{"id":"56b3","name":"Caravan Palace - Wonderland","description":"Easy, Normal, Hard, Expert, Expert+","uploader":{"id":4235138,"name":"CyanSnow","uniqueSet":true,"hash":"5cff0b7698cc5a672c8543ac","avatar":"https://cdn.beatsaver.com/avatar/154341137694326784.png","type":"DISCORD"},"metadata":{"bpm":104.0,"duration":175,"songName":"Wonderland","songSubName":"","songAuthorName":"Caravan Palace","levelAuthorName":"CyanSnow"},"stats":{"plays":0,"downloads":4852,"upvotes":2516,"downvotes":95,"score":0.9202},"uploaded":"2019-07-13T05:01:13.826Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"5bdd8ddebcce1e19bcd10ca8921b0d1ab7624506","key":"56b3","state":"Published","createdAt":"2019-07-13T05:01:13.826Z","sageScore":7,"diffs":[{"njs":12.0,"offset":1.0,"notes":182,"bombs":0,"obstacles":0,"nps":1.088,"length":290.0,"characteristic":"Standard","difficulty":"Easy","events":219,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":167.308,"paritySummary":{"errors":56,"warns":7,"resets":0}},{"njs":12.0,"offset":1.0,"notes":255,"bombs":0,"obstacles":0,"nps":1.524,"length":290.0,"characteristic":"Standard","difficulty":"Normal","events":292,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":167.308,"paritySummary":{"errors":29,"warns":17,"resets":0}},{"njs":14.0,"offset":0.0,"notes":450,"bombs":0,"obstacles":0,"nps":2.685,"length":290.5,"characteristic":"Standard","difficulty":"Hard","events":499,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":167.596,"paritySummary":{"errors":5,"warns":4,"resets":0}},{"njs":15.0,"offset":0.0,"notes":487,"bombs":0,"obstacles":0,"nps":2.906,"length":290.5,"characteristic":"Standard","difficulty":"Expert","events":525,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":167.596,"paritySummary":{"errors":4,"warns":4,"resets":0}},{"njs":17.0,"offset":0.5,"notes":713,"bombs":5,"obstacles":0,"nps":4.243,"length":291.25,"characteristic":"Standard","difficulty":"ExpertPlus","events":797,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":168.029,"paritySummary":{"errors":8,"warns":5,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/5bdd8ddebcce1e19bcd10ca8921b0d1ab7624506.zip","coverURL":"https://cdn.beatsaver.com/5bdd8ddebcce1e19bcd10ca8921b0d1ab7624506.jpg","previewURL":"https://cdn.beatsaver.com/5bdd8ddebcce1e19bcd10ca8921b0d1ab7624506.mp3"}],"createdAt":"2019-07-13T05:01:13.826Z","updatedAt":"2019-07-13T05:01:13.826Z","lastPublishedAt":"2019-07-13T05:01:13.826Z"},{"id":"4131","name":"Nevada feat. Cozi Zuehlsdorff - Vicetone","description":"YouTube Preview: https://youtu.be/3gb2gH8eueI","uploader":{"id":30311,"name":"bennydabeast","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e98d","avatar":"https://cdn.beatsaver.com/avatar/30311.jpg","type":"SIMPLE"},"metadata":{"bpm":124.0,"duration":209,"songName":"Nevada (feat. Cozi Zuehlsdorff)","songSubName":"Vicetone","songAuthorName":"BennyDaBeast","levelAuthorName":"bennydabeast"},"stats":{"plays":0,"downloads":2091,"upvotes":1257,"downvotes":32,"score":0.9202},"uploaded":"2019-03-27T18:42:01Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"5e847d92de6e01dfd5ce3491969b3939b4374699","key":"4131","state":"Published","createdAt":"2019-03-27T18:42:01Z","sageScore":6,"diffs":[{"njs":10.0,"offset":0.0,"notes":387,"bombs":0,"obstacles":54,"nps":1.932,"length":414.0,"characteristic":"Standard","difficulty":"Hard","events":1208,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":200.323,"paritySummary":{"errors":70,"warns":23,"resets":0}},{"njs":12.0,"offset":0.0,"notes":616,"bombs":0,"obstacles":54,"nps":3.075,"length":414.0,"characteristic":"Standard","difficulty":"Expert","events":1208,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":200.323,"paritySummary":{"errors":84,"warns":55,"resets":0}},{"njs":14.0,"offset":0.0,"notes":868,"bombs":0,"obstacles":57,"nps":4.333,"length":414.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":1208,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":200.323,"paritySummary":{"errors":74,"warns":61,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/5e847d92de6e01dfd5ce3491969b3939b4374699.zip","coverURL":"https://cdn.beatsaver.com/5e847d92de6e01dfd5ce3491969b3939b4374699.jpg","previewURL":"https://cdn.beatsaver.com/5e847d92de6e01dfd5ce3491969b3939b4374699.mp3"}],"createdAt":"2019-03-27T18:42:01Z","updatedAt":"2019-03-27T18:42:01Z","lastPublishedAt":"2019-03-27T18:42:01Z"},{"id":"8b21","name":"Invaders Must Die - Prodigy","description":"It's time to get ready for some pumping beats and dancy moves with a beat map for a Prodigy song. With the full spread of skill levels, get ready to move and in the swing of the rhythm of this great track.\n\nThanks to Kival Evan and Sorukun for testing.","uploader":{"id":32141,"name":"amstradhero","uniqueSet":true,"hash":"5cff0b7698cc5a672c8551be","avatar":"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8551be?d=retro","type":"SIMPLE"},"metadata":{"bpm":140.0,"duration":266,"songName":"Invaders Must Die","songSubName":"","songAuthorName":"Prodigy","levelAuthorName":"AmstradHero"},"stats":{"plays":0,"downloads":3044,"upvotes":1276,"downvotes":33,"score":0.9201},"uploaded":"2020-02-27T09:40:25.643Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"eaa2d06cfed4d6cd5b9e0b89d5860c88c7ca8be5","key":"8b21","state":"Published","createdAt":"2020-02-27T09:40:25.643Z","sageScore":7,"diffs":[{"njs":10.0,"offset":0.0,"notes":326,"bombs":16,"obstacles":28,"nps":1.248,"length":609.5,"characteristic":"Standard","difficulty":"Easy","events":8086,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":261.214,"paritySummary":{"errors":17,"warns":18,"resets":7}},{"njs":12.0,"offset":1.35,"notes":468,"bombs":16,"obstacles":31,"nps":1.792,"length":609.5,"characteristic":"Standard","difficulty":"Normal","events":8084,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":261.214,"paritySummary":{"errors":26,"warns":20,"resets":8}},{"njs":13.0,"offset":1.125,"notes":660,"bombs":12,"obstacles":31,"nps":2.527,"length":609.5,"characteristic":"Standard","difficulty":"Hard","events":8084,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":261.214,"paritySummary":{"errors":36,"warns":45,"resets":5}},{"njs":14.0,"offset":1.0,"notes":1102,"bombs":8,"obstacles":15,"nps":4.219,"length":609.5,"characteristic":"Standard","difficulty":"Expert","events":8084,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":261.214,"paritySummary":{"errors":44,"warns":69,"resets":4}},{"njs":16.0,"offset":0.5,"notes":1141,"bombs":4,"obstacles":15,"nps":4.368,"length":609.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":8084,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":261.214,"paritySummary":{"errors":35,"warns":57,"resets":2}}],"downloadURL":"https://cdn.beatsaver.com/eaa2d06cfed4d6cd5b9e0b89d5860c88c7ca8be5.zip","coverURL":"https://cdn.beatsaver.com/eaa2d06cfed4d6cd5b9e0b89d5860c88c7ca8be5.jpg","previewURL":"https://cdn.beatsaver.com/eaa2d06cfed4d6cd5b9e0b89d5860c88c7ca8be5.mp3"}],"createdAt":"2020-02-27T09:40:25.643Z","updatedAt":"2020-02-27T09:40:25.643Z","lastPublishedAt":"2020-02-27T09:40:25.643Z"},{"id":"57f1","name":"Impossible Geometry - The Stupendium ft. Chi-chi","description":"Watch the video here: https://www.youtube.com/watch?v=PnKxhbRqqx0","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":150.0,"duration":211,"songName":"Impossible Geometry","songSubName":"","songAuthorName":"The Stupendium ft. Chi-chi","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":1475,"upvotes":1166,"downvotes":28,"score":0.9201},"uploaded":"2019-07-19T18:24:56.241Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"84b16b7e9fe6e3b8f356be4f2dc0edc0a4178228","key":"57f1","state":"Published","createdAt":"2019-07-19T18:24:56.241Z","sageScore":5,"diffs":[{"njs":14.0,"offset":0.0,"notes":628,"bombs":12,"obstacles":42,"nps":3.244,"length":484.0,"characteristic":"Standard","difficulty":"Expert","events":5545,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":193.6,"paritySummary":{"errors":53,"warns":61,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/84b16b7e9fe6e3b8f356be4f2dc0edc0a4178228.zip","coverURL":"https://cdn.beatsaver.com/84b16b7e9fe6e3b8f356be4f2dc0edc0a4178228.jpg","previewURL":"https://cdn.beatsaver.com/84b16b7e9fe6e3b8f356be4f2dc0edc0a4178228.mp3"}],"createdAt":"2019-07-19T18:24:56.241Z","updatedAt":"2019-07-19T18:24:56.241Z","lastPublishedAt":"2019-07-19T18:24:56.241Z"},{"id":"53f0","name":"Panini - Lil Nas X","description":"“Panini” is the second single from Lil Nas X’s debut EP, 7, following his hit song, “Old Town Road. In this song, Lil Nas talks about his old fanbase and compares them to Panini, a character from the popular TV Series Chowder.","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":77.0,"duration":116,"songName":"Panini","songSubName":"","songAuthorName":"Lil Nas X","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":3360,"upvotes":1212,"downvotes":30,"score":0.9201},"uploaded":"2019-06-22T05:07:06.657Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"6bb8e702d51055767fbc89df9ec81517e1d0e74c","key":"53f0","state":"Published","createdAt":"2019-06-22T05:07:06.657Z","sageScore":6,"diffs":[{"njs":14.0,"offset":0.0,"notes":388,"bombs":0,"obstacles":0,"nps":3.482,"length":143.0,"characteristic":"Standard","difficulty":"Expert","events":1247,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":111.429,"paritySummary":{"errors":17,"warns":21,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/6bb8e702d51055767fbc89df9ec81517e1d0e74c.zip","coverURL":"https://cdn.beatsaver.com/6bb8e702d51055767fbc89df9ec81517e1d0e74c.jpg","previewURL":"https://cdn.beatsaver.com/6bb8e702d51055767fbc89df9ec81517e1d0e74c.mp3"}],"createdAt":"2019-06-22T05:07:06.657Z","updatedAt":"2019-06-22T05:07:06.657Z","lastPublishedAt":"2019-06-22T05:07:06.657Z"},{"id":"1060","name":"X Gon' Give It To Ya Maybe","description":"Preview: \r\nhttps://www.youtube.com/watch?v=Q71NI5ohXhI\r\n\r\nOriginal mashup: https://www.youtube.com/watch?v=Fegs-XVKgnM","uploader":{"id":4286278,"name":"ruckus","uniqueSet":true,"hash":"5cff0b7398cc5a672c84f1d8","avatar":"https://cdn.beatsaver.com/avatar/239082462083284992.png","type":"DISCORD"},"metadata":{"bpm":120.0,"duration":205,"songName":"X Gon' Give It To Ya Maybe","songSubName":"oneboredjeu, Carly Rae Jepsen, DMX","songAuthorName":"Ruckus","levelAuthorName":"ruckus"},"stats":{"plays":0,"downloads":4370,"upvotes":2151,"downvotes":76,"score":0.9201},"uploaded":"2018-08-18T01:59:54Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"b86e27ad9149c123b3a4f90b2bce62f656083b01","key":"1060","state":"Published","createdAt":"2018-08-18T01:59:54Z","sageScore":4,"diffs":[{"njs":14.0,"offset":0.0,"notes":815,"bombs":0,"obstacles":0,"nps":4.163,"length":391.5,"characteristic":"Standard","difficulty":"Expert","events":1511,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":195.75,"paritySummary":{"errors":91,"warns":118,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/b86e27ad9149c123b3a4f90b2bce62f656083b01.zip","coverURL":"https://cdn.beatsaver.com/b86e27ad9149c123b3a4f90b2bce62f656083b01.jpg","previewURL":"https://cdn.beatsaver.com/b86e27ad9149c123b3a4f90b2bce62f656083b01.mp3"}],"createdAt":"2018-08-18T01:59:54Z","updatedAt":"2018-08-18T01:59:54Z","lastPublishedAt":"2018-08-18T01:59:54Z"},{"id":"5fc","name":"Waiting For Love - Avicii","description":"Avicii Waiting for love\r\nEasy, Normal, Hard, Expert\r\nRun Time : 3m 50s\r\nBPM 128.15\r\n\r\nFeedback would be greatly appreciated :)","uploader":{"id":47059,"name":"rocket","uniqueSet":true,"hash":"5cff0b7398cc5a672c84f1c0","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f1c0?d=retro","type":"SIMPLE"},"metadata":{"bpm":128.0,"duration":230,"songName":"Waiting For Love","songSubName":"Avicii","songAuthorName":"Rocket","levelAuthorName":"rocket"},"stats":{"plays":0,"downloads":12913,"upvotes":5636,"downvotes":276,"score":0.9201},"uploaded":"2018-06-20T23:44:52Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"4b7cdfcf558f66acc4b7a506c2dd50fbd9a76354","key":"5fc","state":"Published","createdAt":"2018-06-20T23:44:52Z","sageScore":6,"diffs":[{"njs":10.0,"offset":0.0,"notes":266,"bombs":8,"obstacles":8,"nps":1.184,"length":480.0,"characteristic":"Standard","difficulty":"Easy","events":1179,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":225.0,"paritySummary":{"errors":62,"warns":23,"resets":0},"stars":1.1},{"njs":10.0,"offset":0.0,"notes":485,"bombs":6,"obstacles":8,"nps":2.158,"length":480.0,"characteristic":"Standard","difficulty":"Normal","events":1181,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":225.0,"paritySummary":{"errors":121,"warns":51,"resets":0},"stars":1.54},{"njs":10.0,"offset":0.0,"notes":742,"bombs":14,"obstacles":8,"nps":3.302,"length":479.966,"characteristic":"Standard","difficulty":"Hard","events":1177,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":224.984,"paritySummary":{"errors":130,"warns":53,"resets":0}},{"njs":10.0,"offset":0.0,"notes":875,"bombs":11,"obstacles":8,"nps":3.893,"length":480.0,"characteristic":"Standard","difficulty":"Expert","events":1190,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":225.0,"paritySummary":{"errors":125,"warns":100,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/4b7cdfcf558f66acc4b7a506c2dd50fbd9a76354.zip","coverURL":"https://cdn.beatsaver.com/4b7cdfcf558f66acc4b7a506c2dd50fbd9a76354.jpg","previewURL":"https://cdn.beatsaver.com/4b7cdfcf558f66acc4b7a506c2dd50fbd9a76354.mp3"}],"createdAt":"2018-06-20T23:44:52Z","updatedAt":"2018-06-20T23:44:52Z","lastPublishedAt":"2018-06-20T23:44:52Z"},{"id":"a233","name":"[NoodleJams Vol.1] 5 Seconds of Summer - Teeth","description":"Coming down with the isolation blues? Why not check out my new release! This one includes my first time playing around with Chroma lighting, so make sure you download Chroma 2.0 from Mod Assistant! The lights were inspired by the music video for this track, including re-creating some of the effects shown in the video. A Lightshow is included if you'd like to just check them out separately.\n\nThanks to qwasyx, Dat360NoScope, Sorukun, helencarnate, Shutforever, Pyrowarfare, and ethan_mp4 for playtesting.\n\nAnd a special thanks to AaltopahWi for advice on using Chroma, Aeroluna for Chroma 2.0, and CyanSnow for Chroma conversion help!\n\nAnd now some song details:\nBPM: 139\nNotes: Ez - 401 ; N - 514 ; H - 630 ; Ex - 868 ; Ex+ - 946\nNPS: Ez - 1.93 ; N - 2.48 ; H - 3.04 ; Ex - 4.18 ; Ex+ - 4.56\nBombs: None!\nWalls: Ez - 55 ; N - 44 ; H - 34 ; Ex - 22 ; Ex+ - 28","uploader":{"id":4285188,"name":"fruhead","uniqueSet":true,"hash":"5cff0b7598cc5a672c852683","avatar":"https://cdn.beatsaver.com/avatar/174000100413145090.png","type":"DISCORD"},"metadata":{"bpm":139.0,"duration":207,"songName":"Teeth","songSubName":"","songAuthorName":"5 Seconds of Summer","levelAuthorName":"fruhead"},"stats":{"plays":0,"downloads":4256,"upvotes":884,"downvotes":16,"score":0.92},"uploaded":"2020-05-04T04:13:11.364Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"0986c659b17b62f13098ff3598d781942eac9092","key":"a233","state":"Published","createdAt":"2020-05-04T04:13:11.364Z","sageScore":7,"diffs":[{"njs":10.0,"offset":-0.5,"notes":401,"bombs":0,"obstacles":55,"nps":2.002,"length":464.0,"characteristic":"Standard","difficulty":"Easy","events":8266,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":200.288,"paritySummary":{"errors":49,"warns":8,"resets":0}},{"njs":12.0,"offset":0.7,"notes":514,"bombs":0,"obstacles":44,"nps":2.566,"length":464.0,"characteristic":"Standard","difficulty":"Normal","events":8266,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":200.288,"paritySummary":{"errors":8,"warns":4,"resets":0}},{"njs":14.0,"offset":0.3,"notes":630,"bombs":0,"obstacles":34,"nps":3.145,"length":464.0,"characteristic":"Standard","difficulty":"Hard","events":8266,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":200.288,"paritySummary":{"errors":5,"warns":4,"resets":0}},{"njs":15.0,"offset":0.2,"notes":868,"bombs":0,"obstacles":24,"nps":4.334,"length":464.0,"characteristic":"Standard","difficulty":"Expert","events":8266,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":200.288,"paritySummary":{"errors":4,"warns":2,"resets":0}},{"njs":17.0,"offset":0.0,"notes":946,"bombs":0,"obstacles":28,"nps":4.723,"length":464.063,"characteristic":"Standard","difficulty":"ExpertPlus","events":8266,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":200.315,"paritySummary":{"errors":4,"warns":2,"resets":0}},{"njs":12.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"Lightshow","difficulty":"Easy","events":8266,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/0986c659b17b62f13098ff3598d781942eac9092.zip","coverURL":"https://cdn.beatsaver.com/0986c659b17b62f13098ff3598d781942eac9092.jpg","previewURL":"https://cdn.beatsaver.com/0986c659b17b62f13098ff3598d781942eac9092.mp3"}],"createdAt":"2020-05-04T04:13:11.364Z","updatedAt":"2020-05-04T04:13:11.364Z","lastPublishedAt":"2020-05-04T04:13:11.364Z"},{"id":"cb19","name":"[Extra Sensory] Mick Gordon - At DOOM's Gate","description":"Rip and tear\n\n\nExtra super huge thank you to the following people for making this possible\nAeroluna- For making Noodle Extensions and updating Chroma\nReaxt- For helping with making the scripts used to create this map and for inspiring us to continue through with this project.\nArti- For making the core mod that allowed Noodle Extensions and Chroma to support the new values\n\nAnd thank you for putting up with my shit during this (again) :)\n\nThis map was released as a part of the \"Extra Sensory\" event.\n\nVideo: https://www.youtube.com/watch?v=21JWpIWhqjg","uploader":{"id":4235138,"name":"CyanSnow","uniqueSet":true,"hash":"5cff0b7698cc5a672c8543ac","avatar":"https://cdn.beatsaver.com/avatar/154341137694326784.png","type":"DISCORD"},"metadata":{"bpm":161.0,"duration":72,"songName":"At DOOM's Gate","songSubName":"","songAuthorName":"Mick Gordon","levelAuthorName":"CyanSnow"},"stats":{"plays":0,"downloads":7731,"upvotes":2500,"downvotes":95,"score":0.9199},"uploaded":"2020-07-31T01:44:50.965Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"b0ea07691e483e7f5b2d9a2daf6774b512a68855","key":"cb19","state":"Published","createdAt":"2020-07-31T01:44:50.965Z","sageScore":3,"diffs":[{"njs":19.0,"offset":0.0,"notes":342,"bombs":0,"obstacles":4190,"nps":5.305,"length":173.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":261,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":64.472,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/b0ea07691e483e7f5b2d9a2daf6774b512a68855.zip","coverURL":"https://cdn.beatsaver.com/b0ea07691e483e7f5b2d9a2daf6774b512a68855.jpg","previewURL":"https://cdn.beatsaver.com/b0ea07691e483e7f5b2d9a2daf6774b512a68855.mp3"}],"createdAt":"2020-07-31T01:44:50.965Z","updatedAt":"2020-07-31T01:44:50.965Z","lastPublishedAt":"2020-07-31T01:44:50.965Z"},{"id":"570d","name":"Duel of the Fates (Techno Remix) - Star Wars","description":"|-o-| *Mapping Extensions Required* |-o-|\n\"Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.\"\nA Collab Between myself and EpicEwok. Audio Edit by Kolezan <3\nNotes Per Second:\nEasy / 1.2\nNormal / 1.5\nHard / 2.6\nExpert / 3.3\nExpert+ / 4.7\nSingle Saber (Expert) / 3.0\nFor Quest Users, we have a version without the walls for you here: https://beatsaver.com/beatmap/570c\nExpert+ Playthrough: https://streamable.com/3sftt\n","uploader":{"id":11373,"name":"redmagi","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e9d2","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9d2?d=retro","type":"SIMPLE"},"metadata":{"bpm":140.0,"duration":252,"songName":"Duel of the Fates ","songSubName":"","songAuthorName":"Techno Remix","levelAuthorName":"Sha3dy D3stiny"},"stats":{"plays":0,"downloads":9452,"upvotes":2313,"downvotes":85,"score":0.9199},"uploaded":"2019-07-14T20:18:06.134Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"65c578117df8bae1c83c98b43e4218b23a8de3f3","key":"570d","state":"Published","createdAt":"2019-07-14T20:18:06.134Z","sageScore":7,"diffs":[{"njs":12.0,"offset":0.0,"notes":307,"bombs":0,"obstacles":190,"nps":1.282,"length":558.755,"characteristic":"Standard","difficulty":"Easy","events":6138,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":239.466,"paritySummary":{"errors":32,"warns":6,"resets":0}},{"njs":12.0,"offset":0.0,"notes":376,"bombs":0,"obstacles":190,"nps":1.571,"length":558.63,"characteristic":"Standard","difficulty":"Normal","events":1272,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":239.413,"paritySummary":{"errors":14,"warns":10,"resets":0}},{"njs":14.0,"offset":0.0,"notes":669,"bombs":0,"obstacles":190,"nps":2.794,"length":558.797,"characteristic":"Standard","difficulty":"Hard","events":1272,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":239.484,"paritySummary":{"errors":15,"warns":21,"resets":0}},{"njs":15.0,"offset":0.0,"notes":832,"bombs":0,"obstacles":190,"nps":3.474,"length":558.792,"characteristic":"Standard","difficulty":"Expert","events":6138,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":239.482,"paritySummary":{"errors":33,"warns":39,"resets":0}},{"njs":16.0,"offset":0.0,"notes":1191,"bombs":0,"obstacles":190,"nps":4.97,"length":559.125,"characteristic":"Standard","difficulty":"ExpertPlus","events":6138,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":239.625,"paritySummary":{"errors":49,"warns":67,"resets":0}},{"njs":15.0,"offset":0.0,"notes":750,"bombs":0,"obstacles":190,"nps":3.131,"length":558.917,"characteristic":"OneSaber","difficulty":"Expert","events":6138,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":239.536,"paritySummary":{"errors":48,"warns":70,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/65c578117df8bae1c83c98b43e4218b23a8de3f3.zip","coverURL":"https://cdn.beatsaver.com/65c578117df8bae1c83c98b43e4218b23a8de3f3.jpg","previewURL":"https://cdn.beatsaver.com/65c578117df8bae1c83c98b43e4218b23a8de3f3.mp3"}],"createdAt":"2019-07-14T20:18:06.134Z","updatedAt":"2019-07-14T20:18:06.134Z","lastPublishedAt":"2019-07-14T20:18:06.134Z"},{"id":"4fe8","name":"Red Like Roses [One Saber] (RWBY: Volume 1 Soundtrack) - Jeff Williams ft. Casey Lee Williams","description":"Red like roses in one saber! Finally y'all can play this with a custom crescent rose saber and not look weird holding two! Further improved the sync on this from the original v2 of red like roses. Not all beats were mapped because its hard to hit consistent non stop 1/4s with only one saber but the ending section is still pretty tiring so prepare your arm :P. Map comes in two shades of Crescent Red.","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":200.0,"duration":194,"songName":"Red Like Roses (One Saber)","songSubName":"Jeff Williams ft. Casey Lee Williams","songAuthorName":"Joetastic","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":3763,"upvotes":648,"downvotes":7,"score":0.9199},"uploaded":"2019-05-30T13:34:51Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"0fdfb6fb8788f52b78c981c85cf9f316e4b6f232","key":"4fe8","state":"Published","createdAt":"2019-05-30T13:34:51Z","sageScore":5,"diffs":[{"njs":14.0,"offset":0.0,"notes":463,"bombs":2,"obstacles":22,"nps":2.47,"length":627.987,"characteristic":"OneSaber","difficulty":"Expert","events":641,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":188.396,"paritySummary":{"errors":18,"warns":18,"resets":1}}],"downloadURL":"https://cdn.beatsaver.com/0fdfb6fb8788f52b78c981c85cf9f316e4b6f232.zip","coverURL":"https://cdn.beatsaver.com/0fdfb6fb8788f52b78c981c85cf9f316e4b6f232.jpg","previewURL":"https://cdn.beatsaver.com/0fdfb6fb8788f52b78c981c85cf9f316e4b6f232.mp3"}],"createdAt":"2019-05-30T13:34:51Z","updatedAt":"2019-05-30T13:34:51Z","lastPublishedAt":"2019-05-30T13:34:51Z"},{"id":"1bf","name":"Caravan Palace - Lone Digger","description":"Caravan Palace - Lone Digger\r\nEasy | Normal | Hard | Expert\r\nThis is a re-upload of my previous map, with improvements for hard, and a new, harder expert difficulty mapped by Squeaksies, as well as lower difficulties as iterations on my original map.\r\n\r\nBPM: 124\r\nDuration: 2:49\r\nNotes (Hard): 730\r\nNotes (Expert): 735\r\nPreview (Hard): https://youtu.be/NExvLUyeBUU\r\nPreview (Expert): https://youtu.be/NYmExXlpB0k","uploader":{"id":45732,"name":"calijor","uniqueSet":false,"hash":"5cff0b7298cc5a672c84ebb1","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ebb1?d=retro","type":"SIMPLE"},"metadata":{"bpm":124.0,"duration":170,"songName":"Lone Digger","songSubName":"","songAuthorName":"Caravan Palace","levelAuthorName":"calijor"},"stats":{"plays":0,"downloads":13174,"upvotes":16427,"downvotes":987,"score":0.9199},"uploaded":"2018-05-23T00:15:19Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"906160fd1f808e2f34f33c2ca5920118855c065d","key":"1bf","state":"Published","createdAt":"2018-05-23T00:15:19Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":313,"bombs":0,"obstacles":27,"nps":1.931,"length":334.938,"characteristic":"Standard","difficulty":"Easy","events":1208,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":162.067,"paritySummary":{"errors":80,"warns":32,"resets":0},"stars":1.2},{"njs":10.0,"offset":0.0,"notes":480,"bombs":0,"obstacles":27,"nps":2.953,"length":335.938,"characteristic":"Standard","difficulty":"Normal","events":1208,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":162.55,"paritySummary":{"errors":56,"warns":112,"resets":0}},{"njs":10.0,"offset":0.0,"notes":730,"bombs":0,"obstacles":27,"nps":4.491,"length":335.938,"characteristic":"Standard","difficulty":"Hard","events":1208,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":162.55,"paritySummary":{"errors":157,"warns":122,"resets":0}},{"njs":10.0,"offset":0.0,"notes":735,"bombs":11,"obstacles":2,"nps":4.555,"length":333.5,"characteristic":"Standard","difficulty":"Expert","events":1198,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":161.371,"paritySummary":{"errors":163,"warns":131,"resets":5}}],"downloadURL":"https://cdn.beatsaver.com/906160fd1f808e2f34f33c2ca5920118855c065d.zip","coverURL":"https://cdn.beatsaver.com/906160fd1f808e2f34f33c2ca5920118855c065d.jpg","previewURL":"https://cdn.beatsaver.com/906160fd1f808e2f34f33c2ca5920118855c065d.mp3"}],"createdAt":"2018-05-23T00:15:19Z","updatedAt":"2018-05-23T00:15:19Z","lastPublishedAt":"2018-05-23T00:15:19Z"},{"id":"17195","name":"Ayunda Risu - KING","description":"There's a lotta covers of KING, but Risu's definitely takes the cake\n\nThis was a special request from a good friend of mine\n\nDifficulties |\nExpert+\nExpert\nHard\nNormal\nEasy\n\nThank you for playing\n\nDM any feedback on Discord\nETAN#8341","uploader":{"id":4235140,"name":"etan","uniqueSet":true,"hash":"5cff0b7798cc5a672c855775","avatar":"https://cdn.beatsaver.com/avatar/136373107559497728.png","type":"DISCORD"},"metadata":{"bpm":166.0,"duration":137,"songName":"KING","songSubName":"","songAuthorName":"Ayunda Risu","levelAuthorName":"ETAN"},"stats":{"plays":0,"downloads":3066,"upvotes":829,"downvotes":14,"score":0.9198},"uploaded":"2021-04-24T01:55:50.843Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"0d191cd2dfe9404e4f58b5520bbc9b7b9cafa8c7","key":"17195","state":"Published","createdAt":"2021-04-24T01:55:50.843Z","sageScore":6,"diffs":[{"njs":10.0,"offset":0.0,"notes":158,"bombs":0,"obstacles":11,"nps":1.228,"length":356.0,"characteristic":"Standard","difficulty":"Easy","events":5937,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":128.675,"paritySummary":{"errors":16,"warns":2,"resets":0}},{"njs":12.0,"offset":0.0,"notes":206,"bombs":0,"obstacles":11,"nps":1.601,"length":356.0,"characteristic":"Standard","difficulty":"Normal","events":5937,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":128.675,"paritySummary":{"errors":26,"warns":0,"resets":0}},{"njs":13.0,"offset":0.75,"notes":397,"bombs":0,"obstacles":11,"nps":3.06,"length":359.0,"characteristic":"Standard","difficulty":"Hard","events":5937,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":129.759,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":15.0,"offset":0.2,"notes":528,"bombs":0,"obstacles":11,"nps":3.98,"length":367.0,"characteristic":"Standard","difficulty":"Expert","events":5937,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":132.651,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":17.0,"offset":-0.2,"notes":716,"bombs":0,"obstacles":11,"nps":5.398,"length":367.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":5937,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":132.651,"paritySummary":{"errors":0,"warns":3,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/0d191cd2dfe9404e4f58b5520bbc9b7b9cafa8c7.zip","coverURL":"https://cdn.beatsaver.com/0d191cd2dfe9404e4f58b5520bbc9b7b9cafa8c7.jpg","previewURL":"https://cdn.beatsaver.com/0d191cd2dfe9404e4f58b5520bbc9b7b9cafa8c7.mp3"}],"createdAt":"2021-04-24T01:55:50.843Z","updatedAt":"2021-04-24T01:55:50.843Z","lastPublishedAt":"2021-04-24T01:55:50.843Z"},{"id":"142ea","name":"K/DA - VILLAIN (ft. Madison Beer, Kim Petras)","description":"From the unofficial music pack (K/DA ALL OUT) on BSaber.com\nPack: https://bsaber.com/kda-all-out/\nTrailer: https://youtu.be/e1ry_H86zqg\nPreview (Expert+): https://youtu.be/hrNAqEg6XPo\nLightshow: https://youtu.be/ZIqbGM4GjPc\n__________\nCredits🤍\nMapper: Sotarks\nLighter: Sotarks\nCurators: Pixelguy, JohnnyDee & joey\nSpecial Thanks: eliotttate & Belaya\nTrailer: Tuffiii\n__________\nCheck out K/DA🤍\nhttps://twitter.com/kda_music\nhttps://linktr.ee/kda_music\nProduced by Riot Games","uploader":{"id":2523,"name":"sotarks","uniqueSet":true,"hash":"5cff0b7698cc5a672c8541fd","avatar":"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8541fd?d=retro","type":"SIMPLE"},"metadata":{"bpm":160.0,"duration":201,"songName":"VILLAIN","songSubName":"","songAuthorName":"K/DA","levelAuthorName":"Sotarks"},"stats":{"plays":0,"downloads":12713,"upvotes":1439,"downvotes":41,"score":0.9198},"uploaded":"2021-02-17T18:04:42.442Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"d0c3395e0cce21f1e03ea9352543e4aaef74b902","key":"142ea","state":"Published","createdAt":"2021-02-17T18:04:42.442Z","sageScore":7,"diffs":[{"njs":12.0,"offset":-1.4371349,"notes":225,"bombs":0,"obstacles":179,"nps":1.174,"length":511.0,"characteristic":"Standard","difficulty":"Easy","events":2930,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":191.625,"paritySummary":{"errors":39,"warns":1,"resets":0}},{"njs":12.0,"offset":-1.4361658,"notes":303,"bombs":0,"obstacles":139,"nps":1.581,"length":511.0,"characteristic":"Standard","difficulty":"Normal","events":2930,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":191.625,"paritySummary":{"errors":3,"warns":0,"resets":0}},{"njs":14.0,"offset":0.19046581,"notes":526,"bombs":0,"obstacles":170,"nps":2.667,"length":526.0,"characteristic":"Standard","difficulty":"Hard","events":2930,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":197.25,"paritySummary":{"errors":5,"warns":0,"resets":0}},{"njs":16.0,"offset":-0.0027478295,"notes":738,"bombs":4,"obstacles":177,"nps":3.741,"length":526.0,"characteristic":"Standard","difficulty":"Expert","events":2930,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":197.25,"paritySummary":{"errors":2,"warns":0,"resets":1}},{"njs":18.0,"offset":-0.3,"notes":900,"bombs":156,"obstacles":121,"nps":4.563,"length":526.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":2985,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":197.25,"paritySummary":{"errors":2,"warns":11,"resets":9}}],"downloadURL":"https://cdn.beatsaver.com/d0c3395e0cce21f1e03ea9352543e4aaef74b902.zip","coverURL":"https://cdn.beatsaver.com/d0c3395e0cce21f1e03ea9352543e4aaef74b902.jpg","previewURL":"https://cdn.beatsaver.com/d0c3395e0cce21f1e03ea9352543e4aaef74b902.mp3"}],"createdAt":"2021-02-17T18:04:42.442Z","updatedAt":"2021-02-17T18:04:42.442Z","lastPublishedAt":"2021-02-17T18:04:42.442Z"},{"id":"850a","name":"Ellie Goulding - Lights","description":"Wanted to map this for a little while, really fun song that I know should make for a fun map (hopefully I was able to deliver that)\n\nThanks to Sorukun and Eku for feedback and testing\n\nEnjoy!","uploader":{"id":4286161,"name":"amuga","uniqueSet":true,"hash":"5e0a61e546a0710006590f49","avatar":"https://cdn.beatsaver.com/avatar/92425939555713024.png","type":"DISCORD"},"metadata":{"bpm":120.0,"duration":213,"songName":"Lights","songSubName":"","songAuthorName":"Ellie Goulding","levelAuthorName":"Amuga"},"stats":{"plays":0,"downloads":2383,"upvotes":752,"downvotes":11,"score":0.9198},"uploaded":"2020-02-08T00:21:39.641Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"3b3ef5f5438e7928fdb747004308e8a8d6a23dc8","key":"850a","state":"Published","createdAt":"2020-02-08T00:21:39.641Z","sageScore":4,"diffs":[{"njs":16.0,"offset":-0.25,"notes":921,"bombs":0,"obstacles":13,"nps":4.433,"length":415.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":2299,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":207.75,"paritySummary":{"errors":1,"warns":1,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/3b3ef5f5438e7928fdb747004308e8a8d6a23dc8.zip","coverURL":"https://cdn.beatsaver.com/3b3ef5f5438e7928fdb747004308e8a8d6a23dc8.jpg","previewURL":"https://cdn.beatsaver.com/3b3ef5f5438e7928fdb747004308e8a8d6a23dc8.mp3"}],"createdAt":"2020-02-08T00:21:39.641Z","updatedAt":"2020-02-08T00:21:39.641Z","lastPublishedAt":"2020-02-08T00:21:39.641Z"},{"id":"332f","name":"Spin Me Around (Spin Edition) - Dead or Alive","description":"*DISCLAIMER*\r\nThere are optional Dot \"Freestyle\" Sections in this one! Be careful when attempting spins!\r\n*YOU HAVE BEEN WARNED!*\r\n\r\nExpert+ has a few 1/4 beat hits, but is otherwise the same as Expert. Both Expert and Expert+ have the Dot Freestyle sections.\r\n\r\nNotes per Second / Video Play-through:\r\nEasy: 1.7 / https://streamable.com/t95t1\r\nNormal: 2 / https://streamable.com/al3de\r\nHard: 2.5 / https://streamable.com/5z1h5\r\nExpert: 3.9 / https://streamable.com/lq07e\r\nExpert+: 4.2 / https://streamable.com/dfygc (With FREESTYLE Moves!)\r\n\r\nMany Thanks to Aggro for the inspiration for this VERY SILLY spin move and Fromen for letting me use his map as a baseline for this!","uploader":{"id":11373,"name":"redmagi","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e9d2","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9d2?d=retro","type":"SIMPLE"},"metadata":{"bpm":128.0,"duration":188,"songName":"Spin Me Round (Spin Edition)","songSubName":"Dead or Alive","songAuthorName":"Redmagi","levelAuthorName":"redmagi"},"stats":{"plays":0,"downloads":4271,"upvotes":1418,"downvotes":40,"score":0.9198},"uploaded":"2019-02-03T02:19:40Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"1274bb0c32bb9e5bdb677ca7eca18a45d454aaf7","key":"332f","state":"Published","createdAt":"2019-02-03T02:19:40Z","sageScore":7,"diffs":[{"njs":10.0,"offset":0.0,"notes":318,"bombs":0,"obstacles":0,"nps":1.732,"length":392.0,"characteristic":"Standard","difficulty":"Easy","events":11030,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":183.75,"paritySummary":{"errors":38,"warns":25,"resets":0}},{"njs":10.0,"offset":0.0,"notes":370,"bombs":0,"obstacles":2,"nps":2.016,"length":392.0,"characteristic":"Standard","difficulty":"Normal","events":11030,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":183.75,"paritySummary":{"errors":30,"warns":15,"resets":0}},{"njs":10.0,"offset":0.0,"notes":479,"bombs":0,"obstacles":1,"nps":2.609,"length":392.0,"characteristic":"Standard","difficulty":"Hard","events":11030,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":183.75,"paritySummary":{"errors":43,"warns":89,"resets":0}},{"njs":12.0,"offset":0.0,"notes":743,"bombs":0,"obstacles":0,"nps":4.047,"length":392.0,"characteristic":"Standard","difficulty":"Expert","events":11030,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":183.75,"paritySummary":{"errors":32,"warns":56,"resets":0}},{"njs":14.0,"offset":0.0,"notes":792,"bombs":0,"obstacles":0,"nps":4.314,"length":392.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":11030,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":183.75,"paritySummary":{"errors":35,"warns":70,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/1274bb0c32bb9e5bdb677ca7eca18a45d454aaf7.zip","coverURL":"https://cdn.beatsaver.com/1274bb0c32bb9e5bdb677ca7eca18a45d454aaf7.jpg","previewURL":"https://cdn.beatsaver.com/1274bb0c32bb9e5bdb677ca7eca18a45d454aaf7.mp3"}],"createdAt":"2019-02-03T02:19:40Z","updatedAt":"2019-02-03T02:19:40Z","lastPublishedAt":"2019-02-03T02:19:40Z"},{"id":"9bdb","name":"Everything Black (feat. Mike Taylor) - Unlike Pluto","description":"This song is special to me :) Hope you enjoy!\n\nMaul-map by Trolav. Check out his other fantastic maps here -> https://beatsaver.com/uploader/5cff0b7598cc5a672c85368e\nExpert by Checkthepan. Check out his other awesome maps here -> https://beatsaver.com/uploader/5cff0b7398cc5a672c84f3d5\nExpert+ by me.\n\nPreviews:\n\nExpert+: https://youtu.be/gO2pLki8Hic\n\nExpert: https://youtu.be/oTF1tW2AKtg\n\nWann give some feedback? Hit me up on discord -> JohnnyDee#0002","uploader":{"id":1991,"name":"johnnydee","uniqueSet":true,"hash":"5d3e1593130e0e00069019f7","avatar":"https://www.gravatar.com/avatar/5d3e1593130e0e00069019f7?d=retro","type":"SIMPLE"},"metadata":{"bpm":98.0,"duration":230,"songName":"Everything Black","songSubName":"(feat. Mike Taylor)","songAuthorName":"Unlike Pluto","levelAuthorName":"Ramen Noodle"},"stats":{"plays":0,"downloads":1934,"upvotes":1017,"downvotes":22,"score":0.9197},"uploaded":"2020-04-17T07:02:17.945Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"0d005c0ae0b1e3ff7c43aef0dbc7d40fdb02d8fb","key":"9bdb","state":"Published","createdAt":"2020-04-17T07:02:17.945Z","sageScore":5,"diffs":[{"njs":15.0,"offset":0.4,"notes":714,"bombs":0,"obstacles":6,"nps":3.167,"length":368.188,"characteristic":"Standard","difficulty":"Expert","events":2661,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":225.421,"paritySummary":{"errors":1,"warns":1,"resets":0}},{"njs":17.0,"offset":0.4,"notes":767,"bombs":0,"obstacles":122,"nps":3.403,"length":368.094,"characteristic":"Standard","difficulty":"ExpertPlus","events":2250,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":225.364,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":18.0,"offset":0.2,"notes":717,"bombs":0,"obstacles":122,"nps":3.182,"length":368.0,"characteristic":"NoArrows","difficulty":"Expert","events":2248,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":225.306,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/0d005c0ae0b1e3ff7c43aef0dbc7d40fdb02d8fb.zip","coverURL":"https://cdn.beatsaver.com/0d005c0ae0b1e3ff7c43aef0dbc7d40fdb02d8fb.jpg","previewURL":"https://cdn.beatsaver.com/0d005c0ae0b1e3ff7c43aef0dbc7d40fdb02d8fb.mp3"}],"createdAt":"2020-04-17T07:02:17.945Z","updatedAt":"2020-04-17T07:02:17.945Z","lastPublishedAt":"2020-04-17T07:02:17.945Z"},{"id":"fc05","name":"EVERGLOW - LA DI DA","description":"This is a map, there's 3 difficulties which are respectively pretty hard for what they should be. \nExpert+ Preview: https://youtu.be/W8JN3NSaX9A\nRequests or complaints - Discord: SimplyMarvellous#0290 ","uploader":{"id":4285134,"name":"simplymarvellous","uniqueSet":true,"hash":"5cff0b7398cc5a672c84f7a8","avatar":"https://cdn.beatsaver.com/avatar/189618441429319680.png","type":"DISCORD"},"metadata":{"bpm":164.0,"duration":213,"songName":"LA DI DA","songSubName":"","songAuthorName":"EVERGLOW","levelAuthorName":"simplymarvellous"},"stats":{"plays":0,"downloads":7650,"upvotes":825,"downvotes":14,"score":0.9196},"uploaded":"2020-10-09T07:03:45.316Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"000fbcb46c41cd0c363a80ae389333f7625e0921","key":"fc05","state":"Published","createdAt":"2020-10-09T07:03:45.316Z","sageScore":4,"diffs":[{"njs":14.0,"offset":0.4,"notes":651,"bombs":36,"obstacles":166,"nps":3.138,"length":567.0,"characteristic":"Standard","difficulty":"Hard","events":9456,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":207.439,"paritySummary":{"errors":1,"warns":0,"resets":12}},{"njs":16.0,"offset":0.0,"notes":811,"bombs":36,"obstacles":172,"nps":3.91,"length":567.0,"characteristic":"Standard","difficulty":"Expert","events":9456,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":207.439,"paritySummary":{"errors":0,"warns":0,"resets":9}},{"njs":18.0,"offset":-0.4,"notes":934,"bombs":26,"obstacles":172,"nps":4.503,"length":567.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":9456,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":207.439,"paritySummary":{"errors":0,"warns":4,"resets":6}}],"downloadURL":"https://cdn.beatsaver.com/000fbcb46c41cd0c363a80ae389333f7625e0921.zip","coverURL":"https://cdn.beatsaver.com/000fbcb46c41cd0c363a80ae389333f7625e0921.jpg","previewURL":"https://cdn.beatsaver.com/000fbcb46c41cd0c363a80ae389333f7625e0921.mp3"}],"createdAt":"2020-10-09T07:03:45.316Z","updatedAt":"2020-10-09T07:03:45.316Z","lastPublishedAt":"2020-10-09T07:03:45.316Z"},{"id":"2b13","name":"Viva La Vida - Coldplay","description":"Love Viva La Vida, was one of my favorite childhood songs from Coldplay. 9 Years later, this song ages like fine wine. Just like Grenade, I brought this song off itunes so its the highest quality file you can get :)","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":138.0,"duration":243,"songName":"Viva La Vida","songSubName":"Coldplay","songAuthorName":"Joetastic","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":5911,"upvotes":1934,"downvotes":66,"score":0.9196},"uploaded":"2019-01-05T06:02:16Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"023f19dd2ae57e43b99d62c837d1c708020f635d","key":"2b13","state":"Published","createdAt":"2019-01-05T06:02:16Z","sageScore":5,"diffs":[{"njs":14.0,"offset":0.0,"notes":919,"bombs":0,"obstacles":41,"nps":4.136,"length":511.0,"characteristic":"Standard","difficulty":"Hard","events":714,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":222.174,"paritySummary":{"errors":41,"warns":35,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/023f19dd2ae57e43b99d62c837d1c708020f635d.zip","coverURL":"https://cdn.beatsaver.com/023f19dd2ae57e43b99d62c837d1c708020f635d.jpg","previewURL":"https://cdn.beatsaver.com/023f19dd2ae57e43b99d62c837d1c708020f635d.mp3"}],"createdAt":"2019-01-05T06:02:16Z","updatedAt":"2019-01-05T06:02:16Z","lastPublishedAt":"2019-01-05T06:02:16Z"},{"id":"21","name":"REOL feat. nqrse - LUVORATORRRRRY!","description":"Hard (353 notes) / Hard+ (455 notes) / Expert (526 notes) / 15 Obstacles / Video Demonstration: https://streamable.com/23ayv / Part 1 of the J-EDM Graduation series! Use this song pack to level up your game!","uploader":{"id":48853,"name":"datkami","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e8a3","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8a3?d=retro","type":"SIMPLE"},"metadata":{"bpm":128.0,"duration":139,"songName":"LUVORATORRRRRY!","songSubName":"feat.nqrse","songAuthorName":"Reol","levelAuthorName":"datkami"},"stats":{"plays":0,"downloads":4483,"upvotes":4237,"downvotes":195,"score":0.9196},"uploaded":"2018-05-10T02:24:36Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"c807689fefdae82aa79ba9c7f861118fb426b4cc","key":"21","state":"Published","createdAt":"2018-05-10T02:24:36Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":353,"bombs":4,"obstacles":15,"nps":2.624,"length":287.0,"characteristic":"Standard","difficulty":"Normal","events":6000,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":134.531,"paritySummary":{"errors":61,"warns":33,"resets":0}},{"njs":10.0,"offset":0.0,"notes":455,"bombs":4,"obstacles":15,"nps":3.382,"length":287.0,"characteristic":"Standard","difficulty":"Hard","events":6000,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":134.531,"paritySummary":{"errors":75,"warns":74,"resets":0}},{"njs":10.0,"offset":0.0,"notes":526,"bombs":10,"obstacles":15,"nps":3.91,"length":287.0,"characteristic":"Standard","difficulty":"Expert","events":1000,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":134.531,"paritySummary":{"errors":72,"warns":78,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/c807689fefdae82aa79ba9c7f861118fb426b4cc.zip","coverURL":"https://cdn.beatsaver.com/c807689fefdae82aa79ba9c7f861118fb426b4cc.jpg","previewURL":"https://cdn.beatsaver.com/c807689fefdae82aa79ba9c7f861118fb426b4cc.mp3"}],"createdAt":"2018-05-10T02:24:36Z","updatedAt":"2018-05-10T02:24:36Z","lastPublishedAt":"2018-05-10T02:24:36Z"},{"id":"6a14","name":"Sweet But Psycho - Ava Max","description":"Mapped by Drunkdwarf. Fun upbeat tune that's great for dancing. Any feedback is appreciated ","uploader":{"id":36873,"name":"drunkdwarf","uniqueSet":true,"hash":"5d9eea1e048dff0006e87333","avatar":"https://www.gravatar.com/avatar/5d9eea1e048dff0006e87333?d=retro","type":"SIMPLE"},"metadata":{"bpm":133.0,"duration":189,"songName":"Sweet But Psycho","songSubName":"","songAuthorName":"Ava Max","levelAuthorName":"Drunkdwarf"},"stats":{"plays":0,"downloads":1850,"upvotes":746,"downvotes":11,"score":0.9195},"uploaded":"2019-10-16T05:39:20.052Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"eed9239c036bce71b6d23cf90a3886fc88adb6ee","key":"6a14","state":"Published","createdAt":"2019-10-16T05:39:20.052Z","sageScore":4,"diffs":[{"njs":14.0,"offset":0.0,"notes":661,"bombs":0,"obstacles":23,"nps":3.672,"length":399.0,"characteristic":"Standard","difficulty":"Expert","events":952,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":180.0,"paritySummary":{"errors":55,"warns":49,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/eed9239c036bce71b6d23cf90a3886fc88adb6ee.zip","coverURL":"https://cdn.beatsaver.com/eed9239c036bce71b6d23cf90a3886fc88adb6ee.jpg","previewURL":"https://cdn.beatsaver.com/eed9239c036bce71b6d23cf90a3886fc88adb6ee.mp3"}],"createdAt":"2019-10-16T05:39:20.052Z","updatedAt":"2019-10-16T05:39:20.052Z","lastPublishedAt":"2019-10-16T05:39:20.052Z"},{"id":"11b01","name":"Merry Go Round of Life - Howl's Moving Castle (Joe Hisaishi)","description":"#302\n\nYoutube Preview : https://www.youtube.com/watch?v=q45z-XvFGeI\n\nDiscord Server : https://discord.gg/3ZSWSTh\nTwitch: https://www.twitch.tv/rigiiid\nTwitter: https://twitter.com/Rigid_bs\nYoutube : https://www.youtube.com/channel/UC36LRBThDdVFjCr-ZXOj-Uw","uploader":{"id":4284588,"name":"rigid","uniqueSet":true,"hash":"5cff0b7598cc5a672c852224","avatar":"https://cdn.beatsaver.com/avatar/295613108947386368.png","type":"DISCORD"},"metadata":{"bpm":165.0,"duration":309,"songName":"Merry-Go Round Of Life","songSubName":"","songAuthorName":"Joe Hisaishi","levelAuthorName":"Rigid"},"stats":{"plays":0,"downloads":2060,"upvotes":818,"downvotes":14,"score":0.9194},"uploaded":"2020-12-03T23:32:31.283Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"d93e9ef74098ff490d0cd05e492f20c2be750ce2","key":"11b01","state":"Published","createdAt":"2020-12-03T23:32:31.283Z","sageScore":1,"diffs":[{"njs":17.0,"offset":-0.2,"notes":1020,"bombs":41,"obstacles":18,"nps":3.42,"length":820.105,"characteristic":"Standard","difficulty":"ExpertPlus","events":3102,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":298.22,"paritySummary":{"errors":1,"warns":0,"resets":3}}],"downloadURL":"https://cdn.beatsaver.com/d93e9ef74098ff490d0cd05e492f20c2be750ce2.zip","coverURL":"https://cdn.beatsaver.com/d93e9ef74098ff490d0cd05e492f20c2be750ce2.jpg","previewURL":"https://cdn.beatsaver.com/d93e9ef74098ff490d0cd05e492f20c2be750ce2.mp3"}],"createdAt":"2020-12-03T23:32:31.283Z","updatedAt":"2020-12-03T23:32:31.283Z","lastPublishedAt":"2020-12-03T23:32:31.283Z"},{"id":"618a","name":"Teminite - Party Time","description":"Expert only\r\n","uploader":{"id":12996,"name":"rustic","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e8c4","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro","type":"SIMPLE"},"metadata":{"bpm":125.0,"duration":271,"songName":"Party Time","songSubName":"","songAuthorName":"Teminite","levelAuthorName":"Rustic"},"stats":{"plays":0,"downloads":1898,"upvotes":1056,"downvotes":24,"score":0.9194},"uploaded":"2019-09-05T20:33:35.424Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"05aa128214d1adc3ca599a0475b6c422debc08e0","key":"618a","state":"Published","createdAt":"2019-09-05T20:33:35.424Z","sageScore":6,"diffs":[{"njs":18.0,"offset":0.0,"notes":953,"bombs":112,"obstacles":1389,"nps":3.65,"length":544.0,"characteristic":"Standard","difficulty":"Expert","events":7206,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":261.12,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/05aa128214d1adc3ca599a0475b6c422debc08e0.zip","coverURL":"https://cdn.beatsaver.com/05aa128214d1adc3ca599a0475b6c422debc08e0.jpg","previewURL":"https://cdn.beatsaver.com/05aa128214d1adc3ca599a0475b6c422debc08e0.mp3"}],"createdAt":"2019-09-05T20:33:35.424Z","updatedAt":"2019-09-05T20:33:35.424Z","lastPublishedAt":"2019-09-05T20:33:35.424Z"},{"id":"3b82","name":"DJ Got Us Fallin In Love - Usher ft. Pitbull","description":"\"DJ Got Us Fallin' in Love\" is a song by American R&B recording artist Usher featuring guest vocals from American rapper Pitbull.\r\n\r\nSong is brought from iTunes for the highest quality sound file :)","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":120.0,"duration":222,"songName":"DJ Got Us Fallin In Love","songSubName":"Usher ft. Pitbull","songAuthorName":"Joetastic","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":2910,"upvotes":819,"downvotes":14,"score":0.9194},"uploaded":"2019-03-04T16:58:43Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"96b8df29da4271f56c6777f11e69cd06669055fe","key":"3b82","state":"Published","createdAt":"2019-03-04T16:58:43Z","sageScore":5,"diffs":[{"njs":14.0,"offset":0.0,"notes":856,"bombs":0,"obstacles":5,"nps":3.963,"length":432.0,"characteristic":"Standard","difficulty":"Expert","events":2006,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":216.0,"paritySummary":{"errors":82,"warns":85,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/96b8df29da4271f56c6777f11e69cd06669055fe.zip","coverURL":"https://cdn.beatsaver.com/96b8df29da4271f56c6777f11e69cd06669055fe.jpg","previewURL":"https://cdn.beatsaver.com/96b8df29da4271f56c6777f11e69cd06669055fe.mp3"}],"createdAt":"2019-03-04T16:58:43Z","updatedAt":"2019-03-04T16:58:43Z","lastPublishedAt":"2019-03-04T16:58:43Z"},{"id":"2649","name":"[Aurora Theory] Erik McClure - Soar","description":"The first map of the start of a new project for me :)\r\n\r\nA peaceful and comfy map, not intended to be super hard at all (unlike most of my other maps) but might be on the harder side of Expert.\r\nPeople need to give Erik McClure more recognition!\r\n\r\nDiscord: discord.gg/EVU9At2 (For updates regarding my maps, notifications for my streams, and a way to contact me)","uploader":{"id":4288620,"name":"hexagonial","uniqueSet":true,"hash":"5cff0b7398cc5a672c84f2fb","avatar":"https://cdn.beatsaver.com/avatar/221442943045599232.png","type":"DISCORD"},"metadata":{"bpm":160.0,"duration":350,"songName":"Soar","songSubName":"Erik McClure","songAuthorName":"Hexagonial","levelAuthorName":"hexagonial"},"stats":{"plays":0,"downloads":1468,"upvotes":1099,"downvotes":26,"score":0.9194},"uploaded":"2018-12-16T21:04:48Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"087cedeab4b9e4c3a4b9c594c97bee6f446f0a77","key":"2649","state":"Published","createdAt":"2018-12-16T21:04:48Z","sageScore":6,"diffs":[{"njs":15.0,"offset":0.0,"notes":1337,"bombs":0,"obstacles":71,"nps":3.961,"length":900.0,"characteristic":"Standard","difficulty":"Expert","events":3056,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":337.5,"paritySummary":{"errors":26,"warns":7,"resets":0},"stars":3.3}],"downloadURL":"https://cdn.beatsaver.com/087cedeab4b9e4c3a4b9c594c97bee6f446f0a77.zip","coverURL":"https://cdn.beatsaver.com/087cedeab4b9e4c3a4b9c594c97bee6f446f0a77.jpg","previewURL":"https://cdn.beatsaver.com/087cedeab4b9e4c3a4b9c594c97bee6f446f0a77.mp3"}],"createdAt":"2018-12-16T21:04:48Z","updatedAt":"2018-12-16T21:04:48Z","lastPublishedAt":"2018-12-16T21:04:48Z"},{"id":"dfc3","name":"K/DA - THE BADDEST ft. (G)I-DLE, Bea Miller, Wolftyla","description":"Collab with ConnorJC. check out his maps! He did the 360 map","uploader":{"id":4285107,"name":"kikaeaeon","uniqueSet":true,"hash":"5cff0b7498cc5a672c85109b","avatar":"https://cdn.beatsaver.com/avatar/103715469822816256.png","type":"DISCORD"},"metadata":{"bpm":150.0,"duration":162,"songName":"Baddest","songSubName":"","songAuthorName":"KDA","levelAuthorName":"KikaeAeon & ConnorJC"},"stats":{"plays":0,"downloads":4890,"upvotes":2449,"downvotes":94,"score":0.9193},"uploaded":"2020-08-29T05:50:22.494Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"c2a6c6aa907994353fef68370ebbda4da4ea4cc8","key":"dfc3","state":"Published","createdAt":"2020-08-29T05:50:22.494Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":274,"bombs":0,"obstacles":54,"nps":1.713,"length":400.0,"characteristic":"Standard","difficulty":"Easy","events":901,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":160.0,"paritySummary":{"errors":11,"warns":2,"resets":0}},{"njs":10.0,"offset":0.0,"notes":321,"bombs":0,"obstacles":54,"nps":2.006,"length":400.0,"characteristic":"Standard","difficulty":"Normal","events":1004,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":160.0,"paritySummary":{"errors":3,"warns":0,"resets":0}},{"njs":12.0,"offset":0.0,"notes":464,"bombs":0,"obstacles":61,"nps":2.9,"length":400.0,"characteristic":"Standard","difficulty":"Hard","events":1347,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":160.0,"paritySummary":{"errors":13,"warns":13,"resets":0}},{"njs":14.0,"offset":0.0,"notes":608,"bombs":0,"obstacles":65,"nps":3.8,"length":400.0,"characteristic":"Standard","difficulty":"Expert","events":1614,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":160.0,"paritySummary":{"errors":17,"warns":23,"resets":0}},{"njs":16.0,"offset":0.0,"notes":851,"bombs":0,"obstacles":96,"nps":5.319,"length":400.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":2480,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":160.0,"paritySummary":{"errors":19,"warns":41,"resets":0}},{"njs":19.0,"offset":0.0,"notes":944,"bombs":6,"obstacles":305,"nps":5.9,"length":400.0,"characteristic":"360Degree","difficulty":"ExpertPlus","events":3408,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":160.0,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/c2a6c6aa907994353fef68370ebbda4da4ea4cc8.zip","coverURL":"https://cdn.beatsaver.com/c2a6c6aa907994353fef68370ebbda4da4ea4cc8.jpg","previewURL":"https://cdn.beatsaver.com/c2a6c6aa907994353fef68370ebbda4da4ea4cc8.mp3"}],"createdAt":"2020-08-29T05:50:22.494Z","updatedAt":"2020-08-29T05:50:22.494Z","lastPublishedAt":"2020-08-29T05:50:22.494Z"},{"id":"5893","name":"Crypt of the NecroDancer - King Conga","description":"Hope you like this remap :) \n\n- ORYGINAL","uploader":{"id":34774,"name":"oryginal","uniqueSet":true,"hash":"5cff0b7698cc5a672c8551e0","avatar":"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8551e0?d=retro","type":"SIMPLE"},"metadata":{"bpm":120.0,"duration":107,"songName":"King Conga","songSubName":"","songAuthorName":"Danny Baranowsky","levelAuthorName":"ORYGINAL"},"stats":{"plays":0,"downloads":1592,"upvotes":741,"downvotes":11,"score":0.9193},"uploaded":"2019-07-23T14:43:05.570Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"d0b4c5fcc3522f5b58d1ff2da7cfdd8086651078","key":"5893","state":"Published","createdAt":"2019-07-23T14:43:05.570Z","sageScore":4,"diffs":[{"njs":12.0,"offset":0.0,"notes":311,"bombs":104,"obstacles":30,"nps":3.019,"length":206.0,"characteristic":"Standard","difficulty":"Hard","events":1160,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":103.0,"paritySummary":{"errors":15,"warns":21,"resets":4}},{"njs":12.0,"offset":0.0,"notes":387,"bombs":118,"obstacles":23,"nps":3.757,"length":206.0,"characteristic":"Standard","difficulty":"Expert","events":1160,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":103.0,"paritySummary":{"errors":9,"warns":19,"resets":4}}],"downloadURL":"https://cdn.beatsaver.com/d0b4c5fcc3522f5b58d1ff2da7cfdd8086651078.zip","coverURL":"https://cdn.beatsaver.com/d0b4c5fcc3522f5b58d1ff2da7cfdd8086651078.jpg","previewURL":"https://cdn.beatsaver.com/d0b4c5fcc3522f5b58d1ff2da7cfdd8086651078.mp3"}],"createdAt":"2019-07-23T14:43:05.570Z","updatedAt":"2019-07-23T14:43:05.570Z","lastPublishedAt":"2019-07-23T14:43:05.570Z"},{"id":"3821","name":"Le Perv - Carpenter Brut (Hotline Miami 2 Soundtrack)","description":"Shoutouts to twitch.tv/lexington64 and twitch.tv/whipstickgostop for playtesting!","uploader":{"id":4285077,"name":"ris","uniqueSet":true,"hash":"5cff0b7598cc5a672c8535df","avatar":"https://cdn.beatsaver.com/avatar/191597992061435904.png","type":"DISCORD"},"metadata":{"bpm":120.0,"duration":259,"songName":"Le Perv","songSubName":"Carpenter Brut","songAuthorName":"Ris","levelAuthorName":"Ris"},"stats":{"plays":0,"downloads":1655,"upvotes":983,"downvotes":21,"score":0.9193},"uploaded":"2019-02-21T02:57:32Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"57ad431c662057d428e920a8cd225bae5ab3d2c3","key":"3821","state":"Published","createdAt":"2019-02-21T02:57:32Z","sageScore":3,"diffs":[{"njs":10.0,"offset":0.0,"notes":488,"bombs":0,"obstacles":0,"nps":1.91,"length":511.0,"characteristic":"Standard","difficulty":"Normal","events":369,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":255.5,"paritySummary":{"errors":109,"warns":46,"resets":0}},{"njs":10.0,"offset":0.0,"notes":922,"bombs":0,"obstacles":0,"nps":3.609,"length":511.0,"characteristic":"Standard","difficulty":"Hard","events":369,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":255.5,"paritySummary":{"errors":99,"warns":85,"resets":0}},{"njs":12.0,"offset":0.0,"notes":1176,"bombs":0,"obstacles":0,"nps":4.603,"length":511.0,"characteristic":"Standard","difficulty":"Expert","events":369,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":255.5,"paritySummary":{"errors":104,"warns":99,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/57ad431c662057d428e920a8cd225bae5ab3d2c3.zip","coverURL":"https://cdn.beatsaver.com/57ad431c662057d428e920a8cd225bae5ab3d2c3.jpg","previewURL":"https://cdn.beatsaver.com/57ad431c662057d428e920a8cd225bae5ab3d2c3.mp3"}],"createdAt":"2019-02-21T02:57:32Z","updatedAt":"2019-02-21T02:57:32Z","lastPublishedAt":"2019-02-21T02:57:32Z"},{"id":"623c","name":"Lil Tecca - Ransom","description":"","uploader":{"id":4285107,"name":"kikaeaeon","uniqueSet":true,"hash":"5cff0b7498cc5a672c85109b","avatar":"https://cdn.beatsaver.com/avatar/103715469822816256.png","type":"DISCORD"},"metadata":{"bpm":180.0,"duration":133,"songName":"Ransom","songSubName":"","songAuthorName":"Lil Tecca","levelAuthorName":"KikaeAeon"},"stats":{"plays":0,"downloads":2213,"upvotes":1476,"downvotes":44,"score":0.9192},"uploaded":"2019-09-08T17:05:01.320Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"ebdaaafecece7859d28ee1d80a94fa8b2b9992a3","key":"623c","state":"Published","createdAt":"2019-09-08T17:05:01.320Z","sageScore":5,"diffs":[{"njs":12.0,"offset":0.0,"notes":358,"bombs":0,"obstacles":31,"nps":2.834,"length":379.0,"characteristic":"Standard","difficulty":"Expert","events":914,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":126.333,"paritySummary":{"errors":11,"warns":13,"resets":0}},{"njs":16.0,"offset":0.0,"notes":571,"bombs":0,"obstacles":24,"nps":4.52,"length":379.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":684,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":126.333,"paritySummary":{"errors":12,"warns":8,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/ebdaaafecece7859d28ee1d80a94fa8b2b9992a3.zip","coverURL":"https://cdn.beatsaver.com/ebdaaafecece7859d28ee1d80a94fa8b2b9992a3.jpg","previewURL":"https://cdn.beatsaver.com/ebdaaafecece7859d28ee1d80a94fa8b2b9992a3.mp3"}],"createdAt":"2019-09-08T17:05:01.320Z","updatedAt":"2019-09-08T17:05:01.320Z","lastPublishedAt":"2019-09-08T17:05:01.320Z"},{"id":"2b56","name":"Pitbull Ft. Ke$ha - Timber","description":"Happy New Year! Here is a song I've been working on for a long time (With A LOT of procrastination). It didn't quite feel right with the notes being on beat so I extended them 1/16th off beat and it sounded a little better. Enjoy!\r\n\r\nVideo Preview of expert: https://youtu.be/ntGqRvV5hX4","uploader":{"id":1974,"name":"scottie2pottie","uniqueSet":true,"hash":"5cff0b7598cc5a672c85329f","avatar":"https://www.gravatar.com/avatar/5cff0b7598cc5a672c85329f?d=retro","type":"SIMPLE"},"metadata":{"bpm":130.0,"duration":204,"songName":"Timber","songSubName":"Pitbull","songAuthorName":"Scottie2Pottie","levelAuthorName":"scottie2pottie"},"stats":{"plays":0,"downloads":4086,"upvotes":1223,"downvotes":32,"score":0.9191},"uploaded":"2019-01-06T03:24:10Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"ca709a09209760e19d9b63952aa208efc4663aef","key":"2b56","state":"Published","createdAt":"2019-01-06T03:24:10Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":721,"bombs":4,"obstacles":0,"nps":3.616,"length":432.0,"characteristic":"Standard","difficulty":"Hard","events":1003,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":199.385,"paritySummary":{"errors":34,"warns":15,"resets":0}},{"njs":10.0,"offset":0.0,"notes":932,"bombs":4,"obstacles":0,"nps":4.674,"length":432.0,"characteristic":"Standard","difficulty":"Expert","events":1124,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":199.385,"paritySummary":{"errors":29,"warns":31,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/ca709a09209760e19d9b63952aa208efc4663aef.zip","coverURL":"https://cdn.beatsaver.com/ca709a09209760e19d9b63952aa208efc4663aef.jpg","previewURL":"https://cdn.beatsaver.com/ca709a09209760e19d9b63952aa208efc4663aef.mp3"}],"createdAt":"2019-01-06T03:24:10Z","updatedAt":"2019-01-06T03:24:10Z","lastPublishedAt":"2019-01-06T03:24:10Z"},{"id":"12db3","name":"Lindsey Sterling - Artemis ","description":"Made this a couple of months ago and totally didn't forget to upload it.\n\nThis was a special request by--I don't even know. I forgot. It's that old.","uploader":{"id":15368,"name":"theab","uniqueSet":true,"hash":"5cff0b7698cc5a672c853a14","avatar":"https://www.gravatar.com/avatar/5cff0b7698cc5a672c853a14?d=retro","type":"SIMPLE"},"metadata":{"bpm":190.0,"duration":228,"songName":"Artemis","songSubName":"","songAuthorName":"Lindsey Stirling","levelAuthorName":"Ab"},"stats":{"plays":0,"downloads":1518,"upvotes":602,"downvotes":6,"score":0.919},"uploaded":"2021-01-18T06:05:51.386Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"a8df2df28d239a14b18f40855045eaca88a0c8e5","key":"12db3","state":"Published","createdAt":"2021-01-18T06:05:51.386Z","sageScore":3,"diffs":[{"njs":21.0,"offset":0.0,"notes":975,"bombs":0,"obstacles":2,"nps":4.358,"length":708.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":1159,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":223.737,"paritySummary":{"errors":6,"warns":5,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/a8df2df28d239a14b18f40855045eaca88a0c8e5.zip","coverURL":"https://cdn.beatsaver.com/a8df2df28d239a14b18f40855045eaca88a0c8e5.jpg","previewURL":"https://cdn.beatsaver.com/a8df2df28d239a14b18f40855045eaca88a0c8e5.mp3"}],"createdAt":"2021-01-18T06:05:51.386Z","updatedAt":"2021-01-18T06:05:51.386Z","lastPublishedAt":"2021-01-18T06:05:51.386Z"},{"id":"2db1","name":"Huey Lewis - The Power of Love","description":"Here is my first map of 2019 covering 'The power of love' by Huey Lewis!\r\nAll difficulties are included from easy to expert, enjoy ;)\r\n\r\nBeastsaber: https://bsaber.com/members/stumi/\r\nVideo: https://www.youtube.com/watch?v=7aHevt6DVkc","uploader":{"id":4785,"name":"stumi","uniqueSet":false,"hash":"5cff0b7398cc5a672c84f720","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro","type":"SIMPLE"},"metadata":{"bpm":119.0,"duration":226,"songName":"The power of love","songSubName":"Huey Lewis","songAuthorName":"Stumi","levelAuthorName":"stumi"},"stats":{"plays":0,"downloads":6882,"upvotes":1088,"downvotes":26,"score":0.919},"uploaded":"2019-01-14T18:26:26Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"bf261b573d7c649150ea1c23ec504130904b6aa2","key":"2db1","state":"Published","createdAt":"2019-01-14T18:26:26Z","sageScore":6,"diffs":[{"njs":10.0,"offset":0.0,"notes":311,"bombs":0,"obstacles":17,"nps":1.449,"length":425.0,"characteristic":"Standard","difficulty":"Easy","events":1830,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":214.286,"paritySummary":{"errors":29,"warns":22,"resets":0}},{"njs":10.0,"offset":0.0,"notes":489,"bombs":0,"obstacles":20,"nps":2.278,"length":425.0,"characteristic":"Standard","difficulty":"Normal","events":1830,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":214.286,"paritySummary":{"errors":37,"warns":55,"resets":0}},{"njs":11.0,"offset":0.0,"notes":697,"bombs":0,"obstacles":1,"nps":3.247,"length":425.0,"characteristic":"Standard","difficulty":"Hard","events":1831,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":214.286,"paritySummary":{"errors":41,"warns":40,"resets":0}},{"njs":12.0,"offset":0.0,"notes":920,"bombs":0,"obstacles":0,"nps":4.287,"length":424.875,"characteristic":"Standard","difficulty":"Expert","events":1831,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":214.223,"paritySummary":{"errors":59,"warns":68,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/bf261b573d7c649150ea1c23ec504130904b6aa2.zip","coverURL":"https://cdn.beatsaver.com/bf261b573d7c649150ea1c23ec504130904b6aa2.jpg","previewURL":"https://cdn.beatsaver.com/bf261b573d7c649150ea1c23ec504130904b6aa2.mp3"}],"createdAt":"2019-01-14T18:26:26Z","updatedAt":"2019-01-14T18:26:26Z","lastPublishedAt":"2019-01-14T18:26:26Z"},{"id":"10377","name":"Marnik - Hocus Pocus (Original Mix)","description":"use CHROMA mod for\n - PanicEnvironment environment removal\n - Cool lights\n - to gain superpowers\n\nHappy Halloween!\n\nBPM | 130\nExpert+\nExpert\nHard\nNormal\nEasy\n\npreview: https://www.youtube.com/watch?v=DfzD_Ca4fp4\n\nDM any feedback on Discord\nETAN#8341","uploader":{"id":4235140,"name":"etan","uniqueSet":true,"hash":"5cff0b7798cc5a672c855775","avatar":"https://cdn.beatsaver.com/avatar/136373107559497728.png","type":"DISCORD"},"metadata":{"bpm":130.0,"duration":242,"songName":"Hocus Pocus","songSubName":"(Original Mix)","songAuthorName":"Marnik","levelAuthorName":"ETAN"},"stats":{"plays":0,"downloads":7135,"upvotes":1324,"downvotes":37,"score":0.919},"uploaded":"2020-10-25T22:28:11.819Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"4e37c7070b9049ebbbf11ceab644d4ec4a01ca13","key":"10377","state":"Published","createdAt":"2020-10-25T22:28:11.819Z","sageScore":6,"diffs":[{"njs":9.0,"offset":0.0,"notes":232,"bombs":0,"obstacles":34,"nps":0.99,"length":508.0,"characteristic":"Standard","difficulty":"Easy","events":21660,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":234.462,"paritySummary":{"errors":40,"warns":0,"resets":0}},{"njs":11.0,"offset":1.0,"notes":493,"bombs":0,"obstacles":34,"nps":2.103,"length":508.0,"characteristic":"Standard","difficulty":"Normal","events":21660,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":234.462,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":13.0,"offset":0.5,"notes":693,"bombs":0,"obstacles":34,"nps":2.956,"length":508.0,"characteristic":"Standard","difficulty":"Hard","events":21660,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":234.462,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":16.0,"offset":0.0,"notes":966,"bombs":0,"obstacles":34,"nps":4.12,"length":508.0,"characteristic":"Standard","difficulty":"Expert","events":21660,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":234.462,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":21.0,"offset":0.4,"notes":1172,"bombs":80,"obstacles":34,"nps":4.999,"length":508.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":21661,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":234.462,"paritySummary":{"errors":6,"warns":3,"resets":34}}],"downloadURL":"https://cdn.beatsaver.com/4e37c7070b9049ebbbf11ceab644d4ec4a01ca13.zip","coverURL":"https://cdn.beatsaver.com/4e37c7070b9049ebbbf11ceab644d4ec4a01ca13.jpg","previewURL":"https://cdn.beatsaver.com/4e37c7070b9049ebbbf11ceab644d4ec4a01ca13.mp3"}],"createdAt":"2020-10-25T22:28:11.819Z","updatedAt":"2020-10-25T22:28:11.819Z","lastPublishedAt":"2020-10-25T22:28:11.819Z"},{"id":"8367","name":"Martin Garrix & Dua Lipa - Scared To Be Lonely (Brooks Remix)","description":"Brooks does amazing remixes and this is probably one of my favourite ones\n\nVideo: https://youtu.be/OgmhqC5e9m8\n\nEasy: Notes: 132 NPS: 1.47 NJS: 10\nNormal: Notes: 164 NPS: 1.8 NJS: 12\nHard: Notes: 256 NPS: 2.82 NJS: 14\nExpert: Notes: 351 NPS: 3.86 NJS: 16\nExpert+: Notes: 417 NPS: 4.59 NJS: 18\n\nCheck out my lightshows here: https://www.youtube.com/playlist?list=PLwl6dYq72JOYu1BnKl5WATa4Dh__ZJmuN","uploader":{"id":14808,"name":"halcyon12","uniqueSet":true,"hash":"5cff0b7698cc5a672c8547ad","avatar":"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8547ad?d=retro","type":"SIMPLE"},"metadata":{"bpm":128.0,"duration":104,"songName":"Scared To Be Lonely","songSubName":"Brooks Remix","songAuthorName":"Martin Garrix ft. Dua Lipa","levelAuthorName":"Halcyon12"},"stats":{"plays":0,"downloads":3240,"upvotes":1111,"downvotes":27,"score":0.919},"uploaded":"2020-02-02T01:20:18.328Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"60dac314035b8f9da649286c587aa6377abf1f16","key":"8367","state":"Published","createdAt":"2020-02-02T01:20:18.328Z","sageScore":7,"diffs":[{"njs":10.0,"offset":1.0,"notes":132,"bombs":0,"obstacles":2,"nps":1.467,"length":192.0,"characteristic":"Standard","difficulty":"Easy","events":2499,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":90.0,"paritySummary":{"errors":8,"warns":0,"resets":0}},{"njs":12.0,"offset":0.5,"notes":164,"bombs":0,"obstacles":2,"nps":1.803,"length":194.0,"characteristic":"Standard","difficulty":"Normal","events":2499,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":90.938,"paritySummary":{"errors":10,"warns":2,"resets":0}},{"njs":14.0,"offset":0.0,"notes":256,"bombs":0,"obstacles":8,"nps":2.815,"length":194.0,"characteristic":"Standard","difficulty":"Hard","events":2499,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":90.938,"paritySummary":{"errors":1,"warns":1,"resets":0}},{"njs":16.0,"offset":-0.25,"notes":351,"bombs":0,"obstacles":16,"nps":3.86,"length":194.0,"characteristic":"Standard","difficulty":"Expert","events":2499,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":90.938,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":18.0,"offset":-0.5,"notes":417,"bombs":0,"obstacles":34,"nps":4.586,"length":194.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":2498,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":90.938,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/60dac314035b8f9da649286c587aa6377abf1f16.zip","coverURL":"https://cdn.beatsaver.com/60dac314035b8f9da649286c587aa6377abf1f16.jpg","previewURL":"https://cdn.beatsaver.com/60dac314035b8f9da649286c587aa6377abf1f16.mp3"}],"createdAt":"2020-02-02T01:20:18.328Z","updatedAt":"2020-02-02T01:20:18.328Z","lastPublishedAt":"2020-02-02T01:20:18.328Z"},{"id":"a90b","name":"[TheFatRat Pack] Xenogenesis - TheFatRat","description":"Here it is! The unofficial \"TheFatRat\" Music Pack in Beat Saber - with all beatmaps being singlehandedly made by me!\n\nAll songs included in TheFatRat Music Pack:\nMonody (ft. Laura Brehm) \nUnity \nWindfall \nXenogenesis \nTime Lapse \n\nGet the full song pack here: https://bsaber.com/thefatrat-music-pack/\n(Or you should just be able to find all the other ones on my beatsaver profile as well. Heres a link to my profile: https://beatsaver.com/uploader/5d47d586c5301900060b2f6c)\n\nSongcore mod is recommended (for custom colours)\nPlays best on Origins Environment\n\nXenogenesis Stats:\nExpert+ - 955 Notes | 4.17 NPS\nExpert - 863 Notes | 3.77 NPS\nHard - 649 Notes | 2.84 NPS\nNormal - 439 Notes | 1.92 NPS\nEasy - 347 Notes | 1.52 NPS\n\nRoughly 7-8 Hours of work\nGameplay: https://youtu.be/YA0zBFQcLnc\n\nObviously - A huge thanks to TheFatRat himself, for not only producing the songs in the first place (and allowing free access to use them for big and small content creators), but also being a huge inspiration to lots of artists out there and for making music that everyone can jam out to! We love you, TheFatRat!","uploader":{"id":4284197,"name":"timeweaver","uniqueSet":true,"hash":"5d47d586c5301900060b2f6c","avatar":"https://cdn.beatsaver.com/avatar/607399708121366529.png","type":"DISCORD"},"metadata":{"bpm":145.0,"duration":228,"songName":"Xenogenesis","songSubName":"","songAuthorName":"TheFatRat","levelAuthorName":"Timeweaver"},"stats":{"plays":0,"downloads":4735,"upvotes":1216,"downvotes":32,"score":0.9189},"uploaded":"2020-05-22T13:28:50.525Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"15ab8f50a6b1a7ff95955ba236426ab4edf9cb15","key":"a90b","state":"Published","createdAt":"2020-05-22T13:28:50.525Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":347,"bombs":0,"obstacles":53,"nps":1.55,"length":541.0,"characteristic":"Standard","difficulty":"Easy","events":5971,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":223.862,"paritySummary":{"errors":54,"warns":35,"resets":0}},{"njs":10.0,"offset":0.0,"notes":439,"bombs":0,"obstacles":97,"nps":1.961,"length":541.0,"characteristic":"Standard","difficulty":"Normal","events":5971,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":223.862,"paritySummary":{"errors":30,"warns":12,"resets":0}},{"njs":12.5,"offset":1.0,"notes":649,"bombs":0,"obstacles":121,"nps":2.899,"length":541.0,"characteristic":"Standard","difficulty":"Hard","events":5971,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":223.862,"paritySummary":{"errors":6,"warns":4,"resets":0}},{"njs":15.0,"offset":0.5,"notes":863,"bombs":0,"obstacles":137,"nps":3.855,"length":541.0,"characteristic":"Standard","difficulty":"Expert","events":6162,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":223.862,"paritySummary":{"errors":2,"warns":1,"resets":0}},{"njs":17.0,"offset":0.0,"notes":955,"bombs":0,"obstacles":169,"nps":4.266,"length":541.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":6160,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":223.862,"paritySummary":{"errors":4,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/15ab8f50a6b1a7ff95955ba236426ab4edf9cb15.zip","coverURL":"https://cdn.beatsaver.com/15ab8f50a6b1a7ff95955ba236426ab4edf9cb15.jpg","previewURL":"https://cdn.beatsaver.com/15ab8f50a6b1a7ff95955ba236426ab4edf9cb15.mp3"}],"createdAt":"2020-05-22T13:28:50.525Z","updatedAt":"2020-05-22T13:28:50.525Z","lastPublishedAt":"2020-05-22T13:28:50.525Z"},{"id":"9b41","name":"Diving In Too Deep - NerdOut","description":"Diving In Too Deep, a Subnautica song created by NerdOut! All I can say is expect W A L L S ! ! !\n(Mapping Extensions required)","uploader":{"id":23150,"name":"kuritsadbs","uniqueSet":true,"hash":"5cff0b7698cc5a672c8537ef","avatar":"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8537ef?d=retro","type":"SIMPLE"},"metadata":{"bpm":135.0,"duration":195,"songName":"Diving In Too Deep","songSubName":"","songAuthorName":"NerdOut","levelAuthorName":"KuritsaDBS"},"stats":{"plays":0,"downloads":779,"upvotes":512,"downvotes":3,"score":0.9188},"uploaded":"2020-04-15T11:53:14.568Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"fe10d96acbb9a6416e1e7710270e12032b642288","key":"9b41","state":"Published","createdAt":"2020-04-15T11:53:14.568Z","sageScore":4,"diffs":[{"njs":16.0,"offset":0.0,"notes":481,"bombs":0,"obstacles":1919,"nps":2.736,"length":395.5,"characteristic":"Standard","difficulty":"Expert","events":7541,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":175.778,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/fe10d96acbb9a6416e1e7710270e12032b642288.zip","coverURL":"https://cdn.beatsaver.com/fe10d96acbb9a6416e1e7710270e12032b642288.jpg","previewURL":"https://cdn.beatsaver.com/fe10d96acbb9a6416e1e7710270e12032b642288.mp3"}],"createdAt":"2020-04-15T11:53:14.568Z","updatedAt":"2020-04-15T11:53:14.568Z","lastPublishedAt":"2020-04-15T11:53:14.568Z"},{"id":"7ba4","name":"Say So - Doja Cat","description":"Based on the Tik Tok dance meme song, Say So by Doja Cat.","uploader":{"id":34446,"name":"cartwheels","uniqueSet":true,"hash":"5e0cf5fbbe3a060006a86875","avatar":"https://www.gravatar.com/avatar/5e0cf5fbbe3a060006a86875?d=retro","type":"SIMPLE"},"metadata":{"bpm":111.0,"duration":238,"songName":"Say So","songSubName":"","songAuthorName":"Doja Cat","levelAuthorName":"mikey f"},"stats":{"plays":0,"downloads":5177,"upvotes":1523,"downvotes":47,"score":0.9188},"uploaded":"2020-01-02T00:07:45.673Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"e931eac117453cea276351917c1af2b5f0a1c7df","key":"7ba4","state":"Published","createdAt":"2020-01-02T00:07:45.673Z","sageScore":5,"diffs":[{"njs":12.0,"offset":0.0,"notes":464,"bombs":54,"obstacles":11,"nps":2.07,"length":414.75,"characteristic":"Standard","difficulty":"Normal","events":1366,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":224.189,"paritySummary":{"errors":49,"warns":69,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/e931eac117453cea276351917c1af2b5f0a1c7df.zip","coverURL":"https://cdn.beatsaver.com/e931eac117453cea276351917c1af2b5f0a1c7df.jpg","previewURL":"https://cdn.beatsaver.com/e931eac117453cea276351917c1af2b5f0a1c7df.mp3"}],"createdAt":"2020-01-02T00:07:45.673Z","updatedAt":"2020-01-02T00:07:45.673Z","lastPublishedAt":"2020-01-02T00:07:45.673Z"},{"id":"500d","name":"Thunder - Imagine Dragons","description":"168 BPM / 3:00 Runtime\r\nEasy / 202 Notes\r\nNormal / 270 Notes\r\nHard / 400 Notes\r\nExpert / 505 Notes\r\nExpert+ / 660 Notes\r\n\r\nGameplay: Coming Soon","uploader":{"id":4284981,"name":"skylerwallace","uniqueSet":true,"hash":"5cff0b7298cc5a672c84ea67","avatar":"https://cdn.beatsaver.com/avatar/398344856868487168.png","type":"DISCORD"},"metadata":{"bpm":168.0,"duration":180,"songName":"Thunder","songSubName":"Imagine Dragons","songAuthorName":"Skyler Wallace","levelAuthorName":"skylerwallace"},"stats":{"plays":0,"downloads":8953,"upvotes":3133,"downvotes":134,"score":0.9188},"uploaded":"2019-05-31T04:43:45Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"1374613734d2d110f06783c7b7c32579e7a2808f","key":"500d","state":"Published","createdAt":"2019-05-31T04:43:45Z","sageScore":8,"diffs":[{"njs":10.0,"offset":0.0,"notes":202,"bombs":0,"obstacles":5,"nps":1.178,"length":480.0,"characteristic":"Standard","difficulty":"Easy","events":4955,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":171.429,"paritySummary":{"errors":38,"warns":28,"resets":0}},{"njs":10.0,"offset":0.0,"notes":270,"bombs":0,"obstacles":7,"nps":1.575,"length":480.0,"characteristic":"Standard","difficulty":"Normal","events":4955,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":171.429,"paritySummary":{"errors":33,"warns":31,"resets":0}},{"njs":10.0,"offset":0.0,"notes":400,"bombs":0,"obstacles":10,"nps":2.333,"length":480.0,"characteristic":"Standard","difficulty":"Hard","events":4955,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":171.429,"paritySummary":{"errors":55,"warns":81,"resets":0}},{"njs":12.0,"offset":0.0,"notes":505,"bombs":0,"obstacles":13,"nps":2.946,"length":480.0,"characteristic":"Standard","difficulty":"Expert","events":4955,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":171.429,"paritySummary":{"errors":47,"warns":64,"resets":0}},{"njs":14.0,"offset":1.0,"notes":660,"bombs":4,"obstacles":14,"nps":3.85,"length":480.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":4955,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":171.429,"paritySummary":{"errors":39,"warns":64,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/1374613734d2d110f06783c7b7c32579e7a2808f.zip","coverURL":"https://cdn.beatsaver.com/1374613734d2d110f06783c7b7c32579e7a2808f.jpg","previewURL":"https://cdn.beatsaver.com/1374613734d2d110f06783c7b7c32579e7a2808f.mp3"}],"createdAt":"2019-05-31T04:43:45Z","updatedAt":"2019-05-31T04:43:45Z","lastPublishedAt":"2019-05-31T04:43:45Z"},{"id":"4211","name":"Overkill - RIOT","description":"Thank you Everyone for the massive amount of support on this map. I'm very happy to release this as a V2 and hopefully you can all get some enjoyment like the first one did but with some very large QOL updates to the map as well that'll make the map in turn play much smoother and a ton of pattern changes that gives the map some more life! :D\r\n\r\nBig Thanks to RedMagi and Saut for modding and playtesting! :D","uploader":{"id":408,"name":"nuketime","uniqueSet":true,"hash":"5cff0b7498cc5a672c8507f7","avatar":"https://cdn.beatsaver.com/avatar/175811186007343104.png","type":"DISCORD"},"metadata":{"bpm":174.0,"duration":308,"songName":"Overkill","songSubName":"RIOT","songAuthorName":"Nuketime","levelAuthorName":"Nuketime"},"stats":{"plays":0,"downloads":1444,"upvotes":1211,"downvotes":32,"score":0.9187},"uploaded":"2019-03-30T19:12:13Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"aa94aeef877eecea90e4cf3795a84799056042e3","key":"4211","state":"Published","createdAt":"2019-03-30T19:12:13Z","sageScore":5,"diffs":[{"njs":19.0,"offset":0.0,"notes":1914,"bombs":108,"obstacles":368,"nps":6.465,"length":858.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":3602,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":296.035,"paritySummary":{"errors":56,"warns":53,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/aa94aeef877eecea90e4cf3795a84799056042e3.zip","coverURL":"https://cdn.beatsaver.com/aa94aeef877eecea90e4cf3795a84799056042e3.jpg","previewURL":"https://cdn.beatsaver.com/aa94aeef877eecea90e4cf3795a84799056042e3.mp3"}],"createdAt":"2019-03-30T19:12:13Z","updatedAt":"2019-03-30T19:12:13Z","lastPublishedAt":"2019-03-30T19:12:13Z"},{"id":"827d","name":"Robin Hustin x TobiMorrow - Light It Up (feat. Jex)","description":"Brings me back to when I made lights for this a long time ago. \n\nVideo: https://youtu.be/ttzkzmB39Bs\n\nEasy: Notes: 117 NPS: 1.31 NJS: 10\nNormal: Notes: 169 NPS: 1.9 NJS: 12\nHard: Notes: 237 NPS: 2.66 NJS: 14\nExpert: Notes: 325 NPS: 3.61 NJS: 16\nExpert+: Notes: 452 NPS: 5.02 NJS: 18\n\nCheck out my lightshows here: https://www.youtube.com/playlist?list=PLwl6dYq72JOYu1BnKl5WATa4Dh__ZJmuN","uploader":{"id":14808,"name":"halcyon12","uniqueSet":true,"hash":"5cff0b7698cc5a672c8547ad","avatar":"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8547ad?d=retro","type":"SIMPLE"},"metadata":{"bpm":128.0,"duration":102,"songName":"Light It Up","songSubName":"ft. Jex","songAuthorName":"Robin Hustin, TobiMorrow","levelAuthorName":"Halcyon12"},"stats":{"plays":0,"downloads":5922,"upvotes":1375,"downvotes":40,"score":0.9186},"uploaded":"2020-01-29T22:25:19.574Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"22da796f08f777c437d4996d52ea1778e8e762ae","key":"827d","state":"Published","createdAt":"2020-01-29T22:25:19.574Z","sageScore":7,"diffs":[{"njs":10.0,"offset":1.0,"notes":117,"bombs":0,"obstacles":9,"nps":1.312,"length":190.25,"characteristic":"Standard","difficulty":"Easy","events":3837,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":89.18,"paritySummary":{"errors":2,"warns":2,"resets":0}},{"njs":12.0,"offset":0.5,"notes":169,"bombs":0,"obstacles":8,"nps":1.895,"length":190.25,"characteristic":"Standard","difficulty":"Normal","events":3837,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":89.18,"paritySummary":{"errors":4,"warns":1,"resets":0}},{"njs":14.0,"offset":0.0,"notes":237,"bombs":0,"obstacles":17,"nps":2.658,"length":190.25,"characteristic":"Standard","difficulty":"Hard","events":3837,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":89.18,"paritySummary":{"errors":1,"warns":0,"resets":0}},{"njs":16.0,"offset":-0.25,"notes":325,"bombs":0,"obstacles":6,"nps":3.611,"length":192.0,"characteristic":"Standard","difficulty":"Expert","events":3837,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":90.0,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":18.0,"offset":-0.5,"notes":452,"bombs":0,"obstacles":16,"nps":5.022,"length":192.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":3837,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":90.0,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":12.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"Lightshow","difficulty":"ExpertPlus","events":3837,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/22da796f08f777c437d4996d52ea1778e8e762ae.zip","coverURL":"https://cdn.beatsaver.com/22da796f08f777c437d4996d52ea1778e8e762ae.jpg","previewURL":"https://cdn.beatsaver.com/22da796f08f777c437d4996d52ea1778e8e762ae.mp3"}],"createdAt":"2020-01-29T22:25:19.574Z","updatedAt":"2020-01-29T22:25:19.574Z","lastPublishedAt":"2020-01-29T22:25:19.574Z"},{"id":"105f5","name":"Porter Robinson & Madeon - Shelter","description":"A map that doesnt mess with chroma, but with boost lights\n\nBPM 100\nWonder (Expert)\n\nThis map was a special request from Lukken\n\npreview: https://www.youtube.com/watch?v=T1NscB2M4zI\n\nPlease enjoy\n\nDM any feedback on Discord\nETAN#8341","uploader":{"id":4235140,"name":"etan","uniqueSet":true,"hash":"5cff0b7798cc5a672c855775","avatar":"https://cdn.beatsaver.com/avatar/136373107559497728.png","type":"DISCORD"},"metadata":{"bpm":100.0,"duration":221,"songName":"Shelter","songSubName":"","songAuthorName":"Porter Robinson & Madeon","levelAuthorName":"ETAN"},"stats":{"plays":0,"downloads":6551,"upvotes":893,"downvotes":18,"score":0.9185},"uploaded":"2020-10-29T23:59:50.753Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"1b3a2fa722e093cae37b52ba5d412496b3a20b82","key":"105f5","state":"Published","createdAt":"2020-10-29T23:59:50.753Z","sageScore":5,"diffs":[{"njs":16.0,"offset":0.4,"notes":707,"bombs":46,"obstacles":13,"nps":3.272,"length":360.078,"characteristic":"Standard","difficulty":"Expert","events":6858,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":216.047,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/1b3a2fa722e093cae37b52ba5d412496b3a20b82.zip","coverURL":"https://cdn.beatsaver.com/1b3a2fa722e093cae37b52ba5d412496b3a20b82.jpg","previewURL":"https://cdn.beatsaver.com/1b3a2fa722e093cae37b52ba5d412496b3a20b82.mp3"}],"createdAt":"2020-10-29T23:59:50.753Z","updatedAt":"2020-10-29T23:59:50.753Z","lastPublishedAt":"2020-10-29T23:59:50.753Z"},{"id":"8b48","name":"Doja Cat - Boss Bitch","description":"This is my first Beat Saber map. Thank you to CheckThePan, PlusOneRabbit, CyanSnow, Aeroluna and everyone in Noodle for helping me get started. You are all great wonderful people I am honored to call friends. <3\nDuration: 2:14\nBPM: 126\nMapped NPS: 2.96\nNotes: 371","uploader":{"id":4543,"name":"dat360noscope","uniqueSet":true,"hash":"5e58387f521acf00068f9ad4","avatar":"https://www.gravatar.com/avatar/5e58387f521acf00068f9ad4?d=retro","type":"SIMPLE"},"metadata":{"bpm":126.0,"duration":134,"songName":"Boss Bitch","songSubName":"","songAuthorName":"Doja Cat","levelAuthorName":"Dat360NoScope"},"stats":{"plays":0,"downloads":2843,"upvotes":868,"downvotes":17,"score":0.9185},"uploaded":"2020-02-27T21:53:18.919Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"2105facb044e1289ce1b84a9377bdd2a982f73e1","key":"8b48","state":"Published","createdAt":"2020-02-27T21:53:18.919Z","sageScore":4,"diffs":[{"njs":12.0,"offset":0.0,"notes":371,"bombs":0,"obstacles":87,"nps":2.957,"length":263.5,"characteristic":"Standard","difficulty":"Hard","events":901,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":125.476,"paritySummary":{"errors":7,"warns":1,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/2105facb044e1289ce1b84a9377bdd2a982f73e1.zip","coverURL":"https://cdn.beatsaver.com/2105facb044e1289ce1b84a9377bdd2a982f73e1.jpg","previewURL":"https://cdn.beatsaver.com/2105facb044e1289ce1b84a9377bdd2a982f73e1.mp3"}],"createdAt":"2020-02-27T21:53:18.919Z","updatedAt":"2020-02-27T21:53:18.919Z","lastPublishedAt":"2020-02-27T21:53:18.919Z"},{"id":"7067","name":"Sorairo Days (TV Size) [Gurren Lagann Opening] - Shoko Nakagawa","description":"This map was converted from one of my old maps.\n\nFeel free to DM me on discord @Joetastic#2501","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":174.0,"duration":93,"songName":"Sorairo Days (TV Size)","songSubName":"","songAuthorName":"Shoko Nakagawa","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":2600,"upvotes":940,"downvotes":20,"score":0.9185},"uploaded":"2019-11-17T06:13:49.456Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"5a5f6a419abfcc998262b28f1fe4e3baa7d3d1bc","key":"7067","state":"Published","createdAt":"2019-11-17T06:13:49.456Z","sageScore":2,"diffs":[{"njs":10.0,"offset":0.0,"notes":212,"bombs":0,"obstacles":0,"nps":2.726,"length":225.5,"characteristic":"Standard","difficulty":"Normal","events":1518,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":77.759,"paritySummary":{"errors":22,"warns":13,"resets":0}},{"njs":11.0,"offset":0.0,"notes":290,"bombs":0,"obstacles":0,"nps":3.729,"length":225.5,"characteristic":"Standard","difficulty":"Hard","events":1518,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":77.759,"paritySummary":{"errors":16,"warns":7,"resets":0}},{"njs":13.0,"offset":0.0,"notes":332,"bombs":0,"obstacles":0,"nps":4.27,"length":225.5,"characteristic":"Standard","difficulty":"Expert","events":1518,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":77.759,"paritySummary":{"errors":9,"warns":11,"resets":0}},{"njs":15.0,"offset":0.0,"notes":469,"bombs":0,"obstacles":0,"nps":5.978,"length":227.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":1543,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":78.448,"paritySummary":{"errors":22,"warns":33,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/5a5f6a419abfcc998262b28f1fe4e3baa7d3d1bc.zip","coverURL":"https://cdn.beatsaver.com/5a5f6a419abfcc998262b28f1fe4e3baa7d3d1bc.jpg","previewURL":"https://cdn.beatsaver.com/5a5f6a419abfcc998262b28f1fe4e3baa7d3d1bc.mp3"}],"createdAt":"2019-11-17T06:13:49.456Z","updatedAt":"2019-11-17T06:13:49.456Z","lastPublishedAt":"2019-11-17T06:13:49.456Z"},{"id":"19a","name":"NSP - Cool Patrol","description":"Normal, Hard, and Expert difficulties available. Relatively close to vanilla balancing.\r\n\r\nPreview: https://youtu.be/e5W5EhEE0V4\r\n\r\nBPM: 130\r\nNotes: 651 (Expert)\r\nDuration: 3:09","uploader":{"id":45732,"name":"calijor","uniqueSet":false,"hash":"5cff0b7298cc5a672c84ebb1","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ebb1?d=retro","type":"SIMPLE"},"metadata":{"bpm":130.0,"duration":189,"songName":"Cool Patrol","songSubName":"","songAuthorName":"Ninja Sex Party","levelAuthorName":"calijor"},"stats":{"plays":0,"downloads":1119,"upvotes":1325,"downvotes":38,"score":0.9184},"uploaded":"2018-05-22T04:53:18Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"c87de9a5e4e8aa91d57403bde711033770b3c4a8","key":"19a","state":"Published","createdAt":"2018-05-22T04:53:18Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":434,"bombs":0,"obstacles":6,"nps":2.351,"length":399.938,"characteristic":"Standard","difficulty":"Normal","events":1533,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":184.587,"paritySummary":{"errors":79,"warns":32,"resets":0}},{"njs":10.0,"offset":0.0,"notes":560,"bombs":0,"obstacles":6,"nps":3.034,"length":399.938,"characteristic":"Standard","difficulty":"Hard","events":1533,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":184.587,"paritySummary":{"errors":145,"warns":31,"resets":0}},{"njs":10.0,"offset":0.0,"notes":651,"bombs":0,"obstacles":8,"nps":3.527,"length":399.938,"characteristic":"Standard","difficulty":"Expert","events":1533,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":184.587,"paritySummary":{"errors":136,"warns":48,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/c87de9a5e4e8aa91d57403bde711033770b3c4a8.zip","coverURL":"https://cdn.beatsaver.com/c87de9a5e4e8aa91d57403bde711033770b3c4a8.jpg","previewURL":"https://cdn.beatsaver.com/c87de9a5e4e8aa91d57403bde711033770b3c4a8.mp3"}],"createdAt":"2018-05-22T04:53:18Z","updatedAt":"2018-05-22T04:53:18Z","lastPublishedAt":"2018-05-22T04:53:18Z"},{"id":"3c89","name":"99.9 // Mob Choir feat. Sajou no Hana","description":"99.9, the OP Mob Psycho 100 Season 2\r\nBy Mob Choir feat. Sajou no Hana\r\nVideo: https://youtu.be/Qbk-0-p60WY\r\n\r\nShoutout to Testers:\r\nRedMagi\r\nTrolav","uploader":{"id":39365,"name":"todokete","uniqueSet":true,"hash":"5cff0b7398cc5a672c84ee70","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee70?d=retro","type":"SIMPLE"},"metadata":{"bpm":168.0,"duration":98,"songName":"99.9","songSubName":"MOB CHOIR feat. sajou no hana","songAuthorName":"Todokete","levelAuthorName":"todokete"},"stats":{"plays":0,"downloads":3540,"upvotes":1704,"downvotes":57,"score":0.9183},"uploaded":"2019-03-08T16:51:17Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"15ba13d183c824f46d2fc68ff5d6ba52ced1fad5","key":"3c89","state":"Published","createdAt":"2019-03-08T16:51:17Z","sageScore":3,"diffs":[{"njs":10.0,"offset":0.0,"notes":175,"bombs":0,"obstacles":0,"nps":1.976,"length":248.0,"characteristic":"Standard","difficulty":"Normal","events":3251,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":88.571,"paritySummary":{"errors":17,"warns":14,"resets":0},"stars":1.03},{"njs":11.0,"offset":0.0,"notes":274,"bombs":0,"obstacles":0,"nps":3.094,"length":248.0,"characteristic":"Standard","difficulty":"Hard","events":3251,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":88.571,"paritySummary":{"errors":17,"warns":5,"resets":0},"stars":1.73},{"njs":13.0,"offset":0.0,"notes":376,"bombs":0,"obstacles":0,"nps":4.245,"length":248.0,"characteristic":"Standard","difficulty":"Expert","events":3251,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":88.571,"paritySummary":{"errors":22,"warns":35,"resets":0}},{"njs":16.0,"offset":0.0,"notes":482,"bombs":0,"obstacles":0,"nps":5.442,"length":248.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":3251,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":88.571,"paritySummary":{"errors":20,"warns":35,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/15ba13d183c824f46d2fc68ff5d6ba52ced1fad5.zip","coverURL":"https://cdn.beatsaver.com/15ba13d183c824f46d2fc68ff5d6ba52ced1fad5.jpg","previewURL":"https://cdn.beatsaver.com/15ba13d183c824f46d2fc68ff5d6ba52ced1fad5.mp3"}],"createdAt":"2019-03-08T16:51:17Z","updatedAt":"2019-03-08T16:51:17Z","lastPublishedAt":"2019-03-08T16:51:17Z"},{"id":"1a0b7","name":"[Electro Swing Pack] Jamie Berry - Lost In The Rhythm (ft. Octavia Rose)","description":"Nixie Presents: Electro Swing Pack!\n\n10 electro swing songs with expert and expert+ diffs to make your booty swing!\n\nGet The Pack: \nhttps://bsaber.com/electro-swing-pack/\n\nMap Gameplay:\nhttps://youtu.be/4O8l7rq4eHI\n\nComplete Pack Playthrough:\nhttps://youtu.be/yj9rw4MEh7s\n\nHeyya! After looking for some dancey electro swing maps, I noticed that there barely are any!\nSo I took matters into my own hands, learning mapping basically from scratch,\nscrapping my first failed attempts and then finally making a map that was good.\nI found it so fun that I ended up making 9 more maps,\nand fine tuned them with the help of the testplayers in BSMG,\nas well as the lovely curators from the bsaber discord.\n\nHuge thanks in particular to:\nMonstor, Bearly, Noxn, Bullet, Vaser888, Tocxx, Jafdy, Storm Knight and Pixelguy!\n\nIf you want to talk to me, here is my Discord:\nNixie.Korten#6944","uploader":{"id":4286374,"name":"nixiekorten","uniqueSet":true,"hash":"6096752e12772e0006e2f7e6","avatar":"https://cdn.beatsaver.com/avatar/840550221690699776.png","type":"DISCORD"},"metadata":{"bpm":121.0,"duration":186,"songName":"Lost In The Rhythm","songSubName":"(ft. Octavia Rose)","songAuthorName":"Jamie Berry","levelAuthorName":"Nixie.Korten"},"stats":{"plays":0,"downloads":13219,"upvotes":666,"downvotes":9,"score":0.9182},"uploaded":"2021-07-08T15:24:57.679Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"6d006d47880a45a134844f3787f3c184881d4673","key":"1a0b7","state":"Published","createdAt":"2021-07-08T15:24:57.679Z","sageScore":5,"diffs":[{"njs":16.0,"offset":-0.25,"notes":591,"bombs":0,"obstacles":8,"nps":3.274,"length":364.0,"characteristic":"Standard","difficulty":"Expert","events":3271,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":180.496,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":19.0,"offset":0.25,"notes":821,"bombs":0,"obstacles":8,"nps":4.549,"length":364.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":3271,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":180.496,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/6d006d47880a45a134844f3787f3c184881d4673.zip","coverURL":"https://cdn.beatsaver.com/6d006d47880a45a134844f3787f3c184881d4673.jpg","previewURL":"https://cdn.beatsaver.com/6d006d47880a45a134844f3787f3c184881d4673.mp3"}],"createdAt":"2021-07-08T15:24:57.679Z","updatedAt":"2021-07-08T15:24:57.679Z","lastPublishedAt":"2021-07-08T15:24:57.679Z"},{"id":"84d6","name":"drop pop candy - Reol ft. Giga-P (+ Luka & Rin) [Std, 360 & 90]","description":"Another song by the amazing duo Reol and Giga-P, drop pop candy entered Hall of Fame just seven days after release!\n\nExpert+ guest difficulty by AaltopahWi! Everything else (Expert-Easy, 360, 90 and lighting) by me, Kolezan.\n\nThe Vocaloid song version with Megurine Luka and Kagamine Rin is also included!\nTo use this version do a file search in your Beat Saber_data/CustomLevels folder for “Reol_drop_pop_candy.egg”, open the folder which that file resides in, then rename “Reol_drop_pop_candy.egg” to “Reol_drop_pop_candy_Reol_and_Giga.egg”, and then rename “Reol_drop_pop_candy_Luka_and_Rin.egg” to “Reol_drop_pop_candy.egg”. Done!\n\nThanks to Maralade for pushing me to map this song sooner than later!\n\nMap is a tad harder than average, mostly to keep up with all the interesting points in the song. Map also contains custom map colors based on the music video.\n\nNo map video preview.\n\nBPM: 130\nDuration: 3:44\n\n== Standard mode: ==\nEasy:\nNPS 1.36, 306 notes, 50 walls, 0 bombs\n\nNormal:\nNPS 2.10, 470 notes, 16 walls, 0 bombs\n\nHard:\nNPS 2.86, 641 notes, 5 walls, 0 bombs\n\nExpert:\nNPS 3.85, 863 notes, 5 walls, 0 bombs\n\nExpert+ (by AaltopahWi):\nNPS 4.61, 1035 notes, 7 walls, 0 bombs\n\n== 360 degree mode: ==\nExpert:\nNPS 3.89, 873 notes, 39 walls, 0 bombs\n\n== 90 degree mode: ==\nExpert:\nNPS 3.89, 873 notes, 38 walls, 0 bombs\n\nThanks to Sorukun, fruhead, Checkthepan and Helen Carnate for playtesting!\n\nEnjoy!","uploader":{"id":4285318,"name":"kolezan","uniqueSet":true,"hash":"5cff0b7398cc5a672c84fcbb","avatar":"https://cdn.beatsaver.com/avatar/220513618763055106.png","type":"DISCORD"},"metadata":{"bpm":130.0,"duration":224,"songName":"drop pop candy","songSubName":"ft. GigaP","songAuthorName":"Reol","levelAuthorName":"Kolezan (E+ by AaltopahWi)"},"stats":{"plays":0,"downloads":2815,"upvotes":1257,"downvotes":35,"score":0.9182},"uploaded":"2020-02-07T07:19:14.938Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"50e4c2101cc079a98f88e80aa7091e60bb6d1d31","key":"84d6","state":"Published","createdAt":"2020-02-07T07:19:14.938Z","sageScore":6,"diffs":[{"njs":9.0,"offset":0.0,"notes":306,"bombs":0,"obstacles":50,"nps":1.42,"length":467.0,"characteristic":"Standard","difficulty":"Easy","events":2147,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":215.538,"paritySummary":{"errors":80,"warns":21,"resets":0}},{"njs":11.0,"offset":1.0,"notes":470,"bombs":0,"obstacles":16,"nps":2.164,"length":470.5,"characteristic":"Standard","difficulty":"Normal","events":2147,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":217.154,"paritySummary":{"errors":67,"warns":51,"resets":0}},{"njs":14.0,"offset":0.5,"notes":641,"bombs":0,"obstacles":5,"nps":2.927,"length":474.5,"characteristic":"Standard","difficulty":"Hard","events":2147,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":219.0,"paritySummary":{"errors":33,"warns":21,"resets":0}},{"njs":17.0,"offset":0.125,"notes":863,"bombs":0,"obstacles":5,"nps":3.941,"length":474.5,"characteristic":"Standard","difficulty":"Expert","events":2147,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":219.0,"paritySummary":{"errors":21,"warns":36,"resets":0}},{"njs":19.0,"offset":-0.25,"notes":1035,"bombs":0,"obstacles":7,"nps":4.726,"length":474.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":2147,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":219.0,"paritySummary":{"errors":3,"warns":6,"resets":0}},{"njs":15.0,"offset":0.25,"notes":873,"bombs":0,"obstacles":38,"nps":3.986,"length":474.5,"characteristic":"90Degree","difficulty":"Expert","events":2464,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":219.0,"paritySummary":{"errors":26,"warns":37,"resets":0}},{"njs":15.0,"offset":0.25,"notes":873,"bombs":0,"obstacles":39,"nps":3.986,"length":474.5,"characteristic":"360Degree","difficulty":"Expert","events":2467,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":219.0,"paritySummary":{"errors":26,"warns":37,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/50e4c2101cc079a98f88e80aa7091e60bb6d1d31.zip","coverURL":"https://cdn.beatsaver.com/50e4c2101cc079a98f88e80aa7091e60bb6d1d31.jpg","previewURL":"https://cdn.beatsaver.com/50e4c2101cc079a98f88e80aa7091e60bb6d1d31.mp3"}],"createdAt":"2020-02-07T07:19:14.938Z","updatedAt":"2020-02-07T07:19:14.938Z","lastPublishedAt":"2020-02-07T07:19:14.938Z"},{"id":"68bb","name":"FREEDOM DiVE (ZipperKim Remix)","description":"Remixer: https://youtu.be/IQ7KvbSrm7M\n\nPreview: https://youtu.be/L2cs_elU7rE\n\n\nTwitter: https://twitter.com/Dack731","uploader":{"id":4285250,"name":"dack","uniqueSet":true,"hash":"5cff0b7598cc5a672c852c6f","avatar":"https://cdn.beatsaver.com/avatar/297344689798119424.png","type":"DISCORD"},"metadata":{"bpm":140.0,"duration":160,"songName":"FREEDOM DiVE","songSubName":"(ZipperKim Remix)","songAuthorName":"xi","levelAuthorName":"Dack"},"stats":{"plays":0,"downloads":4015,"upvotes":1940,"downvotes":70,"score":0.9181},"uploaded":"2019-10-08T23:40:00.119Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"f1591bf3f2d821a48bb86214c9da47d8cff24046","key":"68bb","state":"Published","createdAt":"2019-10-08T23:40:00.119Z","sageScore":6,"diffs":[{"njs":14.5,"offset":0.0,"notes":529,"bombs":4,"obstacles":2,"nps":3.547,"length":348.0,"characteristic":"Standard","difficulty":"Hard","events":3703,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":149.143,"paritySummary":{"errors":0,"warns":0,"resets":1},"stars":2.14},{"njs":16.0,"offset":0.0,"notes":643,"bombs":4,"obstacles":0,"nps":4.311,"length":348.0,"characteristic":"Standard","difficulty":"Expert","events":3703,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":149.143,"paritySummary":{"errors":7,"warns":4,"resets":1},"stars":2.84},{"njs":18.0,"offset":0.0,"notes":752,"bombs":4,"obstacles":0,"nps":5.042,"length":348.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":3703,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":149.143,"paritySummary":{"errors":9,"warns":11,"resets":1},"stars":4.16}],"downloadURL":"https://cdn.beatsaver.com/f1591bf3f2d821a48bb86214c9da47d8cff24046.zip","coverURL":"https://cdn.beatsaver.com/f1591bf3f2d821a48bb86214c9da47d8cff24046.jpg","previewURL":"https://cdn.beatsaver.com/f1591bf3f2d821a48bb86214c9da47d8cff24046.mp3"}],"createdAt":"2019-10-08T23:40:00.119Z","updatedAt":"2019-10-08T23:40:00.119Z","lastPublishedAt":"2019-10-08T23:40:00.119Z"},{"id":"456d","name":"Wiz Khalifa - Black and Yellow","description":"Yeah, uh huh, you know what it is! It's a new map! Black and Yellow by Wiz Khalifa. The colors? Black and yellow, black and yellow, black and yellow, black and yellow.\r\nI think it's a fun map, so I hope you enjoy as well!\r\n\r\nAs always, you can give me feedback on Beast Saber or in Discord @Maarten#9596.\r\n\r\nPreview video: https://www.youtube.com/watch?v=fla0VfHh3WE","uploader":{"id":57657,"name":"pixelguymm","uniqueSet":true,"hash":"5cff0b7698cc5a672c8541a8","avatar":"https://cdn.beatsaver.com/avatar/434386941547511818.png","type":"DISCORD"},"metadata":{"bpm":164.0,"duration":102,"songName":"Black and Yellow","songSubName":"Wiz Khalifa","songAuthorName":"Pixelguy","levelAuthorName":"pixelguymm"},"stats":{"plays":0,"downloads":2927,"upvotes":1171,"downvotes":31,"score":0.9181},"uploaded":"2019-04-13T08:58:48Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"b03042e8647cca08cdc5b80e23ed569ef3dbc201","key":"456d","state":"Published","createdAt":"2019-04-13T08:58:48Z","sageScore":6,"diffs":[{"njs":12.0,"offset":0.0,"notes":144,"bombs":0,"obstacles":0,"nps":1.55,"length":254.0,"characteristic":"Standard","difficulty":"Easy","events":1062,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":92.927,"paritySummary":{"errors":7,"warns":0,"resets":0}},{"njs":12.0,"offset":0.0,"notes":208,"bombs":0,"obstacles":0,"nps":2.23,"length":255.0,"characteristic":"Standard","difficulty":"Normal","events":1062,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":93.293,"paritySummary":{"errors":8,"warns":8,"resets":0}},{"njs":14.0,"offset":0.0,"notes":293,"bombs":16,"obstacles":0,"nps":3.135,"length":255.5,"characteristic":"Standard","difficulty":"Hard","events":1062,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":93.476,"paritySummary":{"errors":18,"warns":14,"resets":3}},{"njs":16.0,"offset":0.0,"notes":402,"bombs":20,"obstacles":0,"nps":4.301,"length":255.5,"characteristic":"Standard","difficulty":"Expert","events":1062,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":93.476,"paritySummary":{"errors":18,"warns":16,"resets":8}}],"downloadURL":"https://cdn.beatsaver.com/b03042e8647cca08cdc5b80e23ed569ef3dbc201.zip","coverURL":"https://cdn.beatsaver.com/b03042e8647cca08cdc5b80e23ed569ef3dbc201.jpg","previewURL":"https://cdn.beatsaver.com/b03042e8647cca08cdc5b80e23ed569ef3dbc201.mp3"}],"createdAt":"2019-04-13T08:58:48Z","updatedAt":"2019-04-13T08:58:48Z","lastPublishedAt":"2019-04-13T08:58:48Z"},{"id":"6554","name":"Windows Down - Nightcore","description":"Youtube Preview: https://youtu.be/z-Iaze8Ac60","uploader":{"id":23751,"name":"monteblanco","uniqueSet":true,"hash":"5cff0b7798cc5a672c855ef5","avatar":"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855ef5?d=retro","type":"SIMPLE"},"metadata":{"bpm":159.0,"duration":159,"songName":"Windows Down - Nightcore","songSubName":"","songAuthorName":"Nightcore Reality","levelAuthorName":"Monteblanco"},"stats":{"plays":0,"downloads":697,"upvotes":786,"downvotes":14,"score":0.918},"uploaded":"2019-09-23T01:31:55.127Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"4bec5881a2090ab3e655fecdec1eed5324703c94","key":"6554","state":"Published","createdAt":"2019-09-23T01:31:55.127Z","sageScore":4,"diffs":[{"njs":15.0,"offset":0.0,"notes":518,"bombs":20,"obstacles":27,"nps":3.348,"length":410.0,"characteristic":"Standard","difficulty":"Expert","events":646,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":154.717,"paritySummary":{"errors":0,"warns":0,"resets":6}}],"downloadURL":"https://cdn.beatsaver.com/4bec5881a2090ab3e655fecdec1eed5324703c94.zip","coverURL":"https://cdn.beatsaver.com/4bec5881a2090ab3e655fecdec1eed5324703c94.jpg","previewURL":"https://cdn.beatsaver.com/4bec5881a2090ab3e655fecdec1eed5324703c94.mp3"}],"createdAt":"2019-09-23T01:31:55.127Z","updatedAt":"2019-09-23T01:31:55.127Z","lastPublishedAt":"2019-09-23T01:31:55.127Z"},{"id":"2bb7","name":"Join Us for a Bite (FNAF Sister Location) - JT Music feat. Andrea Storm Kaden","description":"BPM: 86 (172 at points)\r\nNotes: Hard - 628 , Expert - 745\r\nWalls: 14\r\n\r\nThanks to Redmagi for playtesting, and AaltopahWi for lighting advice.","uploader":{"id":4285188,"name":"fruhead","uniqueSet":true,"hash":"5cff0b7598cc5a672c852683","avatar":"https://cdn.beatsaver.com/avatar/174000100413145090.png","type":"DISCORD"},"metadata":{"bpm":86.0,"duration":225,"songName":"Join Us for a Bite (FNAF Sister Location)","songSubName":"JT Music feat. Andrea Storm Kaden","songAuthorName":"fruhead","levelAuthorName":"fruhead"},"stats":{"plays":0,"downloads":1667,"upvotes":993,"downvotes":23,"score":0.918},"uploaded":"2019-01-07T06:04:31Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"7974c174533415ccc43dcd75678aedd1aec44f96","key":"2bb7","state":"Published","createdAt":"2019-01-07T06:04:31Z","sageScore":6,"diffs":[{"njs":12.0,"offset":0.0,"notes":628,"bombs":0,"obstacles":14,"nps":2.867,"length":314.0,"characteristic":"Standard","difficulty":"Hard","events":1759,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":219.07,"paritySummary":{"errors":43,"warns":22,"resets":0}},{"njs":13.0,"offset":0.0,"notes":745,"bombs":0,"obstacles":14,"nps":3.401,"length":314.0,"characteristic":"Standard","difficulty":"Expert","events":1760,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":219.07,"paritySummary":{"errors":30,"warns":24,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/7974c174533415ccc43dcd75678aedd1aec44f96.zip","coverURL":"https://cdn.beatsaver.com/7974c174533415ccc43dcd75678aedd1aec44f96.jpg","previewURL":"https://cdn.beatsaver.com/7974c174533415ccc43dcd75678aedd1aec44f96.mp3"}],"createdAt":"2019-01-07T06:04:31Z","updatedAt":"2019-01-07T06:04:31Z","lastPublishedAt":"2019-01-07T06:04:31Z"},{"id":"e4","name":"Every Time We Touch - Cascada","description":"Expert Only\r\nTime - 3:19\r\nBPM - 142\r\nNotes- 564","uploader":{"id":49373,"name":"purphoros","uniqueSet":true,"hash":"5cff0b7298cc5a672c84ea98","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ea98?d=retro","type":"SIMPLE"},"metadata":{"bpm":142.0,"duration":199,"songName":"Every Time We Touch","songSubName":"","songAuthorName":"Cascada","levelAuthorName":"purphoros"},"stats":{"plays":0,"downloads":15282,"upvotes":10721,"downvotes":627,"score":0.918},"uploaded":"2018-05-18T03:51:03Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"bc6c7ef1385db4c11c59736d2b32eacf48c95bd9","key":"e4","state":"Published","createdAt":"2018-05-18T03:51:03Z","sageScore":4,"diffs":[{"njs":10.0,"offset":0.0,"notes":564,"bombs":0,"obstacles":0,"nps":3.178,"length":420.0,"characteristic":"Standard","difficulty":"Expert","events":10,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":177.465,"paritySummary":{"errors":108,"warns":44,"resets":0},"stars":2.13}],"downloadURL":"https://cdn.beatsaver.com/bc6c7ef1385db4c11c59736d2b32eacf48c95bd9.zip","coverURL":"https://cdn.beatsaver.com/bc6c7ef1385db4c11c59736d2b32eacf48c95bd9.jpg","previewURL":"https://cdn.beatsaver.com/bc6c7ef1385db4c11c59736d2b32eacf48c95bd9.mp3"}],"createdAt":"2018-05-18T03:51:03Z","updatedAt":"2018-05-18T03:51:03Z","lastPublishedAt":"2018-05-18T03:51:03Z"},{"id":"3519","name":"Happier Sunflower - Marshmello, Post Malone, Swae Lee, Bastille [Mashup by Dj Pyromania]","description":"Preview:\r\nhttps://www.youtube.com/watch?v=eRwvvhMrkcQ","uploader":{"id":4286278,"name":"ruckus","uniqueSet":true,"hash":"5cff0b7398cc5a672c84f1d8","avatar":"https://cdn.beatsaver.com/avatar/239082462083284992.png","type":"DISCORD"},"metadata":{"bpm":100.0,"duration":205,"songName":"Happier Sunflower","songSubName":"Dj Pyromania, Marshmello, Post Malone, Bastille, Swae Lee","songAuthorName":"Ruckus","levelAuthorName":"ruckus"},"stats":{"plays":0,"downloads":5342,"upvotes":1788,"downvotes":62,"score":0.918},"uploaded":"2019-02-10T18:46:16Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"ec8dc26331e1eff4d4fabeed45b927c49a61f8ca","key":"3519","state":"Published","createdAt":"2019-02-10T18:46:16Z","sageScore":5,"diffs":[{"njs":14.0,"offset":0.0,"notes":348,"bombs":0,"obstacles":24,"nps":1.747,"length":332.0,"characteristic":"Standard","difficulty":"Normal","events":2700,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":199.2,"paritySummary":{"errors":24,"warns":16,"resets":0}},{"njs":14.0,"offset":0.0,"notes":718,"bombs":0,"obstacles":31,"nps":3.604,"length":332.063,"characteristic":"Standard","difficulty":"Expert","events":2700,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":199.238,"paritySummary":{"errors":47,"warns":69,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/ec8dc26331e1eff4d4fabeed45b927c49a61f8ca.zip","coverURL":"https://cdn.beatsaver.com/ec8dc26331e1eff4d4fabeed45b927c49a61f8ca.jpg","previewURL":"https://cdn.beatsaver.com/ec8dc26331e1eff4d4fabeed45b927c49a61f8ca.mp3"}],"createdAt":"2019-02-10T18:46:16Z","updatedAt":"2019-02-10T18:46:16Z","lastPublishedAt":"2019-02-10T18:46:16Z"},{"id":"c767","name":"We'll Meet Again","description":"Decided to wall map this beautiful song, hope you all love it!\n---------------------------------------------\n\nQuestions? Feedback? Map not working? \nmessage me on discord: Reddek#5864","uploader":{"id":4233941,"name":"reddek","uniqueSet":true,"hash":"5dbfb4426dea0b0006bd328d","avatar":"https://cdn.beatsaver.com/avatar/177436487086768129.png","type":"DISCORD"},"metadata":{"bpm":192.0,"duration":196,"songName":"We'll Meet Again","songSubName":"","songAuthorName":"TheFatRat & Laura Brehm","levelAuthorName":"Reddek"},"stats":{"plays":0,"downloads":1398,"upvotes":758,"downvotes":13,"score":0.9179},"uploaded":"2020-07-25T12:21:48.657Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"4e3bc64c9aca00a925848905caccd27b5f390573","key":"c767","state":"Published","createdAt":"2020-07-25T12:21:48.657Z","sageScore":3,"diffs":[{"njs":18.0,"offset":0.0,"notes":721,"bombs":34,"obstacles":17842,"nps":4.006,"length":576.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":2009,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":180.0,"paritySummary":{"errors":0,"warns":0,"resets":2}}],"downloadURL":"https://cdn.beatsaver.com/4e3bc64c9aca00a925848905caccd27b5f390573.zip","coverURL":"https://cdn.beatsaver.com/4e3bc64c9aca00a925848905caccd27b5f390573.jpg","previewURL":"https://cdn.beatsaver.com/4e3bc64c9aca00a925848905caccd27b5f390573.mp3"}],"createdAt":"2020-07-25T12:21:48.657Z","updatedAt":"2020-07-25T12:21:48.657Z","lastPublishedAt":"2020-07-25T12:21:48.657Z"},{"id":"b99e","name":"How You Like That - Blackpink","description":"All difficulties available.\n\nExpert+ preview (pre-release version): https://youtu.be/seIKt_PR7hg\n\nSpecial thanks to lilqbunny for setting up the audio.\n\nFollow me on Twitter u won't: https://twitter.com/aggrogahu\nCatch me live on Twitch: https://www.twitch.tv/aggrogahu\nJoin the KPOP Beat Saber discord: https://discord.gg/c9uHGYP","uploader":{"id":4284613,"name":"aggrogahu","uniqueSet":true,"hash":"5cff0b7398cc5a672c84fdad","avatar":"https://cdn.beatsaver.com/avatar/158363872649150464.png","type":"DISCORD"},"metadata":{"bpm":130.0,"duration":181,"songName":"How You Like That","songSubName":"","songAuthorName":"Blackpink","levelAuthorName":"aggrogahu"},"stats":{"plays":0,"downloads":11418,"upvotes":1451,"downvotes":45,"score":0.9179},"uploaded":"2020-07-05T06:16:58.371Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"54f993f61f0ea48ddbb764f13936cc78799046a5","key":"b99e","state":"Published","createdAt":"2020-07-05T06:16:58.371Z","sageScore":7,"diffs":[{"njs":10.0,"offset":1.0,"notes":216,"bombs":6,"obstacles":16,"nps":1.286,"length":364.0,"characteristic":"Standard","difficulty":"Easy","events":1462,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":168.0,"paritySummary":{"errors":37,"warns":12,"resets":4}},{"njs":10.0,"offset":1.0,"notes":276,"bombs":14,"obstacles":19,"nps":1.643,"length":364.0,"characteristic":"Standard","difficulty":"Normal","events":1462,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":168.0,"paritySummary":{"errors":38,"warns":26,"resets":7}},{"njs":12.0,"offset":1.0,"notes":430,"bombs":32,"obstacles":19,"nps":2.56,"length":364.0,"characteristic":"Standard","difficulty":"Hard","events":1462,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":168.0,"paritySummary":{"errors":34,"warns":46,"resets":9}},{"njs":14.0,"offset":0.7,"notes":631,"bombs":30,"obstacles":21,"nps":3.749,"length":364.667,"characteristic":"Standard","difficulty":"Expert","events":1462,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":168.308,"paritySummary":{"errors":18,"warns":28,"resets":8}},{"njs":19.0,"offset":-0.3,"notes":692,"bombs":30,"obstacles":30,"nps":4.112,"length":364.667,"characteristic":"Standard","difficulty":"ExpertPlus","events":1462,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":168.308,"paritySummary":{"errors":16,"warns":22,"resets":8}}],"downloadURL":"https://cdn.beatsaver.com/54f993f61f0ea48ddbb764f13936cc78799046a5.zip","coverURL":"https://cdn.beatsaver.com/54f993f61f0ea48ddbb764f13936cc78799046a5.jpg","previewURL":"https://cdn.beatsaver.com/54f993f61f0ea48ddbb764f13936cc78799046a5.mp3"}],"createdAt":"2020-07-05T06:16:58.371Z","updatedAt":"2020-07-05T06:16:58.371Z","lastPublishedAt":"2020-07-05T06:16:58.371Z"},{"id":"8647","name":"Pursuing My True Self - Persona 4","description":"80","uploader":{"id":4285521,"name":"ejiejidayo","uniqueSet":true,"hash":"5cff0b7398cc5a672c84fc58","avatar":"https://cdn.beatsaver.com/avatar/224894241279574016.png","type":"DISCORD"},"metadata":{"bpm":119.0,"duration":183,"songName":"Pursuing My True Self","songSubName":"","songAuthorName":"Persona 4","levelAuthorName":"ejiejidayo"},"stats":{"plays":0,"downloads":5195,"upvotes":1185,"downvotes":32,"score":0.9179},"uploaded":"2020-02-12T11:59:55.125Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"990f576d9b1045bc6aa4f7ab7a2231a1bd05e6fe","key":"8647","state":"Published","createdAt":"2020-02-12T11:59:55.125Z","sageScore":4,"diffs":[{"njs":12.0,"offset":0.0,"notes":605,"bombs":0,"obstacles":59,"nps":3.354,"length":357.75,"characteristic":"Standard","difficulty":"Hard","events":1318,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":180.378,"paritySummary":{"errors":11,"warns":12,"resets":0}},{"njs":15.0,"offset":-0.4,"notes":812,"bombs":0,"obstacles":47,"nps":4.499,"length":358.0,"characteristic":"Standard","difficulty":"Expert","events":1318,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":180.504,"paritySummary":{"errors":9,"warns":23,"resets":0}},{"njs":17.0,"offset":-0.6,"notes":921,"bombs":0,"obstacles":81,"nps":5.102,"length":358.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":1318,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":180.504,"paritySummary":{"errors":49,"warns":77,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/990f576d9b1045bc6aa4f7ab7a2231a1bd05e6fe.zip","coverURL":"https://cdn.beatsaver.com/990f576d9b1045bc6aa4f7ab7a2231a1bd05e6fe.jpg","previewURL":"https://cdn.beatsaver.com/990f576d9b1045bc6aa4f7ab7a2231a1bd05e6fe.mp3"}],"createdAt":"2020-02-12T11:59:55.125Z","updatedAt":"2020-02-12T11:59:55.125Z","lastPublishedAt":"2020-02-12T11:59:55.125Z"},{"id":"5911","name":"Stars Tonight - Zeds Dead x DROELOE (collab w/ Rexxz & StyngMe)","description":"155 BPM - 2:47 Runtime\n\nStandard:\nEasy - 245 Notes\nNormal - 369 Notes\nHard - 442 Notes\nExpert - 535 Notes\nExpert+ - 700 Notes\n\nSingle Saber:\nHard - 346 Notes\nExpert - 415 Notes\nExpert+ - 556 Notes\n\nSkyler Wallace: Expert+, Easy - Hard, Single Saber\nStyngMe: Expert+\nRexxz: Lighting","uploader":{"id":4284981,"name":"skylerwallace","uniqueSet":true,"hash":"5cff0b7298cc5a672c84ea67","avatar":"https://cdn.beatsaver.com/avatar/398344856868487168.png","type":"DISCORD"},"metadata":{"bpm":155.0,"duration":167,"songName":"Stars Tonight","songSubName":"","songAuthorName":"Zeds Dead x Droeloe","levelAuthorName":"Skyler, StyngMe, & Rexxz"},"stats":{"plays":0,"downloads":2895,"upvotes":1490,"downvotes":47,"score":0.9179},"uploaded":"2019-07-27T04:11:18.419Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"e9fe30a5d1c3d1f1ed1d1d0af33e83f52a22c2cb","key":"5911","state":"Published","createdAt":"2019-07-27T04:11:18.419Z","sageScore":8,"diffs":[{"njs":10.0,"offset":0.0,"notes":245,"bombs":0,"obstacles":14,"nps":1.582,"length":400.0,"characteristic":"Standard","difficulty":"Easy","events":6285,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":154.839,"paritySummary":{"errors":89,"warns":16,"resets":0}},{"njs":10.0,"offset":0.0,"notes":369,"bombs":0,"obstacles":14,"nps":2.383,"length":400.0,"characteristic":"Standard","difficulty":"Normal","events":6285,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":154.839,"paritySummary":{"errors":97,"warns":22,"resets":0}},{"njs":12.0,"offset":1.0,"notes":442,"bombs":2,"obstacles":16,"nps":2.855,"length":400.0,"characteristic":"Standard","difficulty":"Hard","events":6285,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":154.839,"paritySummary":{"errors":65,"warns":28,"resets":3}},{"njs":14.0,"offset":1.0,"notes":535,"bombs":6,"obstacles":16,"nps":3.455,"length":400.0,"characteristic":"Standard","difficulty":"Expert","events":6285,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":154.839,"paritySummary":{"errors":22,"warns":16,"resets":5}},{"njs":18.0,"offset":0.1,"notes":700,"bombs":6,"obstacles":43,"nps":4.521,"length":400.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":6285,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":154.839,"paritySummary":{"errors":39,"warns":65,"resets":0}},{"njs":12.0,"offset":1.0,"notes":346,"bombs":0,"obstacles":14,"nps":2.235,"length":400.0,"characteristic":"OneSaber","difficulty":"Hard","events":6285,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":154.839,"paritySummary":{"errors":44,"warns":16,"resets":0}},{"njs":14.0,"offset":1.0,"notes":415,"bombs":2,"obstacles":16,"nps":2.68,"length":400.0,"characteristic":"OneSaber","difficulty":"Expert","events":6285,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":154.839,"paritySummary":{"errors":31,"warns":24,"resets":2}},{"njs":16.0,"offset":0.25,"notes":556,"bombs":6,"obstacles":16,"nps":3.591,"length":400.0,"characteristic":"OneSaber","difficulty":"ExpertPlus","events":6285,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":154.839,"paritySummary":{"errors":34,"warns":108,"resets":1}}],"downloadURL":"https://cdn.beatsaver.com/e9fe30a5d1c3d1f1ed1d1d0af33e83f52a22c2cb.zip","coverURL":"https://cdn.beatsaver.com/e9fe30a5d1c3d1f1ed1d1d0af33e83f52a22c2cb.jpg","previewURL":"https://cdn.beatsaver.com/e9fe30a5d1c3d1f1ed1d1d0af33e83f52a22c2cb.mp3"}],"createdAt":"2019-07-27T04:11:18.419Z","updatedAt":"2019-07-27T04:11:18.419Z","lastPublishedAt":"2019-07-27T04:11:18.419Z"},{"id":"5395","name":"Alestorm - Mexico","description":"My first map, this song felt good to map because it's structurally simple and catchy. Beat Saber needs more metal and I want to make more maps so any feedback is appreciated :). \n\nExpert and Hard are mapped to be significantly easier than Expert+, so that more people can enjoy it. Here's a video of Expert+ playthrough: https://youtu.be/Y-0cYyZwxIY","uploader":{"id":1207,"name":"wyxi","uniqueSet":true,"hash":"5d0abf96b8c469000699075f","avatar":"https://www.gravatar.com/avatar/5d0abf96b8c469000699075f?d=retro","type":"SIMPLE"},"metadata":{"bpm":128.0,"duration":192,"songName":"Mexico","songSubName":"","songAuthorName":"Alestorm","levelAuthorName":"Wyxi"},"stats":{"plays":0,"downloads":1445,"upvotes":873,"downvotes":18,"score":0.9177},"uploaded":"2019-06-19T23:52:29.181Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"fb5cda4446fdd4dd02cfb5510d00244842e4c392","key":"5395","state":"Published","createdAt":"2019-06-19T23:52:29.181Z","sageScore":6,"diffs":[{"njs":11.0,"offset":1.0,"notes":435,"bombs":70,"obstacles":23,"nps":2.376,"length":390.5,"characteristic":"Standard","difficulty":"Hard","events":1282,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":183.047,"paritySummary":{"errors":76,"warns":16,"resets":0}},{"njs":13.0,"offset":1.0,"notes":560,"bombs":70,"obstacles":23,"nps":3.059,"length":390.5,"characteristic":"Standard","difficulty":"Expert","events":1282,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":183.047,"paritySummary":{"errors":55,"warns":15,"resets":0}},{"njs":15.0,"offset":0.0,"notes":975,"bombs":76,"obstacles":23,"nps":5.327,"length":390.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":1280,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":183.047,"paritySummary":{"errors":65,"warns":64,"resets":1}}],"downloadURL":"https://cdn.beatsaver.com/fb5cda4446fdd4dd02cfb5510d00244842e4c392.zip","coverURL":"https://cdn.beatsaver.com/fb5cda4446fdd4dd02cfb5510d00244842e4c392.jpg","previewURL":"https://cdn.beatsaver.com/fb5cda4446fdd4dd02cfb5510d00244842e4c392.mp3"}],"createdAt":"2019-06-19T23:52:29.181Z","updatedAt":"2019-06-19T23:52:29.181Z","lastPublishedAt":"2019-06-19T23:52:29.181Z"},{"id":"4e8d","name":"Centipede (Visual Representation) - Knife Party","description":"Make sure you have SFX turned off and NoFail turned on!\r\nThis map is not intended to be passed, just sit back and enjoy the show! :)","uploader":{"id":11127,"name":"nicetomeetyou","uniqueSet":true,"hash":"5cff0b7398cc5a672c84f5d1","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f5d1?d=retro","type":"SIMPLE"},"metadata":{"bpm":280.0,"duration":145,"songName":"Centipede (VISUAL)","songSubName":"Knife Party","songAuthorName":"NiceToMeetYou","levelAuthorName":"nicetomeetyou"},"stats":{"plays":0,"downloads":2652,"upvotes":1363,"downvotes":41,"score":0.9177},"uploaded":"2019-05-22T21:23:54Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"8061055d363292dda7b055eefc1c5dbebb13e616","key":"4e8d","state":"Published","createdAt":"2019-05-22T21:23:54Z","sageScore":5,"diffs":[{"njs":23.0,"offset":0.0,"notes":9189,"bombs":0,"obstacles":0,"nps":95.719,"length":448.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":2178,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":96.0,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/8061055d363292dda7b055eefc1c5dbebb13e616.zip","coverURL":"https://cdn.beatsaver.com/8061055d363292dda7b055eefc1c5dbebb13e616.jpg","previewURL":"https://cdn.beatsaver.com/8061055d363292dda7b055eefc1c5dbebb13e616.mp3"}],"createdAt":"2019-05-22T21:23:54Z","updatedAt":"2019-05-22T21:23:54Z","lastPublishedAt":"2019-05-22T21:23:54Z"},{"id":"4445","name":"Runaway Baby - Bruno Mars (V2)","description":"45\r\nremap https://beatsaver.com/browse/detail/2208-1528","uploader":{"id":4285521,"name":"ejiejidayo","uniqueSet":true,"hash":"5cff0b7398cc5a672c84fc58","avatar":"https://cdn.beatsaver.com/avatar/224894241279574016.png","type":"DISCORD"},"metadata":{"bpm":164.0,"duration":149,"songName":"Runaway Baby V2","songSubName":"Bruno Mars","songAuthorName":"ejiejidayo","levelAuthorName":"ejiejidayo"},"stats":{"plays":0,"downloads":3375,"upvotes":1030,"downvotes":25,"score":0.9177},"uploaded":"2019-04-08T07:32:15Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"6ae2ff433fb5a570eeb0801f30a01b446bde2c15","key":"4445","state":"Published","createdAt":"2019-04-08T07:32:15Z","sageScore":5,"diffs":[{"njs":11.0,"offset":0.0,"notes":614,"bombs":0,"obstacles":50,"nps":4.463,"length":376.0,"characteristic":"Standard","difficulty":"Expert","events":1000,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":137.561,"paritySummary":{"errors":60,"warns":17,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/6ae2ff433fb5a570eeb0801f30a01b446bde2c15.zip","coverURL":"https://cdn.beatsaver.com/6ae2ff433fb5a570eeb0801f30a01b446bde2c15.jpg","previewURL":"https://cdn.beatsaver.com/6ae2ff433fb5a570eeb0801f30a01b446bde2c15.mp3"}],"createdAt":"2019-04-08T07:32:15Z","updatedAt":"2019-04-08T07:32:15Z","lastPublishedAt":"2019-04-08T07:32:15Z"},{"id":"46b1","name":"Bad Guy - Billie Eilish","description":"Lighting done by Rexxz","uploader":{"id":21050,"name":"dgrj4life","uniqueSet":true,"hash":"5cff0b7298cc5a672c84eaa1","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84eaa1?d=retro","type":"SIMPLE"},"metadata":{"bpm":135.0,"duration":194,"songName":"Bad Guy","songSubName":"Billie Eilish","songAuthorName":"DGRJ 4 Life & Rexxz","levelAuthorName":"dgrj4life"},"stats":{"plays":0,"downloads":6662,"upvotes":5055,"downvotes":256,"score":0.9176},"uploaded":"2019-04-17T23:25:17Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"a6a8f5c9146321b609645eefb109197e301bfe71","key":"46b1","state":"Published","createdAt":"2019-04-17T23:25:17Z","sageScore":5,"diffs":[{"njs":14.0,"offset":0.0,"notes":761,"bombs":8,"obstacles":36,"nps":4.003,"length":427.766,"characteristic":"Standard","difficulty":"Expert","events":7645,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":190.118,"paritySummary":{"errors":33,"warns":49,"resets":0}},{"njs":16.0,"offset":0.0,"notes":918,"bombs":8,"obstacles":36,"nps":4.829,"length":427.766,"characteristic":"Standard","difficulty":"ExpertPlus","events":7645,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":190.118,"paritySummary":{"errors":32,"warns":67,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/a6a8f5c9146321b609645eefb109197e301bfe71.zip","coverURL":"https://cdn.beatsaver.com/a6a8f5c9146321b609645eefb109197e301bfe71.jpg","previewURL":"https://cdn.beatsaver.com/a6a8f5c9146321b609645eefb109197e301bfe71.mp3"}],"createdAt":"2019-04-17T23:25:17Z","updatedAt":"2019-04-17T23:25:17Z","lastPublishedAt":"2019-04-17T23:25:17Z"},{"id":"431d","name":"PewDiePie - Congratulations","description":"UPDATED OFFSET PROBLEMS\r\n\r\nIt's time to 'slice' T-Series! Presenting PewDiePie's latest diss track \"Congratulations\" featuring David Paul Brown and Joel Gustaf “Roomie” Berghult. I hope you enjoy!\r\n\r\nPewDiePie's original video: https://www.youtube.com/watch?v=PHgc8Q6qTjc","uploader":{"id":42921,"name":"pianoluigi","uniqueSet":true,"hash":"5cff0b7698cc5a672c854076","avatar":"https://www.gravatar.com/avatar/5cff0b7698cc5a672c854076?d=retro","type":"SIMPLE"},"metadata":{"bpm":136.0,"duration":252,"songName":"Congratulations","songSubName":"PewDiePie","songAuthorName":"PianoLuigi","levelAuthorName":"PianoLuigi"},"stats":{"plays":0,"downloads":1157,"upvotes":937,"downvotes":21,"score":0.9176},"uploaded":"2019-04-03T09:04:34Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"768776b15afc801f67a2244439938740349cbc74","key":"431d","state":"Published","createdAt":"2019-04-03T09:04:34Z","sageScore":5,"diffs":[{"njs":16.0,"offset":0.0,"notes":1099,"bombs":32,"obstacles":64,"nps":4.488,"length":555.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":2728,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":244.853,"paritySummary":{"errors":40,"warns":33,"resets":16}}],"downloadURL":"https://cdn.beatsaver.com/768776b15afc801f67a2244439938740349cbc74.zip","coverURL":"https://cdn.beatsaver.com/768776b15afc801f67a2244439938740349cbc74.jpg","previewURL":"https://cdn.beatsaver.com/768776b15afc801f67a2244439938740349cbc74.mp3"}],"createdAt":"2019-04-03T09:04:34Z","updatedAt":"2019-04-03T09:04:34Z","lastPublishedAt":"2019-04-03T09:04:34Z"},{"id":"b7f8","name":"Sabaton - Swedish Pagans","description":"Nice song by Sabaton. Mapped Expert+, Expert, Hard.\n\nGenre: Power metal\nBPM: 135\nNPS: 4.41 / 3.63 / 2.78\nExpert+ playthrough: https://youtu.be/Yx3WPwvZ8wE\n\nCome root for Sweden in the beat saber world cup! :D\n\nSpecial thanks to SatanClaus for playtesting\n\nFeedback/complaints/anything: Wyxi#5211 on discord.\n\n\n","uploader":{"id":1207,"name":"wyxi","uniqueSet":true,"hash":"5d0abf96b8c469000699075f","avatar":"https://www.gravatar.com/avatar/5d0abf96b8c469000699075f?d=retro","type":"SIMPLE"},"metadata":{"bpm":135.0,"duration":246,"songName":"Swedish Pagans","songSubName":"","songAuthorName":"Sabaton","levelAuthorName":"Wyxi"},"stats":{"plays":0,"downloads":1342,"upvotes":572,"downvotes":6,"score":0.9175},"uploaded":"2020-06-30T14:44:54.069Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"6e0fb56882443e1fc41c79dde364d4456828b328","key":"b7f8","state":"Published","createdAt":"2020-06-30T14:44:54.069Z","sageScore":4,"diffs":[{"njs":13.0,"offset":0.5,"notes":685,"bombs":0,"obstacles":4,"nps":2.97,"length":519.0,"characteristic":"Standard","difficulty":"Hard","events":2174,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":230.667,"paritySummary":{"errors":15,"warns":17,"resets":0}},{"njs":16.0,"offset":0.0,"notes":894,"bombs":0,"obstacles":4,"nps":3.876,"length":519.0,"characteristic":"Standard","difficulty":"Expert","events":2174,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":230.667,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":17.0,"offset":-0.25,"notes":1086,"bombs":0,"obstacles":4,"nps":4.708,"length":519.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":2174,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":230.667,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/6e0fb56882443e1fc41c79dde364d4456828b328.zip","coverURL":"https://cdn.beatsaver.com/6e0fb56882443e1fc41c79dde364d4456828b328.jpg","previewURL":"https://cdn.beatsaver.com/6e0fb56882443e1fc41c79dde364d4456828b328.mp3"}],"createdAt":"2020-06-30T14:44:54.069Z","updatedAt":"2020-06-30T14:44:54.069Z","lastPublishedAt":"2020-06-30T14:44:54.069Z"},{"id":"6713","name":"A Bloody Beginning","description":"Get down with some Castlevania vibes with the first Halloween themed map to be released 1 day before October!\r\n\r\nLots of trial and edits have been done to make this map as perfect as possible for release! So we all hope you enjoy the Walls and the Lighting alongside the notes!\r\n\r\nCredits for such wonderful creations:\r\n\r\nYume - New Wall Mapper that's been sweeping the scene!\r\n\r\nKnowledge - A heavy hitting experienced light mapper\r\n\r\n219278 - Yeah i have no idea why their name is like this but they helped light the map so it doesn't matter!","uploader":{"id":4289111,"name":"blackblazon","uniqueSet":true,"hash":"5cff0b7398cc5a672c84ef34","avatar":"https://cdn.beatsaver.com/avatar/127162370538733568.png","type":"DISCORD"},"metadata":{"bpm":126.0,"duration":215,"songName":"A Bloody Beginning","songSubName":"","songAuthorName":"Nokbient & bLiNd","levelAuthorName":"BlackBlazon"},"stats":{"plays":0,"downloads":1748,"upvotes":1023,"downvotes":25,"score":0.9175},"uploaded":"2019-09-30T23:49:36.638Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"fc182c48abfc4750046eaed4dd6fe57ac8dd99fc","key":"6713","state":"Published","createdAt":"2019-09-30T23:49:36.638Z","sageScore":5,"diffs":[{"njs":18.0,"offset":0.0,"notes":959,"bombs":0,"obstacles":4567,"nps":4.658,"length":432.313,"characteristic":"Standard","difficulty":"ExpertPlus","events":9945,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":205.863,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/fc182c48abfc4750046eaed4dd6fe57ac8dd99fc.zip","coverURL":"https://cdn.beatsaver.com/fc182c48abfc4750046eaed4dd6fe57ac8dd99fc.jpg","previewURL":"https://cdn.beatsaver.com/fc182c48abfc4750046eaed4dd6fe57ac8dd99fc.mp3"}],"createdAt":"2019-09-30T23:49:36.638Z","updatedAt":"2019-09-30T23:49:36.638Z","lastPublishedAt":"2019-09-30T23:49:36.638Z"},{"id":"5223","name":"Gloryhammer - Rise Of The Chaos Wizards","description":"I said it once, I'll say it again: Beat Saber needs more Metal \\m/\r\nTherefore - again with *all* difficulties - I present to you:\r\n\r\nExpertPlus-Playthrough: https://vimeo.com/341011795","uploader":{"id":40721,"name":"dunklerturm","uniqueSet":true,"hash":"5cff0b7398cc5a672c84fd7c","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84fd7c?d=retro","type":"SIMPLE"},"metadata":{"bpm":180.0,"duration":235,"songName":"Rise Of The Chaos Wizards","songSubName":"Gloryhammer","songAuthorName":"DunklerTurm","levelAuthorName":"DunklerTurm"},"stats":{"plays":0,"downloads":1469,"upvotes":844,"downvotes":17,"score":0.9175},"uploaded":"2019-06-07T22:14:16Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"8e46e96da31b6224ae62b6d9eb9434ff93f791da","key":"5223","state":"Published","createdAt":"2019-06-07T22:14:16Z","sageScore":7,"diffs":[{"njs":12.0,"offset":0.0,"notes":211,"bombs":4,"obstacles":152,"nps":0.961,"length":659.0,"characteristic":"Standard","difficulty":"Easy","events":2944,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":219.667,"paritySummary":{"errors":31,"warns":8,"resets":0}},{"njs":12.0,"offset":0.0,"notes":309,"bombs":41,"obstacles":136,"nps":1.373,"length":675.0,"characteristic":"Standard","difficulty":"Normal","events":2944,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":225.0,"paritySummary":{"errors":59,"warns":28,"resets":3}},{"njs":12.0,"offset":0.0,"notes":545,"bombs":32,"obstacles":84,"nps":2.422,"length":675.0,"characteristic":"Standard","difficulty":"Hard","events":2944,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":225.0,"paritySummary":{"errors":56,"warns":71,"resets":0}},{"njs":14.0,"offset":0.0,"notes":782,"bombs":86,"obstacles":84,"nps":3.476,"length":675.0,"characteristic":"Standard","difficulty":"Expert","events":2944,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":225.0,"paritySummary":{"errors":55,"warns":54,"resets":0}},{"njs":18.0,"offset":0.0,"notes":1106,"bombs":95,"obstacles":84,"nps":4.916,"length":675.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":5435,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":225.0,"paritySummary":{"errors":70,"warns":75,"resets":1}}],"downloadURL":"https://cdn.beatsaver.com/8e46e96da31b6224ae62b6d9eb9434ff93f791da.zip","coverURL":"https://cdn.beatsaver.com/8e46e96da31b6224ae62b6d9eb9434ff93f791da.jpg","previewURL":"https://cdn.beatsaver.com/8e46e96da31b6224ae62b6d9eb9434ff93f791da.mp3"}],"createdAt":"2019-06-07T22:14:16Z","updatedAt":"2019-06-07T22:14:16Z","lastPublishedAt":"2019-06-07T22:14:16Z"},{"id":"dc68","name":"Fallguys - Survive the fall","description":"f change BPM","uploader":{"id":4284894,"name":"emir","uniqueSet":true,"hash":"5d3dac6586729100069260cc","avatar":"https://cdn.beatsaver.com/avatar/331480642699395073.png","type":"DISCORD"},"metadata":{"bpm":165.0,"duration":205,"songName":"Fallguys - Survive the fall","songSubName":"","songAuthorName":"Fallguys","levelAuthorName":"Emir"},"stats":{"plays":0,"downloads":1078,"upvotes":889,"downvotes":19,"score":0.9174},"uploaded":"2020-08-23T10:11:49.857Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"0c9598eefeed825dd9a6d9012d842d473ffb9b38","key":"dc68","state":"Published","createdAt":"2020-08-23T10:11:49.857Z","sageScore":6,"diffs":[{"njs":12.0,"offset":0.0,"notes":693,"bombs":0,"obstacles":17,"nps":3.458,"length":551.192,"characteristic":"Standard","difficulty":"Hard","events":1367,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":200.433,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":15.0,"offset":0.0,"notes":884,"bombs":0,"obstacles":374,"nps":4.41,"length":551.192,"characteristic":"Standard","difficulty":"Expert","events":1367,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":200.433,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":18.0,"offset":-0.3,"notes":1175,"bombs":24,"obstacles":10,"nps":5.862,"length":551.192,"characteristic":"Standard","difficulty":"ExpertPlus","events":1367,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":200.433,"paritySummary":{"errors":0,"warns":0,"resets":12}}],"downloadURL":"https://cdn.beatsaver.com/0c9598eefeed825dd9a6d9012d842d473ffb9b38.zip","coverURL":"https://cdn.beatsaver.com/0c9598eefeed825dd9a6d9012d842d473ffb9b38.jpg","previewURL":"https://cdn.beatsaver.com/0c9598eefeed825dd9a6d9012d842d473ffb9b38.mp3"}],"createdAt":"2020-08-23T10:11:49.857Z","updatedAt":"2020-08-23T10:11:49.857Z","lastPublishedAt":"2020-08-23T10:11:49.857Z"},{"id":"b7b1","name":"No Rain - Blind Melon","description":"I still think of this song as recent, even though - wait for it - it's 28 years old this year. It's Blind Melon's 1992 hit, No Rain! I love the jazzy beat and dramatic moments in this song!\n\nNormal, Hard, Expert, ExpertPlus 360 and Expert 90 as well.\n\nBig thanks to my playtesters, MajorPickle, Maybeemae, and Brentastic! Couldn't do it without you guys - well, I could, just not as well!\n\n\nhttps://youtu.be/ZuLsxtvooCM","uploader":{"id":78593,"name":"techbutterfly","uniqueSet":true,"hash":"5cff0b7798cc5a672c8566f7","avatar":"https://cdn.beatsaver.com/avatar/527111497617506304.png","type":"DISCORD"},"metadata":{"bpm":149.0,"duration":216,"songName":"No Rain","songSubName":"","songAuthorName":"Blind Melon","levelAuthorName":"TechButterfly"},"stats":{"plays":0,"downloads":3758,"upvotes":624,"downvotes":8,"score":0.9174},"uploaded":"2020-06-29T19:22:10.964Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"c222e31735f0c61b7781c8f41864b8033e054d40","key":"b7b1","state":"Published","createdAt":"2020-06-29T19:22:10.964Z","sageScore":3,"diffs":[{"njs":10.0,"offset":-0.5,"notes":333,"bombs":0,"obstacles":32,"nps":1.613,"length":511.0,"characteristic":"Standard","difficulty":"Normal","events":529,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":205.772,"paritySummary":{"errors":31,"warns":41,"resets":0}},{"njs":13.0,"offset":0.3,"notes":601,"bombs":0,"obstacles":32,"nps":2.905,"length":512.0,"characteristic":"Standard","difficulty":"Hard","events":529,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":206.175,"paritySummary":{"errors":19,"warns":34,"resets":0}},{"njs":14.0,"offset":0.2,"notes":704,"bombs":0,"obstacles":32,"nps":3.403,"length":512.0,"characteristic":"Standard","difficulty":"Expert","events":529,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":206.175,"paritySummary":{"errors":40,"warns":37,"resets":0}},{"njs":13.0,"offset":0.3,"notes":601,"bombs":0,"obstacles":30,"nps":2.905,"length":512.001,"characteristic":"90Degree","difficulty":"Expert","events":689,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":206.175,"paritySummary":{"errors":19,"warns":34,"resets":0}},{"njs":13.0,"offset":0.3,"notes":704,"bombs":0,"obstacles":32,"nps":3.403,"length":512.001,"characteristic":"360Degree","difficulty":"ExpertPlus","events":708,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":206.175,"paritySummary":{"errors":40,"warns":37,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/c222e31735f0c61b7781c8f41864b8033e054d40.zip","coverURL":"https://cdn.beatsaver.com/c222e31735f0c61b7781c8f41864b8033e054d40.jpg","previewURL":"https://cdn.beatsaver.com/c222e31735f0c61b7781c8f41864b8033e054d40.mp3"}],"createdAt":"2020-06-29T19:22:10.964Z","updatedAt":"2020-06-29T19:22:10.964Z","lastPublishedAt":"2020-06-29T19:22:10.964Z"},{"id":"3c10","name":"Sword Art Online Opening Compilation","description":"So what do you do when you've mapped every single SAO opening? You make a compilation of them of course! I originally wanted to combine the full version of all the songs which would result in a 40+ minute map but since Beat Saver has a size limit I decided to combine the TV edit versions of them instead.\r\n\r\nSongs are ordered in released date:\r\n\r\n1. \"crossing field\" by LiSA\r\n2. \"INNOCENCE\" by Aoi Eir\r\n3. \"IGNITE\" by Eir Aoi\r\n4. \"courage\" by Haruka Tomatsu \r\n5. \"Catch the Moment\" by LiSA\r\n6. \"Thrill, Risk, Heartless\" by LiSA\r\n7. \"Ryuusei\" by Aoi EiR\r\n8. \"ADAMAS\" by LiSA\r\n9. \"RESISTER\" by ASCA\r\n\r\nWhile most of the patterns are recycled from my own maps, I did remap/resync some of the older ones so they are on the same quality as my newer maps.\r\n\r\nMostly expert level but has some streams and technical sections which combined with the song's length I decided to put this as expert plus just to be safe.","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":120.0,"duration":841,"songName":"Sword Art Online Opening Compilation","songSubName":"Various Artists","songAuthorName":"Joetastic","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":4936,"upvotes":1986,"downvotes":74,"score":0.9174},"uploaded":"2019-03-06T11:49:32Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"e7ff277fbad063337af1e18bb273b0eb6fc03557","key":"3c10","state":"Published","createdAt":"2019-03-06T11:49:32Z","sageScore":1,"diffs":[{"njs":15.0,"offset":0.0,"notes":3814,"bombs":44,"obstacles":37,"nps":4.553,"length":1675.338,"characteristic":"Standard","difficulty":"ExpertPlus","events":3960,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":837.669,"paritySummary":{"errors":327,"warns":301,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/e7ff277fbad063337af1e18bb273b0eb6fc03557.zip","coverURL":"https://cdn.beatsaver.com/e7ff277fbad063337af1e18bb273b0eb6fc03557.jpg","previewURL":"https://cdn.beatsaver.com/e7ff277fbad063337af1e18bb273b0eb6fc03557.mp3"}],"createdAt":"2019-03-06T11:49:32Z","updatedAt":"2019-03-06T11:49:32Z","lastPublishedAt":"2019-03-06T11:49:32Z"},{"id":"34a5","name":"Check Yes, Juliet - We The Kings","description":"Run Baby Run! Check Yes, Juliet by We The Kings, song is brought from Itunes so it's the highest quality sound file you can get.","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":167.0,"duration":217,"songName":"Check Yes, Juliet","songSubName":"We The Kings","songAuthorName":"Joetastic","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":1453,"upvotes":597,"downvotes":7,"score":0.9174},"uploaded":"2019-02-09T08:16:38Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"a6fff4353d6c0657fb6a3de381dd48458c563dcf","key":"34a5","state":"Published","createdAt":"2019-02-09T08:16:38Z","sageScore":6,"diffs":[{"njs":15.0,"offset":0.0,"notes":905,"bombs":0,"obstacles":0,"nps":4.443,"length":566.959,"characteristic":"Standard","difficulty":"Expert","events":3427,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":203.698,"paritySummary":{"errors":61,"warns":71,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/a6fff4353d6c0657fb6a3de381dd48458c563dcf.zip","coverURL":"https://cdn.beatsaver.com/a6fff4353d6c0657fb6a3de381dd48458c563dcf.jpg","previewURL":"https://cdn.beatsaver.com/a6fff4353d6c0657fb6a3de381dd48458c563dcf.mp3"}],"createdAt":"2019-02-09T08:16:38Z","updatedAt":"2019-02-09T08:16:38Z","lastPublishedAt":"2019-02-09T08:16:38Z"},{"id":"78e","name":"Numb - Linkin Park","description":"Expert - Hard - Normal Charts\nCustom Lighting\n\nhttps://twitter.com/TheDownyCat\nhttps://www.twitch.tv/downycat\nhttps://streamlabs.com/downycat/tip","uploader":{"id":4285982,"name":"downycat","uniqueSet":true,"hash":"5cff0b7398cc5a672c84ede5","avatar":"https://cdn.beatsaver.com/avatar/173538829888782336.png","type":"DISCORD"},"metadata":{"bpm":110.0,"duration":188,"songName":"Numb","songSubName":"Linkin Park","songAuthorName":"DownyCat","levelAuthorName":"downycat"},"stats":{"plays":0,"downloads":11541,"upvotes":7092,"downvotes":389,"score":0.9174},"uploaded":"2018-07-02T13:44:43Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"2e6f858088c6d67e930e1bb357bd7455101b6626","key":"78e","state":"Published","createdAt":"2018-07-02T13:44:43Z","sageScore":6,"diffs":[{"njs":10.0,"offset":0.0,"notes":367,"bombs":0,"obstacles":39,"nps":2.049,"length":328.5,"characteristic":"Standard","difficulty":"Normal","events":1134,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":179.182,"paritySummary":{"errors":45,"warns":26,"resets":0},"stars":0.93},{"njs":10.0,"offset":0.0,"notes":653,"bombs":0,"obstacles":50,"nps":3.602,"length":332.499,"characteristic":"Standard","difficulty":"Hard","events":1134,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":181.363,"paritySummary":{"errors":57,"warns":43,"resets":0},"stars":1.86},{"njs":10.0,"offset":0.0,"notes":899,"bombs":0,"obstacles":50,"nps":4.958,"length":332.5,"characteristic":"Standard","difficulty":"Expert","events":1134,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":181.364,"paritySummary":{"errors":58,"warns":58,"resets":0},"stars":2.59}],"downloadURL":"https://cdn.beatsaver.com/2e6f858088c6d67e930e1bb357bd7455101b6626.zip","coverURL":"https://cdn.beatsaver.com/2e6f858088c6d67e930e1bb357bd7455101b6626.jpg","previewURL":"https://cdn.beatsaver.com/2e6f858088c6d67e930e1bb357bd7455101b6626.mp3"}],"createdAt":"2018-07-02T13:44:43Z","updatedAt":"2018-07-02T13:44:43Z","lastPublishedAt":"2018-07-02T13:44:43Z"},{"id":"13b20","name":"Pika Girl - S3RL","description":"did a slightly more \"dancey\" style of mapping with this one\n\nMap Preview: https://youtu.be/_lrXOS7a7Cs\n\nDifficulties: \nExpert+(6.53 NPS),\nExpert(4.5 NPS),\nHard(3.7 NPS). \n\nCustom lights, I used lolighter for the chorus, hand lit everything else. \n\nThanks to eZconfirmed and nuggie for playtesting! \n\nAny and all feedback appreciated:\nMeezoNugget#8186\n\nEnjoy! :)\n","uploader":{"id":57121,"name":"meezonugget","uniqueSet":true,"hash":"5e6b793f7abb0000068073d7","avatar":"https://cdn.beatsaver.com/avatar/146287428875976704.png","type":"DISCORD"},"metadata":{"bpm":175.0,"duration":226,"songName":"Pika Girl","songSubName":"","songAuthorName":"S3RL","levelAuthorName":"MeezoNugget"},"stats":{"plays":0,"downloads":3445,"upvotes":1105,"downvotes":29,"score":0.9173},"uploaded":"2021-02-07T00:20:32.184Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"a30818f752cce3c87664570826bbf7b12b848a30","key":"13b20","state":"Published","createdAt":"2021-02-07T00:20:32.184Z","sageScore":4,"diffs":[{"njs":18.0,"offset":0.1,"notes":837,"bombs":0,"obstacles":56,"nps":3.817,"length":639.5,"characteristic":"Standard","difficulty":"Hard","events":5273,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":219.257,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":20.0,"offset":-0.1,"notes":1021,"bombs":0,"obstacles":54,"nps":4.657,"length":639.5,"characteristic":"Standard","difficulty":"Expert","events":5273,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":219.257,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":22.0,"offset":-0.3,"notes":1482,"bombs":7,"obstacles":78,"nps":6.759,"length":639.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":5273,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":219.257,"paritySummary":{"errors":0,"warns":0,"resets":2}}],"downloadURL":"https://cdn.beatsaver.com/a30818f752cce3c87664570826bbf7b12b848a30.zip","coverURL":"https://cdn.beatsaver.com/a30818f752cce3c87664570826bbf7b12b848a30.jpg","previewURL":"https://cdn.beatsaver.com/a30818f752cce3c87664570826bbf7b12b848a30.mp3"}],"createdAt":"2021-02-07T00:20:32.184Z","updatedAt":"2021-02-07T00:20:32.184Z","lastPublishedAt":"2021-02-07T00:20:32.184Z"},{"id":"7288","name":"Megalovania - Camellia Remix (Kole Edit) [One saber]","description":"I don’t know much about Undertale nor Camellia, but when making this shorter edit of Camellia’s remix of Megalovania by Toby Fox I felt like mapping it, and as with any popular song I’m gonna make it in One Saber instead since there can never be enough One Saber. I also asked Skeelie if he wanted to make some fancy lighting, just like he did for Overkill, and he did! So here it is, Megalovania Remix by Camellia, as One Saber!\n\nChromaLite mod recommended for best lighting effects.\n\nNo map preview video. (Yet?)\n\nLighting (by Skeelie) preview:\nhttps://youtu.be/6b88SRuQaSQ\n\nBPM: 259\nDuration: 4:27\nEasy, Normal, Hard, Expert and Expert+ difficulties:\n\nEasy:\nNPS 1.32, 356 notes, 26 walls, 0 bombs\n\nNormal:\nNPS 1.66, 446 notes, 29 walls, 17 bombs\n\nHard:\nNPS 2.12, 568 notes, 30 walls, 53 bombs\n\nExpert:\nNPS 3.34, 895 notes, 25 walls, 51 bombs\n\nExpert+:\nNPS 4.65, 1247 notes, 20 walls, 48 bombs\n\nThanks to Redmagi and Skeelie for playtesting!\n\nEnjoy!","uploader":{"id":4285318,"name":"kolezan","uniqueSet":true,"hash":"5cff0b7398cc5a672c84fcbb","avatar":"https://cdn.beatsaver.com/avatar/220513618763055106.png","type":"DISCORD"},"metadata":{"bpm":242.0,"duration":267,"songName":"Megalovania","songSubName":"Remix (Kole Edit)","songAuthorName":"Camellia","levelAuthorName":"Kolezan (Lighting by Skeelie)"},"stats":{"plays":0,"downloads":6279,"upvotes":1738,"downvotes":61,"score":0.9173},"uploaded":"2019-11-29T07:42:50.058Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"ac6eb8bb6ce09461d164dcfe2ae24606bbdfa967","key":"7288","state":"Published","createdAt":"2019-11-29T07:42:50.058Z","sageScore":6,"diffs":[{"njs":11.0,"offset":1.0,"notes":356,"bombs":0,"obstacles":26,"nps":1.392,"length":1031.5,"characteristic":"OneSaber","difficulty":"Easy","events":34390,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":255.744,"paritySummary":{"errors":37,"warns":45,"resets":0}},{"njs":13.0,"offset":1.0,"notes":446,"bombs":17,"obstacles":29,"nps":1.744,"length":1031.5,"characteristic":"OneSaber","difficulty":"Normal","events":34390,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":255.744,"paritySummary":{"errors":42,"warns":49,"resets":0}},{"njs":15.0,"offset":0.7,"notes":568,"bombs":53,"obstacles":30,"nps":2.221,"length":1031.5,"characteristic":"OneSaber","difficulty":"Hard","events":34390,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":255.744,"paritySummary":{"errors":34,"warns":75,"resets":10}},{"njs":18.0,"offset":0.0,"notes":895,"bombs":51,"obstacles":25,"nps":3.5,"length":1031.5,"characteristic":"OneSaber","difficulty":"Expert","events":34390,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":255.744,"paritySummary":{"errors":28,"warns":84,"resets":3}},{"njs":20.0,"offset":1.2,"notes":1247,"bombs":48,"obstacles":20,"nps":4.857,"length":1035.5,"characteristic":"OneSaber","difficulty":"ExpertPlus","events":34390,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":256.736,"paritySummary":{"errors":27,"warns":61,"resets":5}},{"njs":10.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"Lightshow","difficulty":"Easy","events":34390,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/ac6eb8bb6ce09461d164dcfe2ae24606bbdfa967.zip","coverURL":"https://cdn.beatsaver.com/ac6eb8bb6ce09461d164dcfe2ae24606bbdfa967.jpg","previewURL":"https://cdn.beatsaver.com/ac6eb8bb6ce09461d164dcfe2ae24606bbdfa967.mp3"}],"createdAt":"2019-11-29T07:42:50.058Z","updatedAt":"2019-11-29T07:42:50.058Z","lastPublishedAt":"2019-11-29T07:42:50.058Z"},{"id":"709","name":"Weak - AJR","description":"Expert only but not really that hard. My third beat map.","uploader":{"id":51936,"name":"ryuk845","uniqueSet":false,"hash":"5cff0b7398cc5a672c84f1fe","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f1fe?d=retro","type":"SIMPLE"},"metadata":{"bpm":124.0,"duration":205,"songName":"Weak - AJR","songSubName":"","songAuthorName":"Arcanthia","levelAuthorName":"ryuk845"},"stats":{"plays":0,"downloads":4258,"upvotes":1997,"downvotes":75,"score":0.9173},"uploaded":"2018-06-29T00:27:10Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"e4e6311258b1caae45341d87470d0c0145ce3910","key":"709","state":"Published","createdAt":"2018-06-29T00:27:10Z","sageScore":4,"diffs":[{"njs":10.0,"offset":0.0,"notes":540,"bombs":0,"obstacles":5,"nps":2.742,"length":407.0,"characteristic":"Standard","difficulty":"Expert","events":471,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":196.935,"paritySummary":{"errors":101,"warns":65,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/e4e6311258b1caae45341d87470d0c0145ce3910.zip","coverURL":"https://cdn.beatsaver.com/e4e6311258b1caae45341d87470d0c0145ce3910.jpg","previewURL":"https://cdn.beatsaver.com/e4e6311258b1caae45341d87470d0c0145ce3910.mp3"}],"createdAt":"2018-06-29T00:27:10Z","updatedAt":"2018-06-29T00:27:10Z","lastPublishedAt":"2018-06-29T00:27:10Z"},{"id":"8266","name":"Domino's Pizza Fresh Hack","description":"I dont know why I made this lol\n\nVideo links:\nhttps://www.youtube.com/watch?v=2-ifY2LPX_0&feature=youtu.be\nhttps://twitter.com/Dont_Shoot_MEE/status/1222536916601577472","uploader":{"id":26973,"name":"dontshootme","uniqueSet":true,"hash":"5dc4d17566e48d0006f882fc","avatar":"https://www.gravatar.com/avatar/5dc4d17566e48d0006f882fc?d=retro","type":"SIMPLE"},"metadata":{"bpm":107.0,"duration":112,"songName":"Domino's Pizza Fresh Hack","songSubName":"","songAuthorName":"Danny Fresh","levelAuthorName":"Dont-Shoot-ME"},"stats":{"plays":0,"downloads":815,"upvotes":882,"downvotes":19,"score":0.9172},"uploaded":"2020-01-29T15:07:20.809Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"cb3069aeef3d13478f2ee5321a18e35e673c9691","key":"8266","state":"Published","createdAt":"2020-01-29T15:07:20.809Z","sageScore":1,"diffs":[{"njs":20.0,"offset":0.0,"notes":759,"bombs":72,"obstacles":4,"nps":6.896,"length":196.281,"characteristic":"Standard","difficulty":"ExpertPlus","events":1569,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":110.064,"paritySummary":{"errors":4,"warns":0,"resets":5}}],"downloadURL":"https://cdn.beatsaver.com/cb3069aeef3d13478f2ee5321a18e35e673c9691.zip","coverURL":"https://cdn.beatsaver.com/cb3069aeef3d13478f2ee5321a18e35e673c9691.jpg","previewURL":"https://cdn.beatsaver.com/cb3069aeef3d13478f2ee5321a18e35e673c9691.mp3"}],"createdAt":"2020-01-29T15:07:20.809Z","updatedAt":"2020-01-29T15:07:20.809Z","lastPublishedAt":"2020-01-29T15:07:20.809Z"},{"id":"653f","name":"Wolf In Sheep's Clothing [Nightcore] - Set It Off","description":"I actually like this song better in Nightcore. Plus it's quite a popular nightcore song on youtube with over 16 million views https://www.youtube.com/watch?v=Jvl2e6X6PA4","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":192.059,"duration":163,"songName":"Wolf In Sheep's Clothing (Nightcore)","songSubName":"","songAuthorName":"Set It Off","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":1291,"upvotes":884,"downvotes":19,"score":0.9172},"uploaded":"2019-09-22T18:58:41.682Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"410712794d58df7bc6249fed7fef50cf5e4391d6","key":"653f","state":"Published","createdAt":"2019-09-22T18:58:41.682Z","sageScore":5,"diffs":[{"njs":19.0,"offset":0.0,"notes":710,"bombs":12,"obstacles":2,"nps":4.474,"length":508.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":2207,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":158.701,"paritySummary":{"errors":45,"warns":50,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/410712794d58df7bc6249fed7fef50cf5e4391d6.zip","coverURL":"https://cdn.beatsaver.com/410712794d58df7bc6249fed7fef50cf5e4391d6.jpg","previewURL":"https://cdn.beatsaver.com/410712794d58df7bc6249fed7fef50cf5e4391d6.mp3"}],"createdAt":"2019-09-22T18:58:41.682Z","updatedAt":"2019-09-22T18:58:41.682Z","lastPublishedAt":"2019-09-22T18:58:41.682Z"},{"id":"6078","name":"Youngblood - 5 Seconds of Summer","description":"Just an Expert level.","uploader":{"id":30311,"name":"bennydabeast","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e98d","avatar":"https://cdn.beatsaver.com/avatar/30311.jpg","type":"SIMPLE"},"metadata":{"bpm":120.0,"duration":204,"songName":"Youngblood","songSubName":"","songAuthorName":"5 Seconds of Summer","levelAuthorName":"BennyDabeast"},"stats":{"plays":0,"downloads":2815,"upvotes":991,"downvotes":24,"score":0.9171},"uploaded":"2019-08-31T21:49:30.872Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"182e88e0e80450dd02bdcd6ac4924e3cc00d8673","key":"6078","state":"Published","createdAt":"2019-08-31T21:49:30.872Z","sageScore":4,"diffs":[{"njs":12.0,"offset":1.0,"notes":609,"bombs":8,"obstacles":41,"nps":3.045,"length":400.0,"characteristic":"Standard","difficulty":"Hard","events":726,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":200.0,"paritySummary":{"errors":86,"warns":74,"resets":3}},{"njs":12.0,"offset":0.0,"notes":614,"bombs":8,"obstacles":41,"nps":3.07,"length":400.0,"characteristic":"Standard","difficulty":"Expert","events":726,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":200.0,"paritySummary":{"errors":91,"warns":74,"resets":3}}],"downloadURL":"https://cdn.beatsaver.com/182e88e0e80450dd02bdcd6ac4924e3cc00d8673.zip","coverURL":"https://cdn.beatsaver.com/182e88e0e80450dd02bdcd6ac4924e3cc00d8673.jpg","previewURL":"https://cdn.beatsaver.com/182e88e0e80450dd02bdcd6ac4924e3cc00d8673.mp3"}],"createdAt":"2019-08-31T21:49:30.872Z","updatedAt":"2019-08-31T21:49:30.872Z","lastPublishedAt":"2019-08-31T21:49:30.872Z"},{"id":"318f","name":"Awaken [League of Legends Season 2019 Soundtrack] - Valerie Broussard","description":"Made 4 versions of this map each with a different time signature but I think have I found the one I'm happy with. Awaken featuring Valerie Broussard, the soundtrack for League of Legends' 2019 Season Cinematic. Difficulty is a really easy expert but complex enough to not be put in hard. I brought the song off iTunes so it's the highest quality file you can get ;)","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":160.0,"duration":194,"songName":"Awaken","songSubName":"Valerie Broussard","songAuthorName":"Joetastic","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":1940,"upvotes":1731,"downvotes":61,"score":0.9171},"uploaded":"2019-01-27T08:19:46Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"f2481180576b33bdc23e4f4f1a26eaf4e0e09aec","key":"318f","state":"Published","createdAt":"2019-01-27T08:19:46Z","sageScore":5,"diffs":[{"njs":15.0,"offset":0.0,"notes":519,"bombs":30,"obstacles":2,"nps":2.836,"length":488.09,"characteristic":"Standard","difficulty":"Expert","events":872,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":183.034,"paritySummary":{"errors":40,"warns":38,"resets":2}}],"downloadURL":"https://cdn.beatsaver.com/f2481180576b33bdc23e4f4f1a26eaf4e0e09aec.zip","coverURL":"https://cdn.beatsaver.com/f2481180576b33bdc23e4f4f1a26eaf4e0e09aec.jpg","previewURL":"https://cdn.beatsaver.com/f2481180576b33bdc23e4f4f1a26eaf4e0e09aec.mp3"}],"createdAt":"2019-01-27T08:19:46Z","updatedAt":"2019-01-27T08:19:46Z","lastPublishedAt":"2019-01-27T08:19:46Z"},{"id":"248e","name":"Dance, Dance - Fall Out Boy","description":"114.5 BPM / 3:01 Runtime\r\nEasy / 233 Notes\r\nNormal / 370 Notes\r\nHard / 495 Notes\r\nExpert / 726 Notes\r\n\r\nGameplay:\r\nhttps://youtu.be/fyj_fjaGpd8\r\nSong:\r\nhttps://www.youtube.com/watch?v=C6MOKXm8x50","uploader":{"id":4284981,"name":"skylerwallace","uniqueSet":true,"hash":"5cff0b7298cc5a672c84ea67","avatar":"https://cdn.beatsaver.com/avatar/398344856868487168.png","type":"DISCORD"},"metadata":{"bpm":114.0,"duration":182,"songName":"Dance, Dance","songSubName":"Fall Out Boy","songAuthorName":"Skyler Wallace","levelAuthorName":"skylerwallace"},"stats":{"plays":0,"downloads":5632,"upvotes":2351,"downvotes":95,"score":0.9171},"uploaded":"2018-12-08T06:20:28Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"142d2cc083037d25dce744ef747eb3eb0f30ab72","key":"248e","state":"Published","createdAt":"2018-12-08T06:20:28Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":233,"bombs":2,"obstacles":15,"nps":1.312,"length":339.0,"characteristic":"Standard","difficulty":"Easy","events":0,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":178.421,"paritySummary":{"errors":49,"warns":18,"resets":2}},{"njs":10.0,"offset":0.0,"notes":370,"bombs":8,"obstacles":19,"nps":2.083,"length":339.0,"characteristic":"Standard","difficulty":"Normal","events":3172,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":178.421,"paritySummary":{"errors":58,"warns":16,"resets":0}},{"njs":10.0,"offset":0.0,"notes":495,"bombs":0,"obstacles":8,"nps":2.787,"length":339.0,"characteristic":"Standard","difficulty":"Hard","events":3172,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":178.421,"paritySummary":{"errors":57,"warns":32,"resets":0}},{"njs":12.0,"offset":0.0,"notes":726,"bombs":34,"obstacles":0,"nps":4.087,"length":339.0,"characteristic":"Standard","difficulty":"Expert","events":3180,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":178.421,"paritySummary":{"errors":40,"warns":27,"resets":4}}],"downloadURL":"https://cdn.beatsaver.com/142d2cc083037d25dce744ef747eb3eb0f30ab72.zip","coverURL":"https://cdn.beatsaver.com/142d2cc083037d25dce744ef747eb3eb0f30ab72.jpg","previewURL":"https://cdn.beatsaver.com/142d2cc083037d25dce744ef747eb3eb0f30ab72.mp3"}],"createdAt":"2018-12-08T06:20:28Z","updatedAt":"2018-12-08T06:20:28Z","lastPublishedAt":"2018-12-08T06:20:28Z"},{"id":"177e8","name":"{Modchart} Duumu & Slyleaf - Illuminate","description":"## IMPORTANT: This map will most likely be broken if you just hop into it. Please take the time to configure your game properly if you want to see it how it was intended. I know, it's super annoying, but there's nothing I can do about it. There's no better system. Basically if the intro to the map is white for like more than a second, you see the BTS logo, or if your walls look +'s than it's broken.\n\n!! WARNINGS !!\n- Use the newest versions of Chroma and NE (Available on ModAssistant), they'll allow for you to actually use the new environment enhancements. New NE will also SIGNIFICANTLY increase performance. I have not tested if this is playable on previous versions of NE.\n- Use all effects on lights. Remember this is expert not E+ so you need to adjust the \"Environment Effects\" setting. This map is by no means intense, but no flickering wasn't built for chroma and will break the lighting.\n- Turn off shockwave, as there's a bug where it cuts off distortion effects on walls that are under you\n- Turn on bloom, Beat Saber tries to make baked lighting on walls and they break on Noodle walls. You can ignore this if you have the mod that fixes this, although I don't know how the look will change.\n- Please disable NJSFixer, as this completely breaks the walls :(\n\nI've spent equal, if not, MORE time on this than Homesick. This map utilizes the new Chroma environment enhancements. I really went all out with it. I think this map is really unique and there are few, if not NO other maps so far that offer the experience this map gives right now. \n\nThis song means a lot to me. I've had this song added since summer 2019, it came up in my recommended and I fell in love with it. It's such an incredible vibe and it makes me feel super comfy. Duumu or Slyleaf, if you're reading this, you're incredible. I am yet to find any other song that makes me feel like this. I really hope you enjoy seeing what I imagine when listening to it.\n\nEnjoy.\n\nVideo: https://youtu.be/lFL3Gjy15oc","uploader":{"id":4284246,"name":"swifter1243","uniqueSet":true,"hash":"5dcf3af29eccad0006a0b45f","avatar":"https://cdn.beatsaver.com/avatar/166644275793100801.png","type":"DISCORD"},"metadata":{"bpm":100.0,"duration":240,"songName":"Illuminate","songSubName":"","songAuthorName":"Duumu, Slyleaf","levelAuthorName":"Swifter1243"},"stats":{"plays":0,"downloads":1794,"upvotes":900,"downvotes":20,"score":0.917},"uploaded":"2021-05-03T15:44:55.957Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"f5f56ebdee279caae376daf1a6a703576aa08bcd","key":"177e8","state":"Published","createdAt":"2021-05-03T15:44:55.957Z","sageScore":3,"diffs":[{"njs":18.0,"offset":-0.4,"notes":581,"bombs":8,"obstacles":0,"nps":2.591,"length":373.75,"characteristic":"Standard","difficulty":"Hard","events":1367,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":224.25,"paritySummary":{"errors":0,"warns":0,"resets":3}},{"njs":16.0,"offset":1.0,"notes":581,"bombs":8,"obstacles":8102,"nps":2.591,"length":373.75,"characteristic":"Standard","difficulty":"Expert","events":2183,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":224.25,"paritySummary":{"errors":0,"warns":0,"resets":3}}],"downloadURL":"https://cdn.beatsaver.com/f5f56ebdee279caae376daf1a6a703576aa08bcd.zip","coverURL":"https://cdn.beatsaver.com/f5f56ebdee279caae376daf1a6a703576aa08bcd.jpg","previewURL":"https://cdn.beatsaver.com/f5f56ebdee279caae376daf1a6a703576aa08bcd.mp3"}],"createdAt":"2021-05-03T15:44:55.957Z","updatedAt":"2021-05-03T15:44:55.957Z","lastPublishedAt":"2021-05-03T15:44:55.957Z"},{"id":"907f","name":"Alan Walker - Faded","description":"This will likely be my final map.\n\nThanks to the people who played my maps and thanks to the mapping community for the support.\n\nadieu.","uploader":{"id":31355,"name":"wonderfulsnowball","uniqueSet":true,"hash":"5d5be38aa959f6000650d725","avatar":"https://www.gravatar.com/avatar/5d5be38aa959f6000650d725?d=retro","type":"SIMPLE"},"metadata":{"bpm":90.0,"duration":113,"songName":"Faded","songSubName":"(Short Ver.)","songAuthorName":"Alan Walker","levelAuthorName":"WonderfulSnowball"},"stats":{"plays":0,"downloads":6805,"upvotes":2077,"downvotes":80,"score":0.917},"uploaded":"2020-03-15T23:33:05.468Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"72808dcf1d5e2f3b4d08ba98cec32d39d696ba91","key":"907f","state":"Published","createdAt":"2020-03-15T23:33:05.468Z","sageScore":7,"diffs":[{"njs":12.0,"offset":0.0,"notes":139,"bombs":0,"obstacles":0,"nps":1.313,"length":158.75,"characteristic":"Standard","difficulty":"Easy","events":3151,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":105.833,"paritySummary":{"errors":2,"warns":2,"resets":0}},{"njs":12.0,"offset":-0.25,"notes":212,"bombs":0,"obstacles":0,"nps":2.003,"length":158.75,"characteristic":"Standard","difficulty":"Normal","events":3151,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":105.833,"paritySummary":{"errors":2,"warns":0,"resets":0}},{"njs":13.0,"offset":-0.5,"notes":281,"bombs":0,"obstacles":2,"nps":2.655,"length":158.75,"characteristic":"Standard","difficulty":"Hard","events":3151,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":105.833,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":15.0,"offset":0.25,"notes":347,"bombs":0,"obstacles":2,"nps":3.279,"length":158.75,"characteristic":"Standard","difficulty":"Expert","events":3151,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":105.833,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":18.0,"offset":0.25,"notes":367,"bombs":0,"obstacles":3,"nps":3.468,"length":158.75,"characteristic":"Standard","difficulty":"ExpertPlus","events":3151,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":105.833,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/72808dcf1d5e2f3b4d08ba98cec32d39d696ba91.zip","coverURL":"https://cdn.beatsaver.com/72808dcf1d5e2f3b4d08ba98cec32d39d696ba91.jpg","previewURL":"https://cdn.beatsaver.com/72808dcf1d5e2f3b4d08ba98cec32d39d696ba91.mp3"}],"createdAt":"2020-03-15T23:33:05.468Z","updatedAt":"2020-03-15T23:33:05.468Z","lastPublishedAt":"2020-03-15T23:33:05.468Z"},{"id":"6666","name":"Mick Gordon - Cyberdemon","description":"Rip and tear\r\n\r\nVideo: https://www.youtube.com/watch?v=pcqmDzUobEc","uploader":{"id":4235138,"name":"CyanSnow","uniqueSet":true,"hash":"5cff0b7698cc5a672c8543ac","avatar":"https://cdn.beatsaver.com/avatar/154341137694326784.png","type":"DISCORD"},"metadata":{"bpm":179.921,"duration":224,"songName":"Cyberdemon","songSubName":"","songAuthorName":"Mick Gordon","levelAuthorName":"CyanSnow"},"stats":{"plays":0,"downloads":5676,"upvotes":3668,"downvotes":173,"score":0.917},"uploaded":"2019-09-28T15:49:27.681Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"aaaa68fdb4e7ddb5634ee3afd80cb0b5dda2260c","key":"6666","state":"Published","createdAt":"2019-09-28T15:49:27.681Z","sageScore":6,"diffs":[{"njs":19.0,"offset":0.5,"notes":1494,"bombs":666,"obstacles":3666,"nps":6.829,"length":656.0,"characteristic":"Lawless","difficulty":"ExpertPlus","events":33666,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":218.763,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/aaaa68fdb4e7ddb5634ee3afd80cb0b5dda2260c.zip","coverURL":"https://cdn.beatsaver.com/aaaa68fdb4e7ddb5634ee3afd80cb0b5dda2260c.jpg","previewURL":"https://cdn.beatsaver.com/aaaa68fdb4e7ddb5634ee3afd80cb0b5dda2260c.mp3"}],"createdAt":"2019-09-28T15:49:27.681Z","updatedAt":"2019-09-28T15:49:27.681Z","lastPublishedAt":"2019-09-28T15:49:27.681Z"},{"id":"fb0f","name":"Michael Jackson - Thriller (James Egbert Dubstep Remix)","description":"Yet another great and dancy Dubstep mix of an MJ song.\nYou can follow me on twitch for more awesomeness at https://www.twitch.tv/pkdan\nVideo preview of the map: https://www.youtube.com/watch?v=ZuHcfSSPtig\n\nLength: 3:15\nNotes: 668 (Expert) / 991 (Expert+)\nNJS: 16 (Expert) / 20 (Expert+)\nBPM: 128","uploader":{"id":4284639,"name":"pkdan","uniqueSet":true,"hash":"5e6d07927abb00000681e8ee","avatar":"https://cdn.beatsaver.com/avatar/315553265091739650.png","type":"DISCORD"},"metadata":{"bpm":128.0,"duration":195,"songName":"Thriller (James Egbert Dubstep Remix)","songSubName":"","songAuthorName":"Michael Jackson","levelAuthorName":"pkdan"},"stats":{"plays":0,"downloads":6967,"upvotes":850,"downvotes":18,"score":0.9168},"uploaded":"2020-10-07T15:04:12.225Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"5d5df852651bb568012635ff3a356efdd9372b80","key":"fb0f","state":"Published","createdAt":"2020-10-07T15:04:12.225Z","sageScore":4,"diffs":[{"njs":16.0,"offset":-0.2,"notes":668,"bombs":33,"obstacles":8,"nps":3.591,"length":396.875,"characteristic":"Standard","difficulty":"Expert","events":2296,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":186.035,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":20.0,"offset":0.3,"notes":991,"bombs":33,"obstacles":8,"nps":5.327,"length":396.875,"characteristic":"Standard","difficulty":"ExpertPlus","events":2296,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":186.035,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/5d5df852651bb568012635ff3a356efdd9372b80.zip","coverURL":"https://cdn.beatsaver.com/5d5df852651bb568012635ff3a356efdd9372b80.jpg","previewURL":"https://cdn.beatsaver.com/5d5df852651bb568012635ff3a356efdd9372b80.mp3"}],"createdAt":"2020-10-07T15:04:12.225Z","updatedAt":"2020-10-07T15:04:12.225Z","lastPublishedAt":"2020-10-07T15:04:12.225Z"},{"id":"ed2a","name":"NULCTRL (Meiso FLIP)","description":"POTENTIAL SEIZURE WARNING\n\nANTI-QUEST REUPLOAD\n\nIT IS HIGHLY RECCOMENDED TO PLAY WITH THE FOLLOWING ADVANCED GRAPHICS SETTINGS SET AS SUCH\n-BLOOM ON\n-DISTORTION ON\n-0 MAX SHOCKWAVE PARTICLES\n\nVideo: https://youtu.be/xGICwOKNa9Y\n\nSpecial thanks to https://i.imgur.com/VbKV9AX.jpg for feedback to make sure things weɹe actually good.\n\n","uploader":{"id":4235136,"name":"reaxt","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e8ab","avatar":"https://cdn.beatsaver.com/avatar/163052863038291970.png","type":"DISCORD"},"metadata":{"bpm":200.0,"duration":215,"songName":"NULCTRL MEISO FLIP","songSubName":"","songAuthorName":"Meiso","levelAuthorName":"Reaxt"},"stats":{"plays":0,"downloads":1769,"upvotes":1941,"downvotes":73,"score":0.9168},"uploaded":"2020-09-17T21:26:11.811Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"89b1de26baad93c63a6bdb3d9dbae7dc4972897b","key":"ed2a","state":"Published","createdAt":"2020-09-17T21:26:11.811Z","sageScore":3,"diffs":[{"njs":19.0,"offset":0.37,"notes":2984,"bombs":0,"obstacles":1570,"nps":14.22,"length":699.5,"characteristic":"Lawless","difficulty":"ExpertPlus","events":3557,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":209.85,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/89b1de26baad93c63a6bdb3d9dbae7dc4972897b.zip","coverURL":"https://cdn.beatsaver.com/89b1de26baad93c63a6bdb3d9dbae7dc4972897b.jpg","previewURL":"https://cdn.beatsaver.com/89b1de26baad93c63a6bdb3d9dbae7dc4972897b.mp3"}],"createdAt":"2020-09-17T21:26:11.811Z","updatedAt":"2020-09-17T21:26:11.811Z","lastPublishedAt":"2020-09-17T21:26:11.811Z"},{"id":"658e","name":"Take Back the Night - CaptainSparklez ft. TryHardNinja","description":"Take Back the Night, Written and Performed by TryHardNinja, Original Animation Produced and Directed by CaptainSparklez.\n\nCheck out the gameplay video here! https://www.youtube.com/watch?v=47Fnh08AEy4","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":126.0,"duration":317,"songName":"Take Back the Night","songSubName":"","songAuthorName":"CaptainSparklez ft. TryHardNinja","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":1693,"upvotes":611,"downvotes":8,"score":0.9168},"uploaded":"2019-09-24T02:56:43.768Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"0361c056cd4247d639eda648bf21e4eae4454f3e","key":"658e","state":"Published","createdAt":"2019-09-24T02:56:43.768Z","sageScore":6,"diffs":[{"njs":12.0,"offset":0.0,"notes":652,"bombs":0,"obstacles":62,"nps":2.126,"length":644.0,"characteristic":"Standard","difficulty":"Hard","events":4659,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":306.667,"paritySummary":{"errors":56,"warns":49,"resets":0}},{"njs":14.0,"offset":0.0,"notes":923,"bombs":0,"obstacles":85,"nps":3.01,"length":644.0,"characteristic":"Standard","difficulty":"Expert","events":4659,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":306.667,"paritySummary":{"errors":52,"warns":29,"resets":0}},{"njs":16.0,"offset":0.0,"notes":1051,"bombs":0,"obstacles":87,"nps":3.427,"length":644.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":4669,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":306.667,"paritySummary":{"errors":45,"warns":43,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/0361c056cd4247d639eda648bf21e4eae4454f3e.zip","coverURL":"https://cdn.beatsaver.com/0361c056cd4247d639eda648bf21e4eae4454f3e.jpg","previewURL":"https://cdn.beatsaver.com/0361c056cd4247d639eda648bf21e4eae4454f3e.mp3"}],"createdAt":"2019-09-24T02:56:43.768Z","updatedAt":"2019-09-24T02:56:43.768Z","lastPublishedAt":"2019-09-24T02:56:43.768Z"},{"id":"64c9","name":"You Don't Want Me (Crystal Skies Remix)","description":"My first wall map! On top of having walls, it also has Chroma lights!\n\nYou have a few options for playing, you can view the lightshow with or without walls, and you can play the map with or without walls. \n\nHere's a video of the walls and the lights :D https://www.youtube.com/watch?v=DkRDF8bbNjQ\n\nI did the whole map myself, but of course, I had some help from the lovely people on the BSMG. Thanks Kival Evan, Dni0, JENNAexe, Aeroluna and necrospook_ for the testplays! And also, another thanks to Aeroluna for helping me fix any bugs with the metadata for my map :)\n\nPS.: Beatcore, one of the song's artists, also released a new EP today that is really good! He's super unknown so go check it out on YouTube and Spotify if you get a chance. He's really talented :D\n\nYou Don't Want Me (Crystal Skies Remix) - Beatcore, Ashley Apollodor | 130 BPM | Expert+ Only (With and without walls) along with Lightshow and Lightshow/Wallshow | Fully mapped with custom lights and walls\n\n<3\n\n","uploader":{"id":17131,"name":"tranquillizeme","uniqueSet":true,"hash":"5cff0b7798cc5a672c85609e","avatar":"https://www.gravatar.com/avatar/5cff0b7798cc5a672c85609e?d=retro","type":"SIMPLE"},"metadata":{"bpm":130.0,"duration":233,"songName":"You Don't Want Me","songSubName":"Crystal Skies Remix","songAuthorName":"Beatcore, Ashley Apollodor, Crystal Skies","levelAuthorName":"TranquillizeMe"},"stats":{"plays":0,"downloads":1743,"upvotes":851,"downvotes":18,"score":0.9168},"uploaded":"2019-09-20T22:30:43.842Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"fbf6f4775ff824facf83ad4a27f48d220466f21e","key":"64c9","state":"Published","createdAt":"2019-09-20T22:30:43.842Z","sageScore":8,"diffs":[{"njs":18.0,"offset":0.0,"notes":782,"bombs":22,"obstacles":0,"nps":3.597,"length":471.0,"characteristic":"Standard","difficulty":"Expert","events":16275,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":217.385,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":18.0,"offset":0.0,"notes":782,"bombs":22,"obstacles":5003,"nps":3.597,"length":471.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":16275,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":217.385,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":18.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"Lightshow","difficulty":"Easy","events":16275,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":18.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":5003,"nps":0.0,"length":0.0,"characteristic":"Lightshow","difficulty":"Normal","events":16275,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/fbf6f4775ff824facf83ad4a27f48d220466f21e.zip","coverURL":"https://cdn.beatsaver.com/fbf6f4775ff824facf83ad4a27f48d220466f21e.jpg","previewURL":"https://cdn.beatsaver.com/fbf6f4775ff824facf83ad4a27f48d220466f21e.mp3"}],"createdAt":"2019-09-20T22:30:43.842Z","updatedAt":"2019-09-20T22:30:43.842Z","lastPublishedAt":"2019-09-20T22:30:43.842Z"},{"id":"431c","name":"Shine (RWBY: Volume 2 Soundtrack) - Jeff Williams ft. Casey Lee Williams","description":"\"Shine\" is a single that was featured prominently in the episode: \"Dance Dance Infiltration\", where Team JNPR performed a synchronized dance routine to the song.","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":122.0,"duration":260,"songName":"Shine","songSubName":"Jeff Williams ft. Casey Lee Williams","songAuthorName":"Joetastic","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":2411,"upvotes":661,"downvotes":10,"score":0.9168},"uploaded":"2019-04-03T08:52:47Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"f95bfca25401b117bd9bec202c741bd75f44141b","key":"431c","state":"Published","createdAt":"2019-04-03T08:52:47Z","sageScore":6,"diffs":[{"njs":14.0,"offset":0.0,"notes":969,"bombs":0,"obstacles":7,"nps":3.818,"length":516.0,"characteristic":"Standard","difficulty":"Expert","events":1070,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":253.77,"paritySummary":{"errors":28,"warns":33,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/f95bfca25401b117bd9bec202c741bd75f44141b.zip","coverURL":"https://cdn.beatsaver.com/f95bfca25401b117bd9bec202c741bd75f44141b.jpg","previewURL":"https://cdn.beatsaver.com/f95bfca25401b117bd9bec202c741bd75f44141b.mp3"}],"createdAt":"2019-04-03T08:52:47Z","updatedAt":"2019-04-03T08:52:47Z","lastPublishedAt":"2019-04-03T08:52:47Z"},{"id":"3436","name":"Christopher Tin - Baba Yetu","description":"This song was recommended to me. Baba Yetu is theme song Civilization IV.","uploader":{"id":4285018,"name":"majorpickle","uniqueSet":true,"hash":"5cff0b7398cc5a672c84f792","avatar":"https://cdn.beatsaver.com/avatar/450358937657671680.png","type":"DISCORD"},"metadata":{"bpm":92.0,"duration":210,"songName":"Baba Yetu","songSubName":"Christopher Tin","songAuthorName":"Majorpickle","levelAuthorName":"majorpickle"},"stats":{"plays":0,"downloads":2763,"upvotes":1090,"downvotes":29,"score":0.9168},"uploaded":"2019-02-07T03:44:18Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"60c7f5c08d38ad3664ad42874b874675a03da14a","key":"3436","state":"Published","createdAt":"2019-02-07T03:44:18Z","sageScore":4,"diffs":[{"njs":10.0,"offset":0.0,"notes":681,"bombs":0,"obstacles":86,"nps":3.638,"length":287.0,"characteristic":"Standard","difficulty":"Expert","events":535,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":187.174,"paritySummary":{"errors":33,"warns":19,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/60c7f5c08d38ad3664ad42874b874675a03da14a.zip","coverURL":"https://cdn.beatsaver.com/60c7f5c08d38ad3664ad42874b874675a03da14a.jpg","previewURL":"https://cdn.beatsaver.com/60c7f5c08d38ad3664ad42874b874675a03da14a.mp3"}],"createdAt":"2019-02-07T03:44:18Z","updatedAt":"2019-02-07T03:44:18Z","lastPublishedAt":"2019-02-07T03:44:18Z"},{"id":"2c5d","name":"Stay Frosty Royal Milk Tea - Fall Out Boy","description":"Expert Playthrough : https://youtu.be/mzmD9PYtW3I","uploader":{"id":13320,"name":"novashaft","uniqueSet":true,"hash":"5cff0b7398cc5a672c84ee55","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee55?d=retro","type":"SIMPLE"},"metadata":{"bpm":146.0,"duration":174,"songName":"Stay Frosty Royal Milk Tea","songSubName":"Fall Out Boy","songAuthorName":"NovaShaft","levelAuthorName":"novashaft"},"stats":{"plays":0,"downloads":1134,"upvotes":447,"downvotes":2,"score":0.9168},"uploaded":"2019-01-09T20:30:52Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"c5b540769ac513b9ebf2f59f465823a9b73f6032","key":"2c5d","state":"Published","createdAt":"2019-01-09T20:30:52Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":296,"bombs":6,"obstacles":13,"nps":1.801,"length":400.0,"characteristic":"Standard","difficulty":"Normal","events":855,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":164.384,"paritySummary":{"errors":38,"warns":22,"resets":0}},{"njs":11.0,"offset":0.0,"notes":401,"bombs":6,"obstacles":13,"nps":2.439,"length":400.0,"characteristic":"Standard","difficulty":"Hard","events":855,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":164.384,"paritySummary":{"errors":43,"warns":31,"resets":0}},{"njs":13.0,"offset":0.0,"notes":512,"bombs":8,"obstacles":13,"nps":3.115,"length":400.0,"characteristic":"Standard","difficulty":"Expert","events":855,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":164.384,"paritySummary":{"errors":46,"warns":75,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/c5b540769ac513b9ebf2f59f465823a9b73f6032.zip","coverURL":"https://cdn.beatsaver.com/c5b540769ac513b9ebf2f59f465823a9b73f6032.jpg","previewURL":"https://cdn.beatsaver.com/c5b540769ac513b9ebf2f59f465823a9b73f6032.mp3"}],"createdAt":"2019-01-09T20:30:52Z","updatedAt":"2019-01-09T20:30:52Z","lastPublishedAt":"2019-01-09T20:30:52Z"},{"id":"446","name":"Simple and Clean - PLANITb Remix - Kingdom Hearts","description":"Normal / Hard / Expert\r\nLight show\r\n\r\nhttps://youtu.be/rYrIFjxeY0k","uploader":{"id":52578,"name":"xroninbladex","uniqueSet":true,"hash":"5cff0b7298cc5a672c84ea58","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ea58?d=retro","type":"SIMPLE"},"metadata":{"bpm":130.0,"duration":131,"songName":"Simple and Clean","songSubName":"-PLANITb Remix-","songAuthorName":"xroninbladex","levelAuthorName":"xroninbladex"},"stats":{"plays":0,"downloads":2370,"upvotes":1567,"downvotes":53,"score":0.9168},"uploaded":"2018-06-08T14:55:59Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"8390e3f33ef12a395602c4ae12df9250a730a629","key":"446","state":"Published","createdAt":"2018-06-08T14:55:59Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":198,"bombs":2,"obstacles":1,"nps":1.89,"length":227.0,"characteristic":"Standard","difficulty":"Normal","events":525,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":104.769,"paritySummary":{"errors":11,"warns":28,"resets":0}},{"njs":10.0,"offset":0.0,"notes":310,"bombs":2,"obstacles":1,"nps":2.959,"length":227.0,"characteristic":"Standard","difficulty":"Hard","events":525,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":104.769,"paritySummary":{"errors":33,"warns":74,"resets":0}},{"njs":10.0,"offset":0.0,"notes":376,"bombs":2,"obstacles":1,"nps":3.589,"length":227.0,"characteristic":"Standard","difficulty":"Expert","events":525,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":104.769,"paritySummary":{"errors":49,"warns":56,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/8390e3f33ef12a395602c4ae12df9250a730a629.zip","coverURL":"https://cdn.beatsaver.com/8390e3f33ef12a395602c4ae12df9250a730a629.jpg","previewURL":"https://cdn.beatsaver.com/8390e3f33ef12a395602c4ae12df9250a730a629.mp3"}],"createdAt":"2018-06-08T14:55:59Z","updatedAt":"2018-06-08T14:55:59Z","lastPublishedAt":"2018-06-08T14:55:59Z"},{"id":"41b","name":"30 Seconds to Mars | Dangerous Night","description":"Normal/Hard/Expert\r\nExpert map is not that tough. Its a fairly slower song that flows nicely.","uploader":{"id":41378,"name":"greatyazer","uniqueSet":true,"hash":"5cff0b7298cc5a672c84ea71","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ea71?d=retro","type":"SIMPLE"},"metadata":{"bpm":132.0,"duration":200,"songName":"Dangerous Night","songSubName":"30 Seconds to Mars","songAuthorName":"GreatYazer","levelAuthorName":"greatyazer"},"stats":{"plays":0,"downloads":9071,"upvotes":2404,"downvotes":99,"score":0.9168},"uploaded":"2018-06-07T17:49:47Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"85a675da674fb13e576f2ac9b61a5adc767b060a","key":"41b","state":"Published","createdAt":"2018-06-07T17:49:47Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":227,"bombs":0,"obstacles":53,"nps":1.202,"length":415.5,"characteristic":"Standard","difficulty":"Normal","events":463,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":188.864,"paritySummary":{"errors":130,"warns":10,"resets":0},"stars":0.78},{"njs":10.0,"offset":0.0,"notes":365,"bombs":0,"obstacles":59,"nps":1.933,"length":415.5,"characteristic":"Standard","difficulty":"Hard","events":463,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":188.864,"paritySummary":{"errors":81,"warns":31,"resets":0},"stars":1.2},{"njs":10.0,"offset":0.0,"notes":520,"bombs":0,"obstacles":60,"nps":2.753,"length":415.5,"characteristic":"Standard","difficulty":"Expert","events":463,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":188.864,"paritySummary":{"errors":60,"warns":53,"resets":0},"stars":1.7}],"downloadURL":"https://cdn.beatsaver.com/85a675da674fb13e576f2ac9b61a5adc767b060a.zip","coverURL":"https://cdn.beatsaver.com/85a675da674fb13e576f2ac9b61a5adc767b060a.jpg","previewURL":"https://cdn.beatsaver.com/85a675da674fb13e576f2ac9b61a5adc767b060a.mp3"}],"createdAt":"2018-06-07T17:49:47Z","updatedAt":"2018-06-07T17:49:47Z","lastPublishedAt":"2018-06-07T17:49:47Z"},{"id":"4f0f","name":"MOMOLAND - BAAM","description":"Whoot whoot, first map! Please enjoy and have fun!\nExpert+ is named \"Alternate Expert\" in game and is largely the same as Expert. The differences are at 1:05-1:24, 2:20-2:39, and 2:54-3:09 with Alt Expert being a little more intense and fun in my opinion. Still I found myself playing both Experts interchangeably so think of it as a little experimentation as I continue to learn.\n\nNEW! Expert Preview Video: https://www.youtube.com/watch?v=qA1811Z-uVo\nMirror: https://streamable.com/p634s\n\n1 Year Mapping Anniversary Remaster: https://beatsaver.com/beatmap/aa5c","uploader":{"id":71661,"name":"bloodcloak","uniqueSet":true,"hash":"5cff0b7698cc5a672c8551d3","avatar":"https://cdn.beatsaver.com/avatar/205707707187986442.png","type":"DISCORD"},"metadata":{"bpm":127.0,"duration":208,"songName":"BAAM","songSubName":"MOMOLAND","songAuthorName":"Bloodcloak","levelAuthorName":"Bloodcloak"},"stats":{"plays":0,"downloads":2222,"upvotes":709,"downvotes":12,"score":0.9167},"uploaded":"2019-05-26T01:22:06Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"d54ad194fe09598964d1c065887e52f2c4248b30","key":"4f0f","state":"Published","createdAt":"2019-05-26T01:22:06Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":576,"bombs":0,"obstacles":68,"nps":2.91,"length":419.0,"characteristic":"Standard","difficulty":"Hard","events":1357,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":197.953,"paritySummary":{"errors":64,"warns":46,"resets":0}},{"njs":12.0,"offset":0.0,"notes":783,"bombs":0,"obstacles":61,"nps":3.955,"length":419.0,"characteristic":"Standard","difficulty":"Expert","events":1350,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":197.953,"paritySummary":{"errors":83,"warns":69,"resets":0}},{"njs":12.0,"offset":0.0,"notes":819,"bombs":0,"obstacles":67,"nps":4.137,"length":419.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":1350,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":197.953,"paritySummary":{"errors":89,"warns":52,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/d54ad194fe09598964d1c065887e52f2c4248b30.zip","coverURL":"https://cdn.beatsaver.com/d54ad194fe09598964d1c065887e52f2c4248b30.jpg","previewURL":"https://cdn.beatsaver.com/d54ad194fe09598964d1c065887e52f2c4248b30.mp3"}],"createdAt":"2019-05-26T01:22:06Z","updatedAt":"2019-05-26T01:22:06Z","lastPublishedAt":"2019-05-26T01:22:06Z"},{"id":"3714","name":"To The Stars - Braken (Monstercat Release)","description":"https://www.youtube.com/watch?v=105NIrAR4a4\r\nExpert+ only","uploader":{"id":4285982,"name":"downycat","uniqueSet":true,"hash":"5cff0b7398cc5a672c84ede5","avatar":"https://cdn.beatsaver.com/avatar/173538829888782336.png","type":"DISCORD"},"metadata":{"bpm":175.0,"duration":202,"songName":"To The Stars","songSubName":"Braken","songAuthorName":"DownyCat","levelAuthorName":"downycat"},"stats":{"plays":0,"downloads":2451,"upvotes":958,"downvotes":23,"score":0.9167},"uploaded":"2019-02-17T12:03:07Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"58fd2a28e6c3d6862084da1ec1b92c99090c5cd5","key":"3714","state":"Published","createdAt":"2019-02-17T12:03:07Z","sageScore":5,"diffs":[{"njs":14.0,"offset":0.0,"notes":996,"bombs":0,"obstacles":33,"nps":5.34,"length":544.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":2145,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":186.514,"paritySummary":{"errors":16,"warns":23,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/58fd2a28e6c3d6862084da1ec1b92c99090c5cd5.zip","coverURL":"https://cdn.beatsaver.com/58fd2a28e6c3d6862084da1ec1b92c99090c5cd5.jpg","previewURL":"https://cdn.beatsaver.com/58fd2a28e6c3d6862084da1ec1b92c99090c5cd5.mp3"}],"createdAt":"2019-02-17T12:03:07Z","updatedAt":"2019-02-17T12:03:07Z","lastPublishedAt":"2019-02-17T12:03:07Z"},{"id":"645a","name":"1788-L - A B Y S S","description":"","uploader":{"id":12996,"name":"rustic","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e8c4","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro","type":"SIMPLE"},"metadata":{"bpm":177.0,"duration":179,"songName":"A B Y S S","songSubName":"","songAuthorName":"1788-L","levelAuthorName":"Rustic"},"stats":{"plays":0,"downloads":1417,"upvotes":981,"downvotes":24,"score":0.9167},"uploaded":"2019-09-18T18:07:03.444Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"5f85d131f63c7415967ba4414abef741686ece9c","key":"645a","state":"Published","createdAt":"2019-09-18T18:07:03.444Z","sageScore":6,"diffs":[{"njs":20.0,"offset":0.0,"notes":553,"bombs":0,"obstacles":3106,"nps":3.224,"length":506.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":9089,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":171.525,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/5f85d131f63c7415967ba4414abef741686ece9c.zip","coverURL":"https://cdn.beatsaver.com/5f85d131f63c7415967ba4414abef741686ece9c.jpg","previewURL":"https://cdn.beatsaver.com/5f85d131f63c7415967ba4414abef741686ece9c.mp3"}],"createdAt":"2019-09-18T18:07:03.444Z","updatedAt":"2019-09-18T18:07:03.444Z","lastPublishedAt":"2019-09-18T18:07:03.444Z"},{"id":"5bc1","name":"Propaganda - Muse","description":"Please note that this track will get blocked automatically on YouTube.\n\nExpert Playthrough : https://vimeo.com/353093204","uploader":{"id":13320,"name":"novashaft","uniqueSet":true,"hash":"5cff0b7398cc5a672c84ee55","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee55?d=retro","type":"SIMPLE"},"metadata":{"bpm":190.0,"duration":182,"songName":"Propaganda","songSubName":"","songAuthorName":"Muse","levelAuthorName":"NovaShaft"},"stats":{"plays":0,"downloads":1728,"upvotes":660,"downvotes":10,"score":0.9167},"uploaded":"2019-08-10T12:59:56.399Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"99738852493b819152a7651583f40b63bba70188","key":"5bc1","state":"Published","createdAt":"2019-08-10T12:59:56.399Z","sageScore":5,"diffs":[{"njs":11.0,"offset":0.0,"notes":366,"bombs":0,"obstacles":23,"nps":2.093,"length":553.75,"characteristic":"Standard","difficulty":"Normal","events":900,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":174.868,"paritySummary":{"errors":32,"warns":6,"resets":0}},{"njs":12.0,"offset":0.0,"notes":492,"bombs":0,"obstacles":24,"nps":2.814,"length":553.75,"characteristic":"Standard","difficulty":"Hard","events":900,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":174.868,"paritySummary":{"errors":15,"warns":8,"resets":0}},{"njs":14.0,"offset":0.0,"notes":620,"bombs":0,"obstacles":26,"nps":3.546,"length":553.75,"characteristic":"Standard","difficulty":"Expert","events":900,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":174.868,"paritySummary":{"errors":19,"warns":13,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/99738852493b819152a7651583f40b63bba70188.zip","coverURL":"https://cdn.beatsaver.com/99738852493b819152a7651583f40b63bba70188.jpg","previewURL":"https://cdn.beatsaver.com/99738852493b819152a7651583f40b63bba70188.mp3"}],"createdAt":"2019-08-10T12:59:56.399Z","updatedAt":"2019-08-10T12:59:56.399Z","lastPublishedAt":"2019-08-10T12:59:56.399Z"},{"id":"f003","name":"Calliope Mori - Excuse My Rudeness, But Could You Please RIP?","description":"Expert+ Preview: https://www.youtube.com/watch?v=XCZMtdvz91g\n\nYo, fellow Dead Beats, this has been stuck in my head ever since it came out. The original songs by Calliope are absolute fire. The others in HoloMyth as well as the rest of Hololive are amazing and you should expect more maps from this realm. \n\nI totally did not fall into the rabbit hole... If you have any issues with that then, 失礼しますが、RIP♡\n\nComments? Like it? Hate it? Let me know on Discord @Bloodcloak#5725 !","uploader":{"id":71661,"name":"bloodcloak","uniqueSet":true,"hash":"5cff0b7698cc5a672c8551d3","avatar":"https://cdn.beatsaver.com/avatar/205707707187986442.png","type":"DISCORD"},"metadata":{"bpm":124.0,"duration":186,"songName":"Excuse My Rudeness, But Could You Please RIP?","songSubName":"","songAuthorName":"Calliope Mori","levelAuthorName":"Bloodcloak"},"stats":{"plays":0,"downloads":6752,"upvotes":1803,"downvotes":66,"score":0.9166},"uploaded":"2020-09-21T22:48:02.152Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"4b2a227ddb923ce3e6a3060530037014966037e2","key":"f003","state":"Published","createdAt":"2020-09-21T22:48:02.152Z","sageScore":2,"diffs":[{"njs":12.0,"offset":0.4,"notes":361,"bombs":0,"obstacles":139,"nps":1.992,"length":374.5,"characteristic":"Standard","difficulty":"Normal","events":2716,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":181.21,"paritySummary":{"errors":3,"warns":0,"resets":0}},{"njs":12.0,"offset":0.4,"notes":652,"bombs":0,"obstacles":105,"nps":3.598,"length":374.5,"characteristic":"Standard","difficulty":"Hard","events":2716,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":181.21,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":16.0,"offset":-0.2,"notes":948,"bombs":0,"obstacles":72,"nps":5.232,"length":374.5,"characteristic":"Standard","difficulty":"Expert","events":2716,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":181.21,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":18.0,"offset":-0.4,"notes":1105,"bombs":0,"obstacles":60,"nps":6.098,"length":374.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":2716,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":181.21,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/4b2a227ddb923ce3e6a3060530037014966037e2.zip","coverURL":"https://cdn.beatsaver.com/4b2a227ddb923ce3e6a3060530037014966037e2.jpg","previewURL":"https://cdn.beatsaver.com/4b2a227ddb923ce3e6a3060530037014966037e2.mp3"}],"createdAt":"2020-09-21T22:48:02.152Z","updatedAt":"2020-09-21T22:48:02.152Z","lastPublishedAt":"2020-09-21T22:48:02.152Z"},{"id":"a90a","name":"[TheFatRat Pack] Windfall - TheFatRat","description":"Here it is! The unofficial \"TheFatRat\" Music Pack in Beat Saber - with all beatmaps being singlehandedly made by me!\n\nAll songs included in TheFatRat Music Pack:\nMonody (ft. Laura Brehm) \nUnity \nWindfall \nXenogenesis \nTime Lapse \n\nGet the full song pack here: https://bsaber.com/thefatrat-music-pack/\n(Or you should just be able to find all the other ones on my beatsaver profile as well. Heres a link to my profile: https://beatsaver.com/uploader/5d47d586c5301900060b2f6c)\n\nSongcore mod is recommended (for custom colours)\nPlays best on Origins Environment\n\nWindfall Stats:\nExpert+ - 1031 Notes | 4.53 NPS\nExpert - 826 Notes | 3.63 NPS\nHard - 683 Notes | 3.00 NPS\nNormal - 421 Notes | 1.85 NPS\nEasy - 277 Notes | 1.22 NPS\n\nRoughly 9 Hours of work\nGameplay: https://youtu.be/RW5Y6GifdDA\n\nObviously - A huge thanks to TheFatRat himself, for not only producing the songs in the first place (and allowing free access to use them for big and small content creators), but also being a huge inspiration to lots of artists out there and for making music that everyone can jam out to! We love you, TheFatRat!","uploader":{"id":4284197,"name":"timeweaver","uniqueSet":true,"hash":"5d47d586c5301900060b2f6c","avatar":"https://cdn.beatsaver.com/avatar/607399708121366529.png","type":"DISCORD"},"metadata":{"bpm":102.0,"duration":227,"songName":"Windfall","songSubName":"","songAuthorName":"TheFatRat","levelAuthorName":"Timeweaver"},"stats":{"plays":0,"downloads":4210,"upvotes":1147,"downvotes":32,"score":0.9166},"uploaded":"2020-05-22T13:28:49.981Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"29677eb4f5cb04e2698b16923eee804abce90f76","key":"a90a","state":"Published","createdAt":"2020-05-22T13:28:49.981Z","sageScore":5,"diffs":[{"njs":10.0,"offset":1.0,"notes":277,"bombs":0,"obstacles":39,"nps":1.28,"length":368.0,"characteristic":"Standard","difficulty":"Easy","events":4238,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":216.471,"paritySummary":{"errors":40,"warns":28,"resets":0}},{"njs":10.0,"offset":1.0,"notes":421,"bombs":0,"obstacles":41,"nps":1.945,"length":368.0,"characteristic":"Standard","difficulty":"Normal","events":4238,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":216.471,"paritySummary":{"errors":59,"warns":27,"resets":0}},{"njs":12.0,"offset":0.25,"notes":683,"bombs":0,"obstacles":66,"nps":3.096,"length":375.0,"characteristic":"Standard","difficulty":"Hard","events":4238,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":220.588,"paritySummary":{"errors":3,"warns":0,"resets":0}},{"njs":14.0,"offset":-0.25,"notes":826,"bombs":0,"obstacles":67,"nps":3.735,"length":376.0,"characteristic":"Standard","difficulty":"Expert","events":4240,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":221.176,"paritySummary":{"errors":2,"warns":0,"resets":0}},{"njs":18.0,"offset":0.325,"notes":1031,"bombs":0,"obstacles":65,"nps":4.618,"length":379.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":4238,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":223.235,"paritySummary":{"errors":0,"warns":1,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/29677eb4f5cb04e2698b16923eee804abce90f76.zip","coverURL":"https://cdn.beatsaver.com/29677eb4f5cb04e2698b16923eee804abce90f76.jpg","previewURL":"https://cdn.beatsaver.com/29677eb4f5cb04e2698b16923eee804abce90f76.mp3"}],"createdAt":"2020-05-22T13:28:49.981Z","updatedAt":"2020-05-22T13:28:49.981Z","lastPublishedAt":"2020-05-22T13:28:49.981Z"},{"id":"5270","name":"Gurenge - LiSA","description":"Kimetsuno Yaiba OP\r\n\r\nPreview : https://youtu.be/6AznmNIg68Y\r\nNJS : 14(Expert), 13(Hard)","uploader":{"id":31044,"name":"digiracko","uniqueSet":true,"hash":"5cff0b7398cc5a672c84ed32","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ed32?d=retro","type":"SIMPLE"},"metadata":{"bpm":135.0,"duration":238,"songName":"Gurenge","songSubName":"LiSA","songAuthorName":"DigiRacko","levelAuthorName":"digiracko"},"stats":{"plays":0,"downloads":5415,"upvotes":3174,"downvotes":145,"score":0.9166},"uploaded":"2019-06-09T00:26:20Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"9c71e86622967891482bf18c536ff3d03eb5af3f","key":"5270","state":"Published","createdAt":"2019-06-09T00:26:20Z","sageScore":4,"diffs":[{"njs":13.0,"offset":1.0,"notes":703,"bombs":0,"obstacles":0,"nps":3.045,"length":519.5,"characteristic":"Standard","difficulty":"Hard","events":592,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":230.889,"paritySummary":{"errors":43,"warns":33,"resets":0}},{"njs":14.0,"offset":1.0,"notes":974,"bombs":0,"obstacles":0,"nps":4.218,"length":519.5,"characteristic":"Standard","difficulty":"Expert","events":593,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":230.889,"paritySummary":{"errors":79,"warns":66,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/9c71e86622967891482bf18c536ff3d03eb5af3f.zip","coverURL":"https://cdn.beatsaver.com/9c71e86622967891482bf18c536ff3d03eb5af3f.jpg","previewURL":"https://cdn.beatsaver.com/9c71e86622967891482bf18c536ff3d03eb5af3f.mp3"}],"createdAt":"2019-06-09T00:26:20Z","updatedAt":"2019-06-09T00:26:20Z","lastPublishedAt":"2019-06-09T00:26:20Z"},{"id":"2394","name":"Are You Gonna Be My Girl? - Jet","description":"All 5 difficulties. Had a lot of fun with this one :)\r\nAll charts down to normal are uniquely built.\r\n\r\nExpert+ Playthrough: https://youtu.be/5FhrP79pfVc","uploader":{"id":47581,"name":"freeek","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e8ad","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8ad?d=retro","type":"SIMPLE"},"metadata":{"bpm":105.0,"duration":218,"songName":"Are you gonna be my Girl","songSubName":"Jet","songAuthorName":"Freeek","levelAuthorName":"freeek"},"stats":{"plays":0,"downloads":5652,"upvotes":2217,"downvotes":89,"score":0.9166},"uploaded":"2018-12-03T18:23:49Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"399b2bd6630fe3dcc7631f89ae391e6684fd6a07","key":"2394","state":"Published","createdAt":"2018-12-03T18:23:49Z","sageScore":7,"diffs":[{"njs":10.0,"offset":0.0,"notes":286,"bombs":0,"obstacles":36,"nps":1.472,"length":340.0,"characteristic":"Standard","difficulty":"Easy","events":1906,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":194.286,"paritySummary":{"errors":10,"warns":1,"resets":0}},{"njs":10.0,"offset":0.0,"notes":369,"bombs":0,"obstacles":29,"nps":1.899,"length":340.0,"characteristic":"Standard","difficulty":"Normal","events":1906,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":194.286,"paritySummary":{"errors":36,"warns":31,"resets":0}},{"njs":10.0,"offset":0.0,"notes":510,"bombs":0,"obstacles":25,"nps":2.625,"length":340.0,"characteristic":"Standard","difficulty":"Hard","events":1906,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":194.286,"paritySummary":{"errors":45,"warns":49,"resets":0}},{"njs":12.0,"offset":0.0,"notes":757,"bombs":0,"obstacles":17,"nps":3.896,"length":340.0,"characteristic":"Standard","difficulty":"Expert","events":1906,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":194.286,"paritySummary":{"errors":37,"warns":43,"resets":0}},{"njs":15.0,"offset":0.0,"notes":927,"bombs":0,"obstacles":13,"nps":4.771,"length":340.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":1906,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":194.286,"paritySummary":{"errors":42,"warns":65,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/399b2bd6630fe3dcc7631f89ae391e6684fd6a07.zip","coverURL":"https://cdn.beatsaver.com/399b2bd6630fe3dcc7631f89ae391e6684fd6a07.jpg","previewURL":"https://cdn.beatsaver.com/399b2bd6630fe3dcc7631f89ae391e6684fd6a07.mp3"}],"createdAt":"2018-12-03T18:23:49Z","updatedAt":"2018-12-03T18:23:49Z","lastPublishedAt":"2018-12-03T18:23:49Z"},{"id":"451b","name":"Orion - Getsix","description":"Get your hunting instinct ready; let’s hunt some bloqs to this dynamic and emotional trip of a track. Think you have what it takes to keep up?\r\n\r\nHUGE thanks to Getsix for taking the time to make a new specific edit and mix of the song for this map! The edits include shortened intro, shorter synth lead parts and louder tribal drums, all for a better Beat Saber experience.\r\n\r\nPreview video:\r\nhttps://youtu.be/s6st6WoBd7k\r\n\r\nBPM: 130\r\nDuration: 3:58\r\nEasy, Normal, Hard, Expert and Expert+ difficulties.\r\n\r\nEasy: 253, 1 obstacles, 2 mines\r\nNormal: 365 notes, 1 obstacles, 4 mines\r\nHard: 556 notes, 1 obstacles, 8 mines\r\nExpert: 979 notes, 1 obstacles, 8 mines\r\nExpert+: 1048 notes, 1 obstacles, 8 mines\r\n\r\nThanks to Redmagi, Malakite and Helencarnate for playtesting!\r\n\r\nEnjoy!","uploader":{"id":4285318,"name":"kolezan","uniqueSet":true,"hash":"5cff0b7398cc5a672c84fcbb","avatar":"https://cdn.beatsaver.com/avatar/220513618763055106.png","type":"DISCORD"},"metadata":{"bpm":130.0,"duration":231,"songName":"Orion (Beat Saber Edit)","songSubName":"Getsix","songAuthorName":"Kolezan","levelAuthorName":"Kolezan"},"stats":{"plays":0,"downloads":3346,"upvotes":1205,"downvotes":35,"score":0.9165},"uploaded":"2019-04-12T05:54:28Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"c86e3d35feeb08e4569dabe2389558ba40fa5bf7","key":"451b","state":"Published","createdAt":"2019-04-12T05:54:28Z","sageScore":7,"diffs":[{"njs":9.0,"offset":0.0,"notes":253,"bombs":2,"obstacles":1,"nps":1.133,"length":484.0,"characteristic":"Standard","difficulty":"Easy","events":2353,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":223.385,"paritySummary":{"errors":80,"warns":17,"resets":0}},{"njs":10.0,"offset":1.0,"notes":365,"bombs":4,"obstacles":1,"nps":1.634,"length":484.0,"characteristic":"Standard","difficulty":"Normal","events":2353,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":223.385,"paritySummary":{"errors":74,"warns":41,"resets":0}},{"njs":14.0,"offset":0.0,"notes":556,"bombs":8,"obstacles":1,"nps":2.494,"length":483.0,"characteristic":"Standard","difficulty":"Hard","events":2353,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":222.923,"paritySummary":{"errors":75,"warns":61,"resets":4}},{"njs":17.0,"offset":0.0,"notes":979,"bombs":8,"obstacles":1,"nps":4.392,"length":483.0,"characteristic":"Standard","difficulty":"Expert","events":2353,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":222.923,"paritySummary":{"errors":76,"warns":108,"resets":2}},{"njs":19.0,"offset":0.0,"notes":1048,"bombs":8,"obstacles":1,"nps":4.701,"length":483.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":2353,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":222.923,"paritySummary":{"errors":97,"warns":112,"resets":2}}],"downloadURL":"https://cdn.beatsaver.com/c86e3d35feeb08e4569dabe2389558ba40fa5bf7.zip","coverURL":"https://cdn.beatsaver.com/c86e3d35feeb08e4569dabe2389558ba40fa5bf7.jpg","previewURL":"https://cdn.beatsaver.com/c86e3d35feeb08e4569dabe2389558ba40fa5bf7.mp3"}],"createdAt":"2019-04-12T05:54:28Z","updatedAt":"2019-04-12T05:54:28Z","lastPublishedAt":"2019-04-12T05:54:28Z"},{"id":"c209","name":"[Alphabeat - Pegboard Nerds Pack] Pegboard Nerds - Luigi's Mansion","description":"Part of the Pegboard Nerds Music Pack - Presented by the Alphabeat Mapping Group.\n\nAlphabeat is a mapping group that currently consists of 6 members, 4 of which have made this pack. This Pegboard Nerds pack is brought to you by Timeweaver, Rayman, KuritsaDVR & FireStrike!\n\nCheck out the other mappers' profiles here:\nTimeweaver - https://beatsaver.com/uploader/5d47d586c5301900060b2f6c\nFirestrike - https://beatsaver.com/uploader/5cff0b7698cc5a672c85479f\nKuritsaDVR - https://beatsaver.com/uploader/5cff0b7698cc5a672c8537ef\n\nThis map uses a custom platform made by Rayman (me!)! Download it here: https://modelsaber.com/Platforms/?id=1594988870\n\nAll songs included in this pack:\n- Gunslinga (Mapped by Rayman)\n- Coffins (Mapped by Rayman)\n- Superstar (Mapped by Timeweaver & Firestrike)\n- Razor Sharp (Mapped by Firestrike)\n- Luigi’s Mansion (Mapped by Rayman)\n- Try This (Mapped by Timeweaver & Firestrike)\n- Swamp Thing (Mapped by Rayman & KuritsaDVR)\n- Exterminate (Mapped by Timeweaver)\n- Disconnected (Mapped by Timeweaver & Firestrike)\n- Here it Comes (Mapped by KuritsaDVR & Timeweaver)\n\nGet the playlist here:\nhttps://bsaber.com/pegboard-nerds-pack/\n\nView the trailer here:\nhttps://youtu.be/b0fU5Rv_Zf0\n\nIncludes\n- 5 Standard Difficulties\n- 1 One Saber Difficulty\n- 1 360 Degree Difficulty\n- 1 90 Degree Difficulty","uploader":{"id":4284994,"name":"rayman9515","uniqueSet":true,"hash":"5dc6edac6dea0b0006c18486","avatar":"https://cdn.beatsaver.com/avatar/439017353892724736.png","type":"DISCORD"},"metadata":{"bpm":99.0,"duration":229,"songName":"Luigi's Mansion","songSubName":"","songAuthorName":"Pegboard Nerds","levelAuthorName":"Rayman9515"},"stats":{"plays":0,"downloads":2446,"upvotes":797,"downvotes":16,"score":0.9164},"uploaded":"2020-07-17T13:00:46.645Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"e7cdcc86e136da49cce9747233131e819cabe951","key":"c209","state":"Published","createdAt":"2020-07-17T13:00:46.645Z","sageScore":4,"diffs":[{"njs":11.0,"offset":0.2,"notes":332,"bombs":0,"obstacles":45,"nps":1.491,"length":365.803,"characteristic":"Standard","difficulty":"Easy","events":3635,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":221.699,"paritySummary":{"errors":10,"warns":1,"resets":0}},{"njs":11.0,"offset":0.2,"notes":471,"bombs":0,"obstacles":68,"nps":2.115,"length":365.803,"characteristic":"Standard","difficulty":"Normal","events":3635,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":221.699,"paritySummary":{"errors":20,"warns":2,"resets":0}},{"njs":13.0,"offset":0.0,"notes":682,"bombs":4,"obstacles":67,"nps":3.063,"length":365.803,"characteristic":"Standard","difficulty":"Hard","events":3635,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":221.699,"paritySummary":{"errors":6,"warns":0,"resets":0}},{"njs":16.0,"offset":0.5,"notes":877,"bombs":0,"obstacles":71,"nps":3.939,"length":365.803,"characteristic":"Standard","difficulty":"Expert","events":3635,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":221.699,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":19.0,"offset":0.25,"notes":1184,"bombs":0,"obstacles":111,"nps":5.318,"length":365.803,"characteristic":"Standard","difficulty":"ExpertPlus","events":3637,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":221.699,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":19.0,"offset":0.25,"notes":825,"bombs":35,"obstacles":136,"nps":3.705,"length":365.803,"characteristic":"OneSaber","difficulty":"ExpertPlus","events":3635,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":221.699,"paritySummary":{"errors":2,"warns":24,"resets":0}},{"njs":11.0,"offset":0.2,"notes":471,"bombs":0,"obstacles":63,"nps":2.115,"length":365.803,"characteristic":"90Degree","difficulty":"Normal","events":3875,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":221.699,"paritySummary":{"errors":20,"warns":2,"resets":0}},{"njs":11.0,"offset":0.2,"notes":471,"bombs":0,"obstacles":63,"nps":2.115,"length":365.803,"characteristic":"360Degree","difficulty":"Normal","events":3875,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":221.699,"paritySummary":{"errors":20,"warns":2,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/e7cdcc86e136da49cce9747233131e819cabe951.zip","coverURL":"https://cdn.beatsaver.com/e7cdcc86e136da49cce9747233131e819cabe951.jpg","previewURL":"https://cdn.beatsaver.com/e7cdcc86e136da49cce9747233131e819cabe951.mp3"}],"createdAt":"2020-07-17T13:00:46.645Z","updatedAt":"2020-07-17T13:00:46.645Z","lastPublishedAt":"2020-07-17T13:00:46.645Z"},{"id":"d8","name":"Undertale - Megalovania (Cement City Remix) v.2","description":"I uploaded this song earlier today, but unfortunately not realizing an issue that I had made with the placement of 2 blocks that were near impossible to hit. Fixed and re-uploaded!\r\n\r\nDue to issues with EditSaber, I was unable to create any difficulties beyond Expert, as any changes made on one difficulty would carry over to the others.\r\n\r\nAlso this is my first beat map. Go easy. ;)","uploader":{"id":48522,"name":"kryptikos","uniqueSet":true,"hash":"5cff0b7298cc5a672c84eab4","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84eab4?d=retro","type":"SIMPLE"},"metadata":{"bpm":126.0,"duration":164,"songName":"Megalovania (Cement City Remix)","songSubName":"Undertale","songAuthorName":"Kryptikos","levelAuthorName":"kryptikos"},"stats":{"plays":0,"downloads":4306,"upvotes":3000,"downvotes":135,"score":0.9164},"uploaded":"2018-05-17T21:38:37Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"2ee2deee264648432035f4abefa69b9dac86bd95","key":"d8","state":"Published","createdAt":"2018-05-17T21:38:37Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":566,"bombs":32,"obstacles":167,"nps":3.631,"length":327.313,"characteristic":"Standard","difficulty":"Expert","events":1864,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":155.863,"paritySummary":{"errors":82,"warns":57,"resets":2}}],"downloadURL":"https://cdn.beatsaver.com/2ee2deee264648432035f4abefa69b9dac86bd95.zip","coverURL":"https://cdn.beatsaver.com/2ee2deee264648432035f4abefa69b9dac86bd95.jpg","previewURL":"https://cdn.beatsaver.com/2ee2deee264648432035f4abefa69b9dac86bd95.mp3"}],"createdAt":"2018-05-17T21:38:37Z","updatedAt":"2018-05-17T21:38:37Z","lastPublishedAt":"2018-05-17T21:38:37Z"},{"id":"1a0be","name":"[Electro Swing Pack] Caravan Palace - Wonderland","description":"Nixie Presents: Electro Swing Pack!\n\n10 electro swing songs with expert and expert+ diffs to make your booty swing!\n\nGet The Pack: \nhttps://bsaber.com/electro-swing-pack/\n\nMap Gameplay:\nhttps://youtu.be/uFiLQLooDpQ\n\nComplete Pack Playthrough:\nhttps://youtu.be/yj9rw4MEh7s\n\nHeyya! After looking for some dancey electro swing maps, I noticed that there barely are any!\nSo I took matters into my own hands, learning mapping basically from scratch,\nscrapping my first failed attempts and then finally making a map that was good.\nI found it so fun that I ended up making 9 more maps,\nand fine tuned them with the help of the testplayers in BSMG,\nas well as the lovely curators from the bsaber discord.\n\nHuge thanks in particular to:\nMonstor, Bearly, Noxn, Bullet, Vaser888, Tocxx, Jafdy, Storm Knight and Pixelguy!\n\nIf you want to talk to me, here is my Discord:\nNixie.Korten#6944","uploader":{"id":4286374,"name":"nixiekorten","uniqueSet":true,"hash":"6096752e12772e0006e2f7e6","avatar":"https://cdn.beatsaver.com/avatar/840550221690699776.png","type":"DISCORD"},"metadata":{"bpm":104.0,"duration":188,"songName":"Wonderland","songSubName":"","songAuthorName":"Caravan Palace","levelAuthorName":"Nixie.Korten"},"stats":{"plays":0,"downloads":14872,"upvotes":794,"downvotes":16,"score":0.9163},"uploaded":"2021-07-08T15:26:38.489Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"9752f2de4dd434c589ced6d89358b1fda6902d3f","key":"1a0be","state":"Published","createdAt":"2021-07-08T15:26:38.489Z","sageScore":3,"diffs":[{"njs":16.0,"offset":0.25,"notes":671,"bombs":0,"obstacles":0,"nps":3.779,"length":307.75,"characteristic":"Standard","difficulty":"Expert","events":1588,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":177.548,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":21.0,"offset":0.0,"notes":837,"bombs":0,"obstacles":10,"nps":4.714,"length":307.75,"characteristic":"Standard","difficulty":"ExpertPlus","events":1588,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":177.548,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/9752f2de4dd434c589ced6d89358b1fda6902d3f.zip","coverURL":"https://cdn.beatsaver.com/9752f2de4dd434c589ced6d89358b1fda6902d3f.jpg","previewURL":"https://cdn.beatsaver.com/9752f2de4dd434c589ced6d89358b1fda6902d3f.mp3"}],"createdAt":"2021-07-08T15:26:38.489Z","updatedAt":"2021-07-08T15:26:38.489Z","lastPublishedAt":"2021-07-08T15:26:38.489Z"},{"id":"d191","name":"Seven Lions - Silent Skies (ft. Karra) | [Chroma RGB]","description":"Was only a lightshow at first but felt like mapping it too. \nSo here is Hard, Expert and Expert+ with my best lightshow so far (imo).\nhope you like it.\n\ntalk shit on discord: nitronik.exe#7974\n\nlightshow preview: https://www.youtube.com/watch?v=vpi-VG_nZg8&t=19s","uploader":{"id":4284201,"name":"nitronikexe","uniqueSet":true,"hash":"5cff0b7798cc5a672c855d84","avatar":"https://cdn.beatsaver.com/avatar/428230049704181760.png","type":"DISCORD"},"metadata":{"bpm":140.0,"duration":234,"songName":"Silent Skies","songSubName":"(ft. Karra)","songAuthorName":"Seven Lions","levelAuthorName":"nitronik.exe"},"stats":{"plays":0,"downloads":4892,"upvotes":725,"downvotes":13,"score":0.9163},"uploaded":"2020-08-08T18:33:55.424Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"8434f521be275ae476b82c00201570ece88b395f","key":"d191","state":"Published","createdAt":"2020-08-08T18:33:55.424Z","sageScore":7,"diffs":[{"njs":12.0,"offset":1.0,"notes":491,"bombs":6,"obstacles":59,"nps":2.238,"length":512.0,"characteristic":"Standard","difficulty":"Hard","events":8199,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":219.429,"paritySummary":{"errors":0,"warns":0,"resets":2}},{"njs":16.0,"offset":0.0,"notes":813,"bombs":6,"obstacles":33,"nps":3.704,"length":512.083,"characteristic":"Standard","difficulty":"Expert","events":8199,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":219.464,"paritySummary":{"errors":0,"warns":0,"resets":2}},{"njs":20.0,"offset":-0.5,"notes":1113,"bombs":6,"obstacles":32,"nps":5.071,"length":512.125,"characteristic":"Standard","difficulty":"ExpertPlus","events":8199,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":219.482,"paritySummary":{"errors":0,"warns":0,"resets":2}},{"njs":16.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"Lightshow","difficulty":"Easy","events":8199,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/8434f521be275ae476b82c00201570ece88b395f.zip","coverURL":"https://cdn.beatsaver.com/8434f521be275ae476b82c00201570ece88b395f.jpg","previewURL":"https://cdn.beatsaver.com/8434f521be275ae476b82c00201570ece88b395f.mp3"}],"createdAt":"2020-08-08T18:33:55.424Z","updatedAt":"2020-08-08T18:33:55.424Z","lastPublishedAt":"2020-08-08T18:33:55.424Z"},{"id":"6b96","name":"COALAMODE. - Nanairo Symphony [Your Lie in April Opening 2]","description":"You think it reached her?\n\nBPM 155 | Length 2:01\nExpert\nHard\nNormal\n\nplease enjoy\n\nDM any feedback on Discord\nETAN#8341","uploader":{"id":4235140,"name":"etan","uniqueSet":true,"hash":"5cff0b7798cc5a672c855775","avatar":"https://cdn.beatsaver.com/avatar/136373107559497728.png","type":"DISCORD"},"metadata":{"bpm":155.0,"duration":122,"songName":"Nanairo Symphony","songSubName":"","songAuthorName":"COALAMODE.","levelAuthorName":"ETAN"},"stats":{"plays":0,"downloads":2462,"upvotes":602,"downvotes":8,"score":0.9163},"uploaded":"2019-10-22T23:22:04.194Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"cc3b824dcb605eb76fce944623758578094cd77d","key":"6b96","state":"Published","createdAt":"2019-10-22T23:22:04.194Z","sageScore":6,"diffs":[{"njs":11.0,"offset":0.0,"notes":207,"bombs":0,"obstacles":1,"nps":1.857,"length":288.0,"characteristic":"Standard","difficulty":"Normal","events":3796,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":111.484,"paritySummary":{"errors":2,"warns":2,"resets":0}},{"njs":12.0,"offset":1.0,"notes":282,"bombs":0,"obstacles":1,"nps":2.53,"length":288.0,"characteristic":"Standard","difficulty":"Hard","events":3796,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":111.484,"paritySummary":{"errors":0,"warns":1,"resets":0}},{"njs":16.0,"offset":0.5,"notes":411,"bombs":0,"obstacles":1,"nps":3.687,"length":288.0,"characteristic":"Standard","difficulty":"Expert","events":3796,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":111.484,"paritySummary":{"errors":4,"warns":3,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/cc3b824dcb605eb76fce944623758578094cd77d.zip","coverURL":"https://cdn.beatsaver.com/cc3b824dcb605eb76fce944623758578094cd77d.jpg","previewURL":"https://cdn.beatsaver.com/cc3b824dcb605eb76fce944623758578094cd77d.mp3"}],"createdAt":"2019-10-22T23:22:04.194Z","updatedAt":"2019-10-22T23:22:04.194Z","lastPublishedAt":"2019-10-22T23:22:04.194Z"},{"id":"42de","name":"Kamikaze - WALK THE MOON","description":"An older map that I have no idea why I never published. So here it is!","uploader":{"id":30311,"name":"bennydabeast","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e98d","avatar":"https://cdn.beatsaver.com/avatar/30311.jpg","type":"SIMPLE"},"metadata":{"bpm":155.0,"duration":198,"songName":"Kamikaze","songSubName":"WALK THE MOON","songAuthorName":"BennyDaBeast","levelAuthorName":"bennydabeast"},"stats":{"plays":0,"downloads":3218,"upvotes":950,"downvotes":23,"score":0.9163},"uploaded":"2019-04-01T22:12:10Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"63d2d5920e6676f63bf997ae606b6d1590cd8c8d","key":"42de","state":"Published","createdAt":"2019-04-01T22:12:10Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":231,"bombs":0,"obstacles":8,"nps":1.203,"length":496.0,"characteristic":"Standard","difficulty":"Easy","events":266,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":192.0,"paritySummary":{"errors":71,"warns":20,"resets":0}},{"njs":10.0,"offset":0.0,"notes":259,"bombs":0,"obstacles":8,"nps":1.349,"length":496.0,"characteristic":"Standard","difficulty":"Normal","events":266,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":192.0,"paritySummary":{"errors":39,"warns":23,"resets":0}},{"njs":10.0,"offset":0.0,"notes":442,"bombs":0,"obstacles":8,"nps":2.302,"length":496.0,"characteristic":"Standard","difficulty":"Hard","events":266,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":192.0,"paritySummary":{"errors":84,"warns":55,"resets":0}},{"njs":12.0,"offset":0.0,"notes":487,"bombs":0,"obstacles":8,"nps":2.536,"length":496.0,"characteristic":"Standard","difficulty":"Expert","events":266,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":192.0,"paritySummary":{"errors":87,"warns":68,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/63d2d5920e6676f63bf997ae606b6d1590cd8c8d.zip","coverURL":"https://cdn.beatsaver.com/63d2d5920e6676f63bf997ae606b6d1590cd8c8d.jpg","previewURL":"https://cdn.beatsaver.com/63d2d5920e6676f63bf997ae606b6d1590cd8c8d.mp3"}],"createdAt":"2019-04-01T22:12:10Z","updatedAt":"2019-04-01T22:12:10Z","lastPublishedAt":"2019-04-01T22:12:10Z"},{"id":"18a6","name":"DJ Fresh - Louder (Doctor P & Flux Pavilion Remix)","description":"Expert / Hard / Normal\r\nhttps://www.youtube.com/watch?v=rfR4cbnB7T8","uploader":{"id":12996,"name":"rustic","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e8c4","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro","type":"SIMPLE"},"metadata":{"bpm":140.0,"duration":128,"songName":"Louder (Doctor P & Flux Pavilion Remix)","songSubName":"DJ Fresh","songAuthorName":"Rustic","levelAuthorName":"rustic"},"stats":{"plays":0,"downloads":2475,"upvotes":1159,"downvotes":33,"score":0.9163},"uploaded":"2018-10-04T12:37:14Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"6b2cdc3638c97881753d83308c13eda1a490f0b2","key":"18a6","state":"Published","createdAt":"2018-10-04T12:37:14Z","sageScore":6,"diffs":[{"njs":10.0,"offset":0.0,"notes":249,"bombs":0,"obstacles":1,"nps":2.06,"length":282.0,"characteristic":"Standard","difficulty":"Normal","events":2076,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":120.857,"paritySummary":{"errors":10,"warns":27,"resets":0}},{"njs":12.0,"offset":0.0,"notes":305,"bombs":0,"obstacles":2,"nps":2.524,"length":282.0,"characteristic":"Standard","difficulty":"Hard","events":2076,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":120.857,"paritySummary":{"errors":10,"warns":39,"resets":0}},{"njs":14.0,"offset":0.0,"notes":380,"bombs":0,"obstacles":14,"nps":3.144,"length":282.0,"characteristic":"Standard","difficulty":"Expert","events":2364,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":120.857,"paritySummary":{"errors":11,"warns":43,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/6b2cdc3638c97881753d83308c13eda1a490f0b2.zip","coverURL":"https://cdn.beatsaver.com/6b2cdc3638c97881753d83308c13eda1a490f0b2.jpg","previewURL":"https://cdn.beatsaver.com/6b2cdc3638c97881753d83308c13eda1a490f0b2.mp3"}],"createdAt":"2018-10-04T12:37:14Z","updatedAt":"2018-10-04T12:37:14Z","lastPublishedAt":"2018-10-04T12:37:14Z"},{"id":"2529","name":"Back From The Dead - Skillet","description":"Song: Back From The Dead - Skillet\r\nMapper: KuritsaDBS\r\nAvailable difficulties: Expert\r\nPreview: Not available","uploader":{"id":23150,"name":"kuritsadbs","uniqueSet":true,"hash":"5cff0b7698cc5a672c8537ef","avatar":"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8537ef?d=retro","type":"SIMPLE"},"metadata":{"bpm":162.0,"duration":215,"songName":"Back From The Dead","songSubName":"Skillet","songAuthorName":"KuritsaDBS","levelAuthorName":"KuritsaDBS"},"stats":{"plays":0,"downloads":844,"upvotes":601,"downvotes":8,"score":0.9162},"uploaded":"2018-12-11T14:24:33Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"baa01d357ac94cdca55972aa6c925709e4595850","key":"2529","state":"Published","createdAt":"2018-12-11T14:24:33Z","sageScore":4,"diffs":[{"njs":14.0,"offset":0.0,"notes":593,"bombs":44,"obstacles":107,"nps":2.911,"length":550.0,"characteristic":"Standard","difficulty":"Expert","events":754,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":203.704,"paritySummary":{"errors":33,"warns":51,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/baa01d357ac94cdca55972aa6c925709e4595850.zip","coverURL":"https://cdn.beatsaver.com/baa01d357ac94cdca55972aa6c925709e4595850.jpg","previewURL":"https://cdn.beatsaver.com/baa01d357ac94cdca55972aa6c925709e4595850.mp3"}],"createdAt":"2018-12-11T14:24:33Z","updatedAt":"2018-12-11T14:24:33Z","lastPublishedAt":"2018-12-11T14:24:33Z"},{"id":"1897","name":"Song of the Ancients / Fate - NieR Gestalt & Replicant Original Soundtrack","description":"\"It's like I just found something special. Something very special.\"\r\n\r\n128BPM / 4:52 Runtime\r\nHard / 758 Notes\r\nExpert / 994 Notes\r\nExpert+ / 1108 Notes\r\n\r\nGameplay:\r\nhttps://youtu.be/0r-UkakLCwU\r\nListen to the song:\r\nhttps://www.youtube.com/watch?v=ady--PNMsfI\r\n\r\nI thought the amazing game, NieR Gestalt/Replicant, needed an amazing beat map to go with it. This song was a perfect fit :)\r\n[UPDATE]\r\nSomebody pointed out there was a mapping error during the acoustic guitar section. It's fixed.","uploader":{"id":4284981,"name":"skylerwallace","uniqueSet":true,"hash":"5cff0b7298cc5a672c84ea67","avatar":"https://cdn.beatsaver.com/avatar/398344856868487168.png","type":"DISCORD"},"metadata":{"bpm":128.0,"duration":292,"songName":"Song of the Ancients / Fate","songSubName":"NieR OST","songAuthorName":"Skyler Wallace","levelAuthorName":"skylerwallace"},"stats":{"plays":0,"downloads":1672,"upvotes":860,"downvotes":19,"score":0.9162},"uploaded":"2018-10-04T00:33:41Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"4638d271b9974ec5bb851bb8629976078e781c97","key":"1897","state":"Published","createdAt":"2018-10-04T00:33:41Z","sageScore":6,"diffs":[{"njs":10.0,"offset":0.0,"notes":758,"bombs":0,"obstacles":16,"nps":2.622,"length":616.0,"characteristic":"Standard","difficulty":"Hard","events":3742,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":288.75,"paritySummary":{"errors":81,"warns":73,"resets":0}},{"njs":12.0,"offset":0.0,"notes":994,"bombs":8,"obstacles":32,"nps":3.439,"length":616.0,"characteristic":"Standard","difficulty":"Expert","events":3742,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":288.75,"paritySummary":{"errors":55,"warns":40,"resets":0}},{"njs":12.0,"offset":0.0,"notes":1108,"bombs":8,"obstacles":32,"nps":3.833,"length":616.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":3742,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":288.75,"paritySummary":{"errors":65,"warns":47,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/4638d271b9974ec5bb851bb8629976078e781c97.zip","coverURL":"https://cdn.beatsaver.com/4638d271b9974ec5bb851bb8629976078e781c97.jpg","previewURL":"https://cdn.beatsaver.com/4638d271b9974ec5bb851bb8629976078e781c97.mp3"}],"createdAt":"2018-10-04T00:33:41Z","updatedAt":"2018-10-04T00:33:41Z","lastPublishedAt":"2018-10-04T00:33:41Z"},{"id":"9a36","name":"[Tokyo Machine Pack] Tokyo Machine - PLAY","description":"4/6\nPart of the Tokyo Machine Pack, a collab between Firestrike, Cyansnow and I.\nMap by me, lights by FireStrike.\n\nFireStrike's account: https://beatsaver.com/uploader/5cff0b7698cc5a672c85479f\nCyanSnow's account: https://beatsaver.com/uploader/5cff0b7698cc5a672c8543ac\n\nPlaylist: https://bsaber.com/tokyo-machine-pack/\n\nCheck out the trailer for the pack here: https://www.youtube.com/watch?v=lStPUnecsD8","uploader":{"id":57657,"name":"pixelguymm","uniqueSet":true,"hash":"5cff0b7698cc5a672c8541a8","avatar":"https://cdn.beatsaver.com/avatar/434386941547511818.png","type":"DISCORD"},"metadata":{"bpm":128.0,"duration":185,"songName":"PLAY","songSubName":"","songAuthorName":"Tokyo Machine","levelAuthorName":"FireStrike & Pixel"},"stats":{"plays":0,"downloads":1813,"upvotes":598,"downvotes":8,"score":0.9161},"uploaded":"2020-04-12T18:07:52.070Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"a9e447b8ea158c2b68f546935f704b270277f7f8","key":"9a36","state":"Published","createdAt":"2020-04-12T18:07:52.070Z","sageScore":5,"diffs":[{"njs":16.0,"offset":-0.3,"notes":754,"bombs":43,"obstacles":0,"nps":4.189,"length":384.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":4444,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":180.0,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/a9e447b8ea158c2b68f546935f704b270277f7f8.zip","coverURL":"https://cdn.beatsaver.com/a9e447b8ea158c2b68f546935f704b270277f7f8.jpg","previewURL":"https://cdn.beatsaver.com/a9e447b8ea158c2b68f546935f704b270277f7f8.mp3"}],"createdAt":"2020-04-12T18:07:52.070Z","updatedAt":"2020-04-12T18:07:52.070Z","lastPublishedAt":"2020-04-12T18:07:52.070Z"},{"id":"8108","name":"[Noodlegames] Ephixa - Wisdom (Zelda's Lullaby)","description":"The Ramen Noodle group is here to bring you a map pack full of our favorite video game soundtracks and game-inspired music! Ephixa's wonderful remix of Zelda's Lullaby is iconic, and a fantastic way to honor the beautiful rhythms in Ocarina of Time.","uploader":{"id":4284569,"name":"checkthepan","uniqueSet":true,"hash":"5cff0b7398cc5a672c84f3d5","avatar":"https://cdn.beatsaver.com/avatar/184355369189900290.png","type":"DISCORD"},"metadata":{"bpm":140.0,"duration":241,"songName":"Wisdom (Zelda's Lullaby Link to the Future) ","songSubName":"[feat. Will & Tim] [From Legend of Zelda: Ocarina of Time]","songAuthorName":"Ephixa","levelAuthorName":"Checkthepan"},"stats":{"plays":0,"downloads":2384,"upvotes":696,"downvotes":12,"score":0.9161},"uploaded":"2020-01-24T23:15:35.818Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"a603656eb8cdadcb6eda85ef408902c1f6125a8f","key":"8108","state":"Published","createdAt":"2020-01-24T23:15:35.818Z","sageScore":3,"diffs":[{"njs":11.0,"offset":0.25,"notes":331,"bombs":0,"obstacles":28,"nps":1.43,"length":540.031,"characteristic":"Standard","difficulty":"Normal","events":13016,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":231.442,"paritySummary":{"errors":77,"warns":4,"resets":0}},{"njs":13.0,"offset":0.25,"notes":560,"bombs":16,"obstacles":26,"nps":2.42,"length":540.031,"characteristic":"Standard","difficulty":"Hard","events":13016,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":231.442,"paritySummary":{"errors":1,"warns":1,"resets":3}},{"njs":16.0,"offset":0.0,"notes":769,"bombs":24,"obstacles":26,"nps":3.323,"length":540.031,"characteristic":"Standard","difficulty":"Expert","events":13016,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":231.442,"paritySummary":{"errors":1,"warns":0,"resets":3}},{"njs":19.0,"offset":-0.25,"notes":930,"bombs":65,"obstacles":26,"nps":4.018,"length":540.031,"characteristic":"Standard","difficulty":"ExpertPlus","events":13016,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":231.442,"paritySummary":{"errors":1,"warns":0,"resets":13}}],"downloadURL":"https://cdn.beatsaver.com/a603656eb8cdadcb6eda85ef408902c1f6125a8f.zip","coverURL":"https://cdn.beatsaver.com/a603656eb8cdadcb6eda85ef408902c1f6125a8f.jpg","previewURL":"https://cdn.beatsaver.com/a603656eb8cdadcb6eda85ef408902c1f6125a8f.mp3"}],"createdAt":"2020-01-24T23:15:35.818Z","updatedAt":"2020-01-24T23:15:35.818Z","lastPublishedAt":"2020-01-24T23:15:35.818Z"},{"id":"4227","name":"Aladdin - A Whole New World","description":"This song makes me smile. Such a classic Disney song.\r\nAdded easy and normal difficulties. Hard is a bit slower now . Expert is the same speed as the previous upload.","uploader":{"id":4285018,"name":"majorpickle","uniqueSet":true,"hash":"5cff0b7398cc5a672c84f792","avatar":"https://cdn.beatsaver.com/avatar/450358937657671680.png","type":"DISCORD"},"metadata":{"bpm":123.0,"duration":162,"songName":"A Whole New World (From Disney's ''Aladdin'')","songSubName":"Lea Salonga & Brad Kane","songAuthorName":"Majorpickle","levelAuthorName":"majorpickle"},"stats":{"plays":0,"downloads":5615,"upvotes":1291,"downvotes":40,"score":0.9161},"uploaded":"2019-03-30T22:52:43Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"882f3fd9b97b4ce107c1e9e1f944c491b86c47fe","key":"4227","state":"Published","createdAt":"2019-03-30T22:52:43Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":236,"bombs":0,"obstacles":118,"nps":1.591,"length":304.0,"characteristic":"Standard","difficulty":"Easy","events":540,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":148.293,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":10.0,"offset":0.0,"notes":242,"bombs":0,"obstacles":117,"nps":1.631,"length":304.0,"characteristic":"Standard","difficulty":"Normal","events":540,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":148.293,"paritySummary":{"errors":22,"warns":0,"resets":0}},{"njs":10.0,"offset":0.0,"notes":420,"bombs":0,"obstacles":85,"nps":2.83,"length":304.125,"characteristic":"Standard","difficulty":"Hard","events":539,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":148.354,"paritySummary":{"errors":12,"warns":11,"resets":0}},{"njs":11.0,"offset":0.0,"notes":420,"bombs":0,"obstacles":85,"nps":2.83,"length":304.125,"characteristic":"Standard","difficulty":"Expert","events":539,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":148.354,"paritySummary":{"errors":12,"warns":11,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/882f3fd9b97b4ce107c1e9e1f944c491b86c47fe.zip","coverURL":"https://cdn.beatsaver.com/882f3fd9b97b4ce107c1e9e1f944c491b86c47fe.jpg","previewURL":"https://cdn.beatsaver.com/882f3fd9b97b4ce107c1e9e1f944c491b86c47fe.mp3"}],"createdAt":"2019-03-30T22:52:43Z","updatedAt":"2019-03-30T22:52:43Z","lastPublishedAt":"2019-03-30T22:52:43Z"},{"id":"2569","name":"Celtic Woman - Carol Of The Bells","description":"Hard/Expert | BPM: 190 | Length: 2:18 | Notes: 333/560\r\n\r\nMerry Christmas and Happy Holidays! \r\nHad fun charting this one, I hope you have fun playing it :D\r\n\r\n16th Map.\r\n\r\nPreview:\r\nhttps://www.youtube.com/watch?v=zh9-XC1D5aU","uploader":{"id":4285825,"name":"fefeland","uniqueSet":true,"hash":"5cff0b7398cc5a672c84f3bb","avatar":"https://cdn.beatsaver.com/avatar/119360573191225344.png","type":"DISCORD"},"metadata":{"bpm":190.0,"duration":139,"songName":"Carol Of The Bells","songSubName":"Celtic Woman","songAuthorName":"FEFELAND","levelAuthorName":"fefeland"},"stats":{"plays":0,"downloads":1307,"upvotes":598,"downvotes":8,"score":0.9161},"uploaded":"2018-12-13T02:40:05Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"1df1374196f03c9bba1aed018e3de2595f79dce1","key":"2569","state":"Published","createdAt":"2018-12-13T02:40:05Z","sageScore":5,"diffs":[{"njs":12.0,"offset":0.0,"notes":333,"bombs":0,"obstacles":101,"nps":2.491,"length":423.375,"characteristic":"Standard","difficulty":"Hard","events":790,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":133.697,"paritySummary":{"errors":20,"warns":18,"resets":0}},{"njs":15.0,"offset":0.0,"notes":560,"bombs":0,"obstacles":105,"nps":4.189,"length":423.375,"characteristic":"Standard","difficulty":"Expert","events":790,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":133.697,"paritySummary":{"errors":15,"warns":9,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/1df1374196f03c9bba1aed018e3de2595f79dce1.zip","coverURL":"https://cdn.beatsaver.com/1df1374196f03c9bba1aed018e3de2595f79dce1.jpg","previewURL":"https://cdn.beatsaver.com/1df1374196f03c9bba1aed018e3de2595f79dce1.mp3"}],"createdAt":"2018-12-13T02:40:05Z","updatedAt":"2018-12-13T02:40:05Z","lastPublishedAt":"2018-12-13T02:40:05Z"},{"id":"16894","name":"Joe Hisaishi - Merry-Go-Round (from 'Howl's Moving Castle')","description":"The popular theme from Studio Ghibli's 'Howl's Moving Castle'. Version from Joe Hisaishi's 'Dream Songs' album.\n\nThanks to Cyrix and vaser888 for early testplays, Timbo and Uninstaller for the excellent mods, and Qwasyx for further suggestions for improvement.\n\nZelazowa#3625","uploader":{"id":4284834,"name":"zelazowa","uniqueSet":true,"hash":"5ea5367d16c968000632663c","avatar":"https://cdn.beatsaver.com/avatar/94962140443578368.png","type":"DISCORD"},"metadata":{"bpm":160.0,"duration":312,"songName":"Merry-Go-Round","songSubName":"(from 'Howl's Moving Castle')","songAuthorName":"Joe Hisaishi","levelAuthorName":"Zelazowa"},"stats":{"plays":0,"downloads":5833,"upvotes":813,"downvotes":17,"score":0.9161},"uploaded":"2021-04-11T02:32:37.687Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"d30db93f2c3c5a152b84ca364a691ef10c4efdb9","key":"16894","state":"Published","createdAt":"2021-04-11T02:32:37.687Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":441,"bombs":0,"obstacles":94,"nps":1.459,"length":806.257,"characteristic":"Standard","difficulty":"Easy","events":1833,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":302.346,"paritySummary":{"errors":169,"warns":8,"resets":0},"stars":0.91},{"njs":12.0,"offset":-0.75,"notes":594,"bombs":0,"obstacles":83,"nps":1.964,"length":806.324,"characteristic":"Standard","difficulty":"Normal","events":1833,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":302.372,"paritySummary":{"errors":9,"warns":4,"resets":0},"stars":1.22},{"njs":14.0,"offset":0.75,"notes":847,"bombs":0,"obstacles":34,"nps":2.801,"length":806.324,"characteristic":"Standard","difficulty":"Hard","events":1834,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":302.372,"paritySummary":{"errors":0,"warns":0,"resets":0},"stars":1.71},{"njs":16.0,"offset":0.25,"notes":1075,"bombs":0,"obstacles":30,"nps":3.555,"length":806.392,"characteristic":"Standard","difficulty":"Expert","events":1834,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":302.397,"paritySummary":{"errors":0,"warns":0,"resets":0},"stars":2.47},{"njs":18.0,"offset":-0.1,"notes":1236,"bombs":0,"obstacles":18,"nps":4.088,"length":806.257,"characteristic":"Standard","difficulty":"ExpertPlus","events":1833,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":302.346,"paritySummary":{"errors":0,"warns":0,"resets":0},"stars":5.0}],"downloadURL":"https://cdn.beatsaver.com/d30db93f2c3c5a152b84ca364a691ef10c4efdb9.zip","coverURL":"https://cdn.beatsaver.com/d30db93f2c3c5a152b84ca364a691ef10c4efdb9.jpg","previewURL":"https://cdn.beatsaver.com/d30db93f2c3c5a152b84ca364a691ef10c4efdb9.mp3"}],"createdAt":"2021-04-11T02:32:37.687Z","updatedAt":"2021-04-11T02:32:37.687Z","lastPublishedAt":"2021-04-11T02:32:37.687Z"},{"id":"c213","name":"Pegboard Nerds - Rhythm Is A Dancer (ft. Tia Simone)","description":"The Pegboard Nerds Pack was planned months before I joined AlphaBeat, so obviously I wasn't planned in for it. \n\nI still felt like mapping a Pegboard Nerds song and the new track from the Monstercat Anniversary seemed like a good fit. You could see this as some kind of bonus map for the Pack, but it wont be included in the Playlist, because having 11 songs instead of 10 feels weird. \n\nIt's not as fleshed out as the maps in the Pack because I only joined a few days ago and wanted to release this around the same time the Pack comes out.\n\nI hope you enjoy it nevertheless!\n\nPreview: https://youtu.be/HEr8pkcDM7M\n\nFeedback on Discord: nitronik.exe#7974","uploader":{"id":4284201,"name":"nitronikexe","uniqueSet":true,"hash":"5cff0b7798cc5a672c855d84","avatar":"https://cdn.beatsaver.com/avatar/428230049704181760.png","type":"DISCORD"},"metadata":{"bpm":128.0,"duration":225,"songName":"Rhythm Is A Dancer","songSubName":"(ft. Tia Simone)","songAuthorName":"Pegboard Nerds","levelAuthorName":"nitronik.exe"},"stats":{"plays":0,"downloads":2515,"upvotes":942,"downvotes":23,"score":0.916},"uploaded":"2020-07-17T14:05:23.854Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"3255f65dd6a7d4dd3c9c1cb800e854d58f5d2e88","key":"c213","state":"Published","createdAt":"2020-07-17T14:05:23.854Z","sageScore":6,"diffs":[{"njs":10.0,"offset":1.0,"notes":185,"bombs":0,"obstacles":0,"nps":0.851,"length":464.0,"characteristic":"Standard","difficulty":"Easy","events":3954,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":217.5,"paritySummary":{"errors":69,"warns":10,"resets":0}},{"njs":12.0,"offset":0.5,"notes":328,"bombs":0,"obstacles":0,"nps":1.508,"length":464.0,"characteristic":"Standard","difficulty":"Normal","events":3954,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":217.5,"paritySummary":{"errors":6,"warns":0,"resets":0}},{"njs":14.0,"offset":0.0,"notes":561,"bombs":0,"obstacles":0,"nps":2.561,"length":467.25,"characteristic":"Standard","difficulty":"Hard","events":3954,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":219.023,"paritySummary":{"errors":4,"warns":0,"resets":0}},{"njs":16.0,"offset":0.0,"notes":812,"bombs":0,"obstacles":0,"nps":3.707,"length":467.25,"characteristic":"Standard","difficulty":"Expert","events":3954,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":219.023,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":19.0,"offset":-0.5,"notes":1150,"bombs":0,"obstacles":2,"nps":5.251,"length":467.25,"characteristic":"Standard","difficulty":"ExpertPlus","events":3954,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":219.023,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/3255f65dd6a7d4dd3c9c1cb800e854d58f5d2e88.zip","coverURL":"https://cdn.beatsaver.com/3255f65dd6a7d4dd3c9c1cb800e854d58f5d2e88.jpg","previewURL":"https://cdn.beatsaver.com/3255f65dd6a7d4dd3c9c1cb800e854d58f5d2e88.mp3"}],"createdAt":"2020-07-17T14:05:23.854Z","updatedAt":"2020-07-17T14:05:23.854Z","lastPublishedAt":"2020-07-17T14:05:23.854Z"},{"id":"6e1f","name":"Good Times Roll - GRiZ x Big Gigantic","description":"Huge thanks to Awfulnaut for letting me use his existing Good Times Roll map to create this updated version. <3","uploader":{"id":4285169,"name":"ryger","uniqueSet":true,"hash":"5cff0b7798cc5a672c855a42","avatar":"https://cdn.beatsaver.com/avatar/169266024502263808.png","type":"DISCORD"},"metadata":{"bpm":200.0,"duration":146,"songName":"Good Times Roll","songSubName":"","songAuthorName":"Griz x Big Gigantic","levelAuthorName":"Awfulnaut, Ryger"},"stats":{"plays":0,"downloads":639,"upvotes":434,"downvotes":2,"score":0.916},"uploaded":"2019-11-04T02:30:11.352Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"6cb7b184a496b917739bc59a9012029ebb9e340c","key":"6e1f","state":"Published","createdAt":"2019-11-04T02:30:11.352Z","sageScore":4,"diffs":[{"njs":10.0,"offset":0.0,"notes":354,"bombs":0,"obstacles":11,"nps":2.551,"length":462.5,"characteristic":"Standard","difficulty":"Hard","events":1208,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":138.75,"paritySummary":{"errors":13,"warns":6,"resets":0}},{"njs":14.0,"offset":0.0,"notes":518,"bombs":0,"obstacles":12,"nps":3.733,"length":462.5,"characteristic":"Standard","difficulty":"Expert","events":1208,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":138.75,"paritySummary":{"errors":10,"warns":21,"resets":0}},{"njs":15.0,"offset":0.5,"notes":652,"bombs":0,"obstacles":10,"nps":4.679,"length":464.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":1208,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":139.35,"paritySummary":{"errors":33,"warns":19,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/6cb7b184a496b917739bc59a9012029ebb9e340c.zip","coverURL":"https://cdn.beatsaver.com/6cb7b184a496b917739bc59a9012029ebb9e340c.jpg","previewURL":"https://cdn.beatsaver.com/6cb7b184a496b917739bc59a9012029ebb9e340c.mp3"}],"createdAt":"2019-11-04T02:30:11.352Z","updatedAt":"2019-11-04T02:30:11.352Z","lastPublishedAt":"2019-11-04T02:30:11.352Z"},{"id":"5b95","name":"The Living Tombstone - I Can't Fix You","description":"This is probably on the easier end of Expert+ so it should be enjoyable for those looking to step up from Expert after a little practice. This song has officially been tested to oblivion, but I am happy to hear any feedback.\n\nDifficulty: Expert+\nBPM: 174\nNotes: 1212\nNJS: 15\nNPS: 4.65\nSong Duration: 4:21\n\nPreview video can be found here: https://youtu.be/EkcKRlikwMY\n\nSpecial Thanks to Kival Evan for their playtesting and feedback!","uploader":{"id":34679,"name":"lukemortora","uniqueSet":true,"hash":"5cff0b7798cc5a672c855c16","avatar":"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855c16?d=retro","type":"SIMPLE"},"metadata":{"bpm":174.0,"duration":261,"songName":"I Can't Fix You","songSubName":"","songAuthorName":"The Living Tombstone","levelAuthorName":"LukeMortora"},"stats":{"plays":0,"downloads":1353,"upvotes":1043,"downvotes":28,"score":0.9159},"uploaded":"2019-08-09T15:10:13.751Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"d074bc64340208a777eea440ba5e5a24f9d65d54","key":"5b95","state":"Published","createdAt":"2019-08-09T15:10:13.751Z","sageScore":6,"diffs":[{"njs":15.0,"offset":0.0,"notes":1212,"bombs":117,"obstacles":26,"nps":4.971,"length":707.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":2214,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":243.793,"paritySummary":{"errors":114,"warns":78,"resets":11}}],"downloadURL":"https://cdn.beatsaver.com/d074bc64340208a777eea440ba5e5a24f9d65d54.zip","coverURL":"https://cdn.beatsaver.com/d074bc64340208a777eea440ba5e5a24f9d65d54.jpg","previewURL":"https://cdn.beatsaver.com/d074bc64340208a777eea440ba5e5a24f9d65d54.mp3"}],"createdAt":"2019-08-09T15:10:13.751Z","updatedAt":"2019-08-09T15:10:13.751Z","lastPublishedAt":"2019-08-09T15:10:13.751Z"},{"id":"3c1d","name":"Sound of an Orchestra - MIKA","description":"Expert Playthrough : https://youtu.be/Ql0bAjfNQ5M","uploader":{"id":13320,"name":"novashaft","uniqueSet":true,"hash":"5cff0b7398cc5a672c84ee55","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee55?d=retro","type":"SIMPLE"},"metadata":{"bpm":127.0,"duration":180,"songName":"Sound Of An Orchestra","songSubName":"MIKA","songAuthorName":"NovaShaft","levelAuthorName":"novashaft"},"stats":{"plays":0,"downloads":2681,"upvotes":693,"downvotes":12,"score":0.9159},"uploaded":"2019-03-06T16:56:54Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"ab5ec7d8c0976c8acb1ed48889fce51666fabf45","key":"3c1d","state":"Published","createdAt":"2019-03-06T16:56:54Z","sageScore":5,"diffs":[{"njs":11.0,"offset":0.0,"notes":325,"bombs":0,"obstacles":24,"nps":1.869,"length":368.0,"characteristic":"Standard","difficulty":"Normal","events":869,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":173.858,"paritySummary":{"errors":18,"warns":7,"resets":0}},{"njs":13.0,"offset":0.0,"notes":386,"bombs":0,"obstacles":24,"nps":2.22,"length":368.0,"characteristic":"Standard","difficulty":"Hard","events":869,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":173.858,"paritySummary":{"errors":36,"warns":32,"resets":0}},{"njs":15.0,"offset":0.0,"notes":482,"bombs":0,"obstacles":24,"nps":2.772,"length":368.0,"characteristic":"Standard","difficulty":"Expert","events":869,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":173.858,"paritySummary":{"errors":40,"warns":45,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/ab5ec7d8c0976c8acb1ed48889fce51666fabf45.zip","coverURL":"https://cdn.beatsaver.com/ab5ec7d8c0976c8acb1ed48889fce51666fabf45.jpg","previewURL":"https://cdn.beatsaver.com/ab5ec7d8c0976c8acb1ed48889fce51666fabf45.mp3"}],"createdAt":"2019-03-06T16:56:54Z","updatedAt":"2019-03-06T16:56:54Z","lastPublishedAt":"2019-03-06T16:56:54Z"},{"id":"ae9d","name":"A Cruel Angel's Thesis [22/7 Soundtrack] - Sakura Fujima","description":"A Cruel Angel's Thesis (Zankoku na Tenshi no Thesis) as covered by Sakura Fujima (CV: Sally Amaki.) from 22/7. It was originally sung by Takahashi Yoko as the opening of the anime Neon Genesis Evangelion. ","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":128.0,"duration":92,"songName":"A Cruel Angel's Thesis","songSubName":"","songAuthorName":"Sakura Fujima","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":4289,"upvotes":1204,"downvotes":36,"score":0.9158},"uploaded":"2020-06-05T07:07:17.017Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"40e47564d01e50840b0aa9a3191ff09a2e5b56a1","key":"ae9d","state":"Published","createdAt":"2020-06-05T07:07:17.017Z","sageScore":4,"diffs":[{"njs":12.0,"offset":0.0,"notes":222,"bombs":0,"obstacles":32,"nps":2.536,"length":186.75,"characteristic":"Standard","difficulty":"Hard","events":2286,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":87.539,"paritySummary":{"errors":2,"warns":2,"resets":0}},{"njs":14.0,"offset":0.0,"notes":347,"bombs":0,"obstacles":32,"nps":3.932,"length":188.25,"characteristic":"Standard","difficulty":"Expert","events":2286,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":88.242,"paritySummary":{"errors":0,"warns":2,"resets":0}},{"njs":16.0,"offset":-0.2,"notes":413,"bombs":0,"obstacles":22,"nps":4.68,"length":188.25,"characteristic":"Standard","difficulty":"ExpertPlus","events":2280,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":88.242,"paritySummary":{"errors":0,"warns":3,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/40e47564d01e50840b0aa9a3191ff09a2e5b56a1.zip","coverURL":"https://cdn.beatsaver.com/40e47564d01e50840b0aa9a3191ff09a2e5b56a1.jpg","previewURL":"https://cdn.beatsaver.com/40e47564d01e50840b0aa9a3191ff09a2e5b56a1.mp3"}],"createdAt":"2020-06-05T07:07:17.017Z","updatedAt":"2020-06-05T07:07:17.017Z","lastPublishedAt":"2020-06-05T07:07:17.017Z"},{"id":"65b7","name":"My First Kiss - Nightcore","description":"Youtube Preview: https://youtu.be/KxdCEgDG-AI","uploader":{"id":23751,"name":"monteblanco","uniqueSet":true,"hash":"5cff0b7798cc5a672c855ef5","avatar":"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855ef5?d=retro","type":"SIMPLE"},"metadata":{"bpm":174.803,"duration":156,"songName":"My First Kiss - Nightcore","songSubName":"","songAuthorName":"Nightcore","levelAuthorName":"Monteblanco"},"stats":{"plays":0,"downloads":709,"upvotes":713,"downvotes":13,"score":0.9158},"uploaded":"2019-09-25T01:39:37.237Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"5723e29f0a39dcec76926c1fa8baf6e9a32c185b","key":"65b7","state":"Published","createdAt":"2019-09-25T01:39:37.237Z","sageScore":4,"diffs":[{"njs":15.0,"offset":0.0,"notes":623,"bombs":4,"obstacles":48,"nps":4.134,"length":439.0,"characteristic":"Standard","difficulty":"Expert","events":743,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":150.684,"paritySummary":{"errors":0,"warns":0,"resets":1}}],"downloadURL":"https://cdn.beatsaver.com/5723e29f0a39dcec76926c1fa8baf6e9a32c185b.zip","coverURL":"https://cdn.beatsaver.com/5723e29f0a39dcec76926c1fa8baf6e9a32c185b.jpg","previewURL":"https://cdn.beatsaver.com/5723e29f0a39dcec76926c1fa8baf6e9a32c185b.mp3"}],"createdAt":"2019-09-25T01:39:37.237Z","updatedAt":"2019-09-25T01:39:37.237Z","lastPublishedAt":"2019-09-25T01:39:37.237Z"},{"id":"4a4c","name":"[Anniversary] The Thrill - Nero, Porter Robinson [Ruckus]","description":"Part of the Anniversary Song Pack","uploader":{"id":37070,"name":"anniversaryteam","uniqueSet":true,"hash":"5cff0b7798cc5a672c8565a3","avatar":"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro","type":"SIMPLE"},"metadata":{"bpm":160.0,"duration":204,"songName":"The Thrill (Porter Robinson Remix)","songSubName":"NERO, Porter Robinson","songAuthorName":"Ruckus","levelAuthorName":"AnniversaryTeam"},"stats":{"plays":0,"downloads":2144,"upvotes":1321,"downvotes":42,"score":0.9158},"uploaded":"2019-05-03T14:13:21Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"68496811309fe62303edde686eb160f8e45aa9ce","key":"4a4c","state":"Published","createdAt":"2019-05-03T14:13:21Z","sageScore":7,"diffs":[{"njs":10.0,"offset":0.0,"notes":232,"bombs":0,"obstacles":70,"nps":1.197,"length":516.688,"characteristic":"Standard","difficulty":"Easy","events":9122,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":193.758,"paritySummary":{"errors":17,"warns":7,"resets":0}},{"njs":12.0,"offset":0.0,"notes":489,"bombs":0,"obstacles":60,"nps":2.524,"length":516.692,"characteristic":"Standard","difficulty":"Normal","events":9127,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":193.76,"paritySummary":{"errors":29,"warns":20,"resets":0}},{"njs":13.0,"offset":0.0,"notes":635,"bombs":0,"obstacles":64,"nps":3.274,"length":517.188,"characteristic":"Standard","difficulty":"Hard","events":9117,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":193.945,"paritySummary":{"errors":34,"warns":35,"resets":0}},{"njs":18.0,"offset":0.0,"notes":1128,"bombs":0,"obstacles":36,"nps":5.816,"length":517.188,"characteristic":"Standard","difficulty":"Expert","events":9117,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":193.945,"paritySummary":{"errors":36,"warns":35,"resets":0}},{"njs":20.0,"offset":0.0,"notes":1115,"bombs":0,"obstacles":46,"nps":5.749,"length":517.188,"characteristic":"Standard","difficulty":"ExpertPlus","events":9117,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":193.945,"paritySummary":{"errors":49,"warns":73,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/68496811309fe62303edde686eb160f8e45aa9ce.zip","coverURL":"https://cdn.beatsaver.com/68496811309fe62303edde686eb160f8e45aa9ce.jpg","previewURL":"https://cdn.beatsaver.com/68496811309fe62303edde686eb160f8e45aa9ce.mp3"}],"createdAt":"2019-05-03T14:13:21Z","updatedAt":"2019-05-03T14:13:21Z","lastPublishedAt":"2019-05-03T14:13:21Z"},{"id":"a692","name":"[Noodle Touhou] Tare - VOLUPTE","description":"Easy, normal, hard, expert, expert+\r\n\r\nThis map is part of the first Touhou map pack brought to you by the Ramen Noodle mapper group! It contains all sorts of covers, arrangements and remix of the original Touhou soundtrack. We hope you enjoy it a lot!","uploader":{"id":4235138,"name":"CyanSnow","uniqueSet":true,"hash":"5cff0b7698cc5a672c8543ac","avatar":"https://cdn.beatsaver.com/avatar/154341137694326784.png","type":"DISCORD"},"metadata":{"bpm":128.0,"duration":184,"songName":"VOLUPTE","songSubName":"","songAuthorName":"Tare","levelAuthorName":"Aeroluna & CyanSnow"},"stats":{"plays":0,"downloads":2792,"upvotes":638,"downvotes":10,"score":0.9156},"uploaded":"2020-05-15T18:20:58.233Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"01ce5a3adc19e360ba0ffd8347f91b5dc974eb7c","key":"a692","state":"Published","createdAt":"2020-05-15T18:20:58.233Z","sageScore":6,"diffs":[{"njs":12.0,"offset":0.5,"notes":254,"bombs":0,"obstacles":0,"nps":1.411,"length":384.0,"characteristic":"Standard","difficulty":"Easy","events":13825,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":180.0,"paritySummary":{"errors":6,"warns":0,"resets":0}},{"njs":12.0,"offset":0.5,"notes":404,"bombs":0,"obstacles":0,"nps":2.244,"length":384.0,"characteristic":"Standard","difficulty":"Normal","events":13825,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":180.0,"paritySummary":{"errors":1,"warns":0,"resets":0}},{"njs":13.0,"offset":0.25,"notes":541,"bombs":0,"obstacles":0,"nps":3.006,"length":384.0,"characteristic":"Standard","difficulty":"Hard","events":13825,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":180.0,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":16.0,"offset":-0.25,"notes":763,"bombs":0,"obstacles":0,"nps":4.236,"length":384.25,"characteristic":"Standard","difficulty":"Expert","events":13825,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":180.117,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":18.0,"offset":-0.5,"notes":1009,"bombs":0,"obstacles":0,"nps":5.602,"length":384.25,"characteristic":"Standard","difficulty":"ExpertPlus","events":13825,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":180.117,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/01ce5a3adc19e360ba0ffd8347f91b5dc974eb7c.zip","coverURL":"https://cdn.beatsaver.com/01ce5a3adc19e360ba0ffd8347f91b5dc974eb7c.jpg","previewURL":"https://cdn.beatsaver.com/01ce5a3adc19e360ba0ffd8347f91b5dc974eb7c.mp3"}],"createdAt":"2020-05-15T18:20:58.233Z","updatedAt":"2020-05-15T18:20:58.233Z","lastPublishedAt":"2020-05-15T18:20:58.233Z"},{"id":"9fab","name":"Doom Crossing: Eternal Horizons","description":"3 Difficulties Included! \n\nAnother side release of mine! This song's chorus is so catchy, it got stuck in my head for days! Also I've been playing a ton of Animal Crossing ^^ \n\nDoom Crossing: Eternal Horizons by The Chalkeaters ft. Natalia Natchan\n\nBPM: 160\n\nLights by Loloppe's autolighter, Lolighter! With some manual touch ups!","uploader":{"id":4289037,"name":"mystikmol","uniqueSet":true,"hash":"5cff0b7298cc5a672c84eb52","avatar":"https://cdn.beatsaver.com/avatar/67941140636114944.png","type":"DISCORD"},"metadata":{"bpm":160.0,"duration":83,"songName":"Doom Crossing: Eternal Horizons","songSubName":"Short ver.","songAuthorName":"The Chalkeaters ft. Natalia Natchan","levelAuthorName":"Mystikmol"},"stats":{"plays":0,"downloads":3574,"upvotes":1563,"downvotes":55,"score":0.9156},"uploaded":"2020-04-27T15:22:22.520Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"f8b391a5fd0922062f7e3c10ccc1967f91da20a2","key":"9fab","state":"Published","createdAt":"2020-04-27T15:22:22.520Z","sageScore":3,"diffs":[{"njs":12.0,"offset":0.0,"notes":153,"bombs":0,"obstacles":0,"nps":2.082,"length":196.0,"characteristic":"Standard","difficulty":"Normal","events":1926,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":73.5,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":15.0,"offset":0.0,"notes":261,"bombs":0,"obstacles":1,"nps":3.551,"length":196.0,"characteristic":"Standard","difficulty":"Hard","events":1926,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":73.5,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":20.0,"offset":0.0,"notes":491,"bombs":0,"obstacles":0,"nps":6.68,"length":196.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":1927,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":73.5,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/f8b391a5fd0922062f7e3c10ccc1967f91da20a2.zip","coverURL":"https://cdn.beatsaver.com/f8b391a5fd0922062f7e3c10ccc1967f91da20a2.jpg","previewURL":"https://cdn.beatsaver.com/f8b391a5fd0922062f7e3c10ccc1967f91da20a2.mp3"}],"createdAt":"2020-04-27T15:22:22.520Z","updatedAt":"2020-04-27T15:22:22.520Z","lastPublishedAt":"2020-04-27T15:22:22.520Z"},{"id":"12377","name":"Sangatsu no Phantasia - Pastel Rain","description":"use CHROMA mod for\n- cool lights\n- if you dont have chroma it'll just be greyed out PepeLaugh\n\nHappy New Years\n\nBPM | 135\nExpert+\nExpert\nHard\n\nThanks JohnnyDee for the playtest, what a qt\n\npreview: https://www.youtube.com/watch?v=hGq0EEsqgQQ\n\nthank you for playing\n\nDM any feedback on Discord\nETAN#8341","uploader":{"id":4235140,"name":"etan","uniqueSet":true,"hash":"5cff0b7798cc5a672c855775","avatar":"https://cdn.beatsaver.com/avatar/136373107559497728.png","type":"DISCORD"},"metadata":{"bpm":135.0,"duration":212,"songName":"Pastel Rain","songSubName":"","songAuthorName":"Sangatsu no Phantasia","levelAuthorName":"ETAN"},"stats":{"plays":0,"downloads":4912,"upvotes":776,"downvotes":16,"score":0.9155},"uploaded":"2021-01-03T08:08:53.577Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"2c01774fdb9c4bcc53df1707ade85cea6f043477","key":"12377","state":"Published","createdAt":"2021-01-03T08:08:53.577Z","sageScore":5,"diffs":[{"njs":12.0,"offset":0.5,"notes":576,"bombs":0,"obstacles":58,"nps":2.775,"length":467.0,"characteristic":"Standard","difficulty":"Hard","events":16659,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":207.556,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":15.0,"offset":0.0,"notes":882,"bombs":0,"obstacles":58,"nps":4.249,"length":467.0,"characteristic":"Standard","difficulty":"Expert","events":16659,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":207.556,"paritySummary":{"errors":0,"warns":1,"resets":0}},{"njs":19.0,"offset":-0.5,"notes":1180,"bombs":0,"obstacles":57,"nps":5.685,"length":467.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":16659,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":207.556,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/2c01774fdb9c4bcc53df1707ade85cea6f043477.zip","coverURL":"https://cdn.beatsaver.com/2c01774fdb9c4bcc53df1707ade85cea6f043477.jpg","previewURL":"https://cdn.beatsaver.com/2c01774fdb9c4bcc53df1707ade85cea6f043477.mp3"}],"createdAt":"2021-01-03T08:08:53.577Z","updatedAt":"2021-01-03T08:08:53.577Z","lastPublishedAt":"2021-01-03T08:08:53.577Z"},{"id":"1814","name":"Ghost","description":"???? ???? ? ????? ???? ?????????~\r\n\r\nEDIT: Fixed a double-down note.","uploader":{"id":10509,"name":"krydar","uniqueSet":true,"hash":"5cff0b7398cc5a672c84fe84","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84fe84?d=retro","type":"SIMPLE"},"metadata":{"bpm":120.0,"duration":262,"songName":"Ghost","songSubName":"Mystery Skulls","songAuthorName":"Kry","levelAuthorName":"Krydar"},"stats":{"plays":0,"downloads":509,"upvotes":1012,"downvotes":27,"score":0.9155},"uploaded":"2018-09-30T15:03:57Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"9430ecb46ce581ac51481d3a61e6fe3356dd4e61","key":"1814","state":"Published","createdAt":"2018-09-30T15:03:57Z","sageScore":5,"diffs":[{"njs":14.0,"offset":0.0,"notes":847,"bombs":0,"obstacles":138,"nps":3.785,"length":447.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":2331,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":223.75,"paritySummary":{"errors":35,"warns":17,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/9430ecb46ce581ac51481d3a61e6fe3356dd4e61.zip","coverURL":"https://cdn.beatsaver.com/9430ecb46ce581ac51481d3a61e6fe3356dd4e61.jpg","previewURL":"https://cdn.beatsaver.com/9430ecb46ce581ac51481d3a61e6fe3356dd4e61.mp3"}],"createdAt":"2018-09-30T15:03:57Z","updatedAt":"2018-09-30T15:03:57Z","lastPublishedAt":"2018-09-30T15:03:57Z"},{"id":"6773","name":"Survive Said The Prophet - MUKANJYO - Vinland Saga OP song","description":"Youtube Preview: https://youtu.be/EHrf40IwTR8","uploader":{"id":23751,"name":"monteblanco","uniqueSet":true,"hash":"5cff0b7798cc5a672c855ef5","avatar":"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855ef5?d=retro","type":"SIMPLE"},"metadata":{"bpm":190.0,"duration":188,"songName":"Survive Said The Prophet","songSubName":"","songAuthorName":"MUKANJYO","levelAuthorName":"Monteblanco"},"stats":{"plays":0,"downloads":924,"upvotes":561,"downvotes":7,"score":0.9154},"uploaded":"2019-10-03T00:15:52.884Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"cee8a59f1ec8c8cd4672c5428dda6999777870ff","key":"6773","state":"Published","createdAt":"2019-10-03T00:15:52.884Z","sageScore":5,"diffs":[{"njs":16.0,"offset":0.0,"notes":975,"bombs":8,"obstacles":6,"nps":5.305,"length":582.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":1135,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":183.789,"paritySummary":{"errors":0,"warns":0,"resets":1}}],"downloadURL":"https://cdn.beatsaver.com/cee8a59f1ec8c8cd4672c5428dda6999777870ff.zip","coverURL":"https://cdn.beatsaver.com/cee8a59f1ec8c8cd4672c5428dda6999777870ff.jpg","previewURL":"https://cdn.beatsaver.com/cee8a59f1ec8c8cd4672c5428dda6999777870ff.mp3"}],"createdAt":"2019-10-03T00:15:52.884Z","updatedAt":"2019-10-03T00:15:52.884Z","lastPublishedAt":"2019-10-03T00:15:52.884Z"},{"id":"5281","name":"TheFatRat & Phaera - Sunlight","description":"Aww Yeah, it's glitch-hop baby! Colors of the map are Orange(ish) and Dark Blue (similar to the cover image). I had a lot of fun making this map and I hope you enjoy as well!\r\n\r\nPreview: https://www.youtube.com/watch?v=MLAjVcqpBlY","uploader":{"id":57657,"name":"pixelguymm","uniqueSet":true,"hash":"5cff0b7698cc5a672c8541a8","avatar":"https://cdn.beatsaver.com/avatar/434386941547511818.png","type":"DISCORD"},"metadata":{"bpm":106.0,"duration":171,"songName":"Sunlight","songSubName":"TheFatRat & Phaera","songAuthorName":"Pixelguy","levelAuthorName":"pixelguymm"},"stats":{"plays":0,"downloads":701,"upvotes":586,"downvotes":8,"score":0.9154},"uploaded":"2019-06-09T06:35:30Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"2d0ba779b5c8217f06a4c1267e8d872d4b46a4bb","key":"5281","state":"Published","createdAt":"2019-06-09T06:35:30Z","sageScore":4,"diffs":[{"njs":14.0,"offset":0.0,"notes":644,"bombs":8,"obstacles":36,"nps":3.954,"length":287.75,"characteristic":"Standard","difficulty":"Expert","events":814,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":162.877,"paritySummary":{"errors":2,"warns":2,"resets":4}}],"downloadURL":"https://cdn.beatsaver.com/2d0ba779b5c8217f06a4c1267e8d872d4b46a4bb.zip","coverURL":"https://cdn.beatsaver.com/2d0ba779b5c8217f06a4c1267e8d872d4b46a4bb.jpg","previewURL":"https://cdn.beatsaver.com/2d0ba779b5c8217f06a4c1267e8d872d4b46a4bb.mp3"}],"createdAt":"2019-06-09T06:35:30Z","updatedAt":"2019-06-09T06:35:30Z","lastPublishedAt":"2019-06-09T06:35:30Z"},{"id":"553e","name":"Happy Together (V2)","description":"Old map was borked since the last update, so here is a remade version, some patterns changed for more smooth, hard difficulty added.\n\nLights will feel old compare to what I do now","uploader":{"id":4235153,"name":"skeelie","uniqueSet":true,"hash":"5cff0b7698cc5a672c85507f","avatar":"https://cdn.beatsaver.com/avatar/119467937928052748.png","type":"DISCORD"},"metadata":{"bpm":121.2,"duration":173,"songName":"Happy Together","songSubName":"","songAuthorName":"The Turtles","levelAuthorName":"Skeelie"},"stats":{"plays":0,"downloads":3463,"upvotes":656,"downvotes":11,"score":0.9153},"uploaded":"2019-07-01T16:58:53.827Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"99d1d214dde61f736d5efd47da936476a5bd1e4e","key":"553e","state":"Published","createdAt":"2019-07-01T16:58:53.827Z","sageScore":3,"diffs":[{"njs":11.0,"offset":0.0,"notes":412,"bombs":0,"obstacles":0,"nps":2.515,"length":330.966,"characteristic":"Standard","difficulty":"Hard","events":2137,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":163.845,"paritySummary":{"errors":32,"warns":17,"resets":0}},{"njs":13.0,"offset":0.0,"notes":580,"bombs":0,"obstacles":0,"nps":3.54,"length":330.966,"characteristic":"Standard","difficulty":"Expert","events":2137,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":163.845,"paritySummary":{"errors":52,"warns":26,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/99d1d214dde61f736d5efd47da936476a5bd1e4e.zip","coverURL":"https://cdn.beatsaver.com/99d1d214dde61f736d5efd47da936476a5bd1e4e.jpg","previewURL":"https://cdn.beatsaver.com/99d1d214dde61f736d5efd47da936476a5bd1e4e.mp3"}],"createdAt":"2019-07-01T16:58:53.827Z","updatedAt":"2019-07-01T16:58:53.827Z","lastPublishedAt":"2019-07-01T16:58:53.827Z"},{"id":"540b","name":"Keep The Rave Alive - Jauz x Laser Laser Laser (collab w/Heisenberg)","description":"Requires Mapping Extensions Mod. Do not use Left-Handed/Mirror mode!\n\n128 BPM / 5:00 Runtime\nHard - 488 Notes\nExpert - 794 Notes\nExpert+ - 1157 Notes\n\nGameplay: https://youtu.be/lxfCwV_NZCA","uploader":{"id":4284981,"name":"skylerwallace","uniqueSet":true,"hash":"5cff0b7298cc5a672c84ea67","avatar":"https://cdn.beatsaver.com/avatar/398344856868487168.png","type":"DISCORD"},"metadata":{"bpm":128.0,"duration":300,"songName":"Keep The Rave Alive","songSubName":"Lazer Lazer Lazer","songAuthorName":"Jauz","levelAuthorName":"Skyler Wallace & Heisenberg"},"stats":{"plays":0,"downloads":2589,"upvotes":1571,"downvotes":56,"score":0.9153},"uploaded":"2019-06-22T18:12:49.515Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"511bfb7e192faa0615691c4e4e8d21bc162a84cf","key":"540b","state":"Published","createdAt":"2019-06-22T18:12:49.515Z","sageScore":8,"diffs":[{"njs":12.0,"offset":1.0,"notes":488,"bombs":0,"obstacles":1105,"nps":1.712,"length":608.0,"characteristic":"Standard","difficulty":"Hard","events":16325,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":285.0,"paritySummary":{"errors":74,"warns":77,"resets":0}},{"njs":16.0,"offset":0.0,"notes":794,"bombs":8,"obstacles":1105,"nps":2.786,"length":608.0,"characteristic":"Standard","difficulty":"Expert","events":16325,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":285.0,"paritySummary":{"errors":51,"warns":62,"resets":4}},{"njs":16.0,"offset":0.0,"notes":1157,"bombs":0,"obstacles":1105,"nps":4.06,"length":608.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":16325,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":285.0,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":19.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"Lightshow","difficulty":"Easy","events":16325,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":19.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":1105,"nps":0.0,"length":0.0,"characteristic":"Lightshow","difficulty":"Normal","events":16325,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/511bfb7e192faa0615691c4e4e8d21bc162a84cf.zip","coverURL":"https://cdn.beatsaver.com/511bfb7e192faa0615691c4e4e8d21bc162a84cf.jpg","previewURL":"https://cdn.beatsaver.com/511bfb7e192faa0615691c4e4e8d21bc162a84cf.mp3"}],"createdAt":"2019-06-22T18:12:49.515Z","updatedAt":"2019-06-22T18:12:49.515Z","lastPublishedAt":"2019-06-22T18:12:49.515Z"},{"id":"321d","name":"Black Bullet [Black Bullet Opening] - fripSide","description":"Black Bullet, the opening song for the anime of the same name by Fripside!","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":155.0,"duration":262,"songName":"Black Bullet","songSubName":"FripSide","songAuthorName":"Joetastic","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":1907,"upvotes":880,"downvotes":21,"score":0.9152},"uploaded":"2019-01-29T15:26:42Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"9e25062d995e1e0958b4eba4e7ba56f053e00b2c","key":"321d","state":"Published","createdAt":"2019-01-29T15:26:42Z","sageScore":6,"diffs":[{"njs":15.0,"offset":0.0,"notes":1252,"bombs":0,"obstacles":44,"nps":4.878,"length":663.0,"characteristic":"Standard","difficulty":"Expert","events":3992,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":256.645,"paritySummary":{"errors":80,"warns":87,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/9e25062d995e1e0958b4eba4e7ba56f053e00b2c.zip","coverURL":"https://cdn.beatsaver.com/9e25062d995e1e0958b4eba4e7ba56f053e00b2c.jpg","previewURL":"https://cdn.beatsaver.com/9e25062d995e1e0958b4eba4e7ba56f053e00b2c.mp3"}],"createdAt":"2019-01-29T15:26:42Z","updatedAt":"2019-01-29T15:26:42Z","lastPublishedAt":"2019-01-29T15:26:42Z"},{"id":"1e9b","name":"Du Hast by Rammstein (Kole Edit) [One Saber]","description":"UPDATED 6th november 2018: There were some misdirected notes and some minor flow issues that has now been corrected.You should now be able to get Full Combo much more intuitively! Please download again if you've played the map before as the scoreboards are reset. Sorry for the trouble!\r\n\r\nCan't have enough of Du Hast by Rammstein? Good! Cause here is a One Saber version of that song! If you play the regular (Dual Saber) version of this map then you'll find it familiar to that version.\r\n\r\nSong has been edited (shortened) to be tighter and not too repetitive.\r\n\r\n!! ONE SABER MODE MAP, start it from the ONE SABER MENU for best experience! !!\r\n\r\nPreview:\r\nhttps://youtu.be/wTAUDviTUcQ\r\n\r\nBPM: 125.09\r\nDuration: 2:57\r\nHard, Expert and Expert+ difficulties.\r\n\r\nHard: 331 notes, 0 obstacles, 0 mines\r\nExpert: 502 notes, 0 obstacles, 0 mines\r\nExpert+: 646 notes, 0 obstacles, 0 mines\r\n\r\nThanks to Hen Tie, ManDynasty, Red Magi and Civ for playtesting!\r\n\r\nRegular (Dual Saber) version here:\r\nhttps://beatsaver.com/browse/detail/6707-6348\r\n\r\nEnjoy!","uploader":{"id":4285318,"name":"kolezan","uniqueSet":true,"hash":"5cff0b7398cc5a672c84fcbb","avatar":"https://cdn.beatsaver.com/avatar/220513618763055106.png","type":"DISCORD"},"metadata":{"bpm":125.0,"duration":177,"songName":"Du Hast (One Saber)","songSubName":"Rammstein","songAuthorName":"Level by Kolezan","levelAuthorName":"Kolezan"},"stats":{"plays":0,"downloads":2751,"upvotes":879,"downvotes":21,"score":0.9152},"uploaded":"2018-11-06T21:46:57Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"e6cb01196d2256586c805df1baf910f8036005a7","key":"1e9b","state":"Published","createdAt":"2018-11-06T21:46:57Z","sageScore":4,"diffs":[{"njs":12.0,"offset":0.0,"notes":331,"bombs":0,"obstacles":0,"nps":1.96,"length":352.0,"characteristic":"OneSaber","difficulty":"Hard","events":581,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":168.96,"paritySummary":{"errors":40,"warns":38,"resets":0}},{"njs":12.0,"offset":0.0,"notes":501,"bombs":0,"obstacles":0,"nps":2.967,"length":352.0,"characteristic":"OneSaber","difficulty":"Expert","events":581,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":168.96,"paritySummary":{"errors":42,"warns":50,"resets":0}},{"njs":12.0,"offset":0.0,"notes":643,"bombs":0,"obstacles":0,"nps":3.808,"length":352.0,"characteristic":"OneSaber","difficulty":"ExpertPlus","events":581,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":168.96,"paritySummary":{"errors":47,"warns":51,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/e6cb01196d2256586c805df1baf910f8036005a7.zip","coverURL":"https://cdn.beatsaver.com/e6cb01196d2256586c805df1baf910f8036005a7.jpg","previewURL":"https://cdn.beatsaver.com/e6cb01196d2256586c805df1baf910f8036005a7.mp3"}],"createdAt":"2018-11-06T21:46:57Z","updatedAt":"2018-11-06T21:46:57Z","lastPublishedAt":"2018-11-06T21:46:57Z"},{"id":"68a4","name":"Paramore - Misery Business","description":"A true story about the hardships of young love, from one of the leading pioneers of alternative rock. The patterns aim to capture the same fiery energy and jumpiness from its prime. Cheers!\n\nINFO:\nBPM: 173.01\nLength: 3:19\nAll Standard Difficulties\n\nCONTRIBUTORS:\nKival Evan - Tester (Expert+)\nHelenCarnate - Tester (Expert)\nCyanSnow - Tester (Expert+)\nLaser Wrath - Tester (All Standard Difficulties)","uploader":{"id":4284238,"name":"officialMECH","uniqueSet":true,"hash":"5d51c536c53019000612f266","avatar":"https://cdn.beatsaver.com/avatar/386290335401246721.png","type":"DISCORD"},"metadata":{"bpm":173.01,"duration":200,"songName":"Misery Business","songSubName":"","songAuthorName":"Paramore","levelAuthorName":"officialMECH"},"stats":{"plays":0,"downloads":5443,"upvotes":1673,"downvotes":62,"score":0.9151},"uploaded":"2019-10-08T16:59:29.069Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"a46e07bb84c22dd1f371df0876fd828195b2c8ef","key":"68a4","state":"Published","createdAt":"2019-10-08T16:59:29.069Z","sageScore":8,"diffs":[{"njs":11.0,"offset":0.0,"notes":272,"bombs":0,"obstacles":38,"nps":1.406,"length":558.0,"characteristic":"Standard","difficulty":"Easy","events":5000,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":193.515,"paritySummary":{"errors":20,"warns":13,"resets":0}},{"njs":11.0,"offset":0.0,"notes":360,"bombs":0,"obstacles":38,"nps":1.86,"length":558.0,"characteristic":"Standard","difficulty":"Normal","events":5000,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":193.515,"paritySummary":{"errors":54,"warns":45,"resets":0}},{"njs":12.0,"offset":0.0,"notes":572,"bombs":0,"obstacles":38,"nps":2.956,"length":558.0,"characteristic":"Standard","difficulty":"Hard","events":5000,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":193.515,"paritySummary":{"errors":12,"warns":8,"resets":0}},{"njs":15.0,"offset":1.0,"notes":946,"bombs":2,"obstacles":38,"nps":4.889,"length":558.0,"characteristic":"Standard","difficulty":"Expert","events":5000,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":193.515,"paritySummary":{"errors":6,"warns":0,"resets":0}},{"njs":18.0,"offset":0.5,"notes":1240,"bombs":4,"obstacles":38,"nps":6.408,"length":558.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":5000,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":193.515,"paritySummary":{"errors":2,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/a46e07bb84c22dd1f371df0876fd828195b2c8ef.zip","coverURL":"https://cdn.beatsaver.com/a46e07bb84c22dd1f371df0876fd828195b2c8ef.jpg","previewURL":"https://cdn.beatsaver.com/a46e07bb84c22dd1f371df0876fd828195b2c8ef.mp3"}],"createdAt":"2019-10-08T16:59:29.069Z","updatedAt":"2019-10-08T16:59:29.069Z","lastPublishedAt":"2019-10-08T16:59:29.069Z"},{"id":"225","name":"Clint Eastwood - Gorillaz","description":"Easy/Normal/Hard/Expert - Audio is as loud without clipping I swear! 100% Expert Playthrough: https://bit.ly/2LuFcxq\r\n\r\nHave fun! =D\r\n\r\n- Freeek =)","uploader":{"id":47581,"name":"freeek","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e8ad","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8ad?d=retro","type":"SIMPLE"},"metadata":{"bpm":84.0,"duration":200,"songName":"Clint Eastwood","songSubName":"Gorillaz","songAuthorName":"unknow","levelAuthorName":"freeek"},"stats":{"plays":0,"downloads":7585,"upvotes":7017,"downvotes":404,"score":0.9151},"uploaded":"2018-05-25T20:58:36Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"507f0e09326d37e09dca08e3c2597f027dbe1940","key":"225","state":"Published","createdAt":"2018-05-25T20:58:36Z","sageScore":6,"diffs":[{"njs":10.0,"offset":0.0,"notes":297,"bombs":0,"obstacles":57,"nps":1.575,"length":264.0,"characteristic":"Standard","difficulty":"Easy","events":1281,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":188.571,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":10.0,"offset":0.0,"notes":358,"bombs":0,"obstacles":62,"nps":1.906,"length":263.0,"characteristic":"Standard","difficulty":"Normal","events":1281,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":187.857,"paritySummary":{"errors":37,"warns":18,"resets":0}},{"njs":10.0,"offset":0.0,"notes":514,"bombs":0,"obstacles":67,"nps":2.721,"length":264.5,"characteristic":"Standard","difficulty":"Hard","events":1281,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":188.929,"paritySummary":{"errors":65,"warns":85,"resets":0}},{"njs":10.0,"offset":0.0,"notes":681,"bombs":0,"obstacles":67,"nps":3.473,"length":274.5,"characteristic":"Standard","difficulty":"Expert","events":1281,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":196.071,"paritySummary":{"errors":97,"warns":102,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/507f0e09326d37e09dca08e3c2597f027dbe1940.zip","coverURL":"https://cdn.beatsaver.com/507f0e09326d37e09dca08e3c2597f027dbe1940.jpg","previewURL":"https://cdn.beatsaver.com/507f0e09326d37e09dca08e3c2597f027dbe1940.mp3"}],"createdAt":"2018-05-25T20:58:36Z","updatedAt":"2018-05-25T20:58:36Z","lastPublishedAt":"2018-05-25T20:58:36Z"},{"id":"3dd6","name":"Saeed - Infected Mushroom","description":"Collab between Bomb, Heisenberg, Rexxz and Ruckus\r\nBomb: 0 - 1:32\r\nHeisenberg: 1:32 - 3:03\r\nRexxz: 3:03 - 5:22\r\nRuckus: 5:22 ->","uploader":{"id":4284846,"name":"rexxz","uniqueSet":true,"hash":"5cff0b7598cc5a672c85311e","avatar":"https://cdn.beatsaver.com/avatar/101849894876106752.png","type":"DISCORD"},"metadata":{"bpm":145.0,"duration":397,"songName":"Saeed","songSubName":"Infected Mushroom","songAuthorName":"Bomb, Heisenberg, Rexxz, Ruckus","levelAuthorName":"Rexxz"},"stats":{"plays":0,"downloads":1406,"upvotes":1143,"downvotes":34,"score":0.9151},"uploaded":"2019-03-13T20:51:03Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"3f3d4ad451b3671e881776c88a67148326ccc9c5","key":"3dd6","state":"Published","createdAt":"2019-03-13T20:51:03Z","sageScore":6,"diffs":[{"njs":14.0,"offset":0.0,"notes":821,"bombs":0,"obstacles":76,"nps":2.176,"length":912.0,"characteristic":"Standard","difficulty":"Normal","events":22078,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":377.379,"paritySummary":{"errors":80,"warns":20,"resets":0}},{"njs":15.0,"offset":0.0,"notes":1316,"bombs":209,"obstacles":43,"nps":3.427,"length":928.0,"characteristic":"Standard","difficulty":"Expert","events":22039,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":384.0,"paritySummary":{"errors":57,"warns":88,"resets":2}},{"njs":18.0,"offset":0.0,"notes":2169,"bombs":470,"obstacles":61,"nps":5.57,"length":941.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":22077,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":389.379,"paritySummary":{"errors":70,"warns":68,"resets":8}}],"downloadURL":"https://cdn.beatsaver.com/3f3d4ad451b3671e881776c88a67148326ccc9c5.zip","coverURL":"https://cdn.beatsaver.com/3f3d4ad451b3671e881776c88a67148326ccc9c5.jpg","previewURL":"https://cdn.beatsaver.com/3f3d4ad451b3671e881776c88a67148326ccc9c5.mp3"}],"createdAt":"2019-03-13T20:51:03Z","updatedAt":"2019-03-13T20:51:03Z","lastPublishedAt":"2019-03-13T20:51:03Z"},{"id":"e4ae","name":"[Alphabeat - Marshmello Pack] Anne-Marie & Marshmello - FRIENDS","description":"Part of the Marshmello Music Pack - Presented by the Alphabeat Mapping Group.\n\nAlphabeat is back once again! This time, we bring a Marshmello Music Pack - mapped by 3 members of the group over 6 different songs (with a bonus Expert+ only song)!\n\nPreview:\nhttps://www.youtube.com/watch?v=bW00nvk7JgU\n\nTimeweaver: https://beatsaver.com/uploader/5d47d586c5301900060b2f6c\nNitronik.exe: https://beatsaver.com/uploader/5cff0b7798cc5a672c855d84\nFirestrike: https://beatsaver.com/uploader/5cff0b7698cc5a672c85479f\n\nWatch the Marshmello Music Pack Trailer, created by Pixelguy: \nhttps://youtu.be/pzNkJ7tFcHM\n\nAll songs included in this pack:\n- Be Kind (Firestrike)\n- Wolves (Timeweaver)\n- Summer (Firestrike)\n- FRIENDS (Nitronik.exe)\n- Falling To Pieces (Nitronik.exe)\n- Rescue Me (Nitronik.exe)\n- [Bonus Song] Chasing Colors (Timeweaver)\n\nChroma is recommended for the best experience.\nDon't forget to grab the Mello Notes created alongside this pack, by Nitronik.exe: https://modelsaber.com/Bloqs/?id=1599384157&pc\nGet the playlist here: https://bsaber.com/marshmello-pack/","uploader":{"id":4284201,"name":"nitronikexe","uniqueSet":true,"hash":"5cff0b7798cc5a672c855d84","avatar":"https://cdn.beatsaver.com/avatar/428230049704181760.png","type":"DISCORD"},"metadata":{"bpm":190.0,"duration":204,"songName":"FRIENDS","songSubName":"(ft. Anne Marie)","songAuthorName":"Marshmello","levelAuthorName":"nitronik.exe"},"stats":{"plays":0,"downloads":4733,"upvotes":874,"downvotes":21,"score":0.915},"uploaded":"2020-09-06T11:06:01.474Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"6afef6c5baaf7348d0bb4107c78dc4e59ca511e2","key":"e4ae","state":"Published","createdAt":"2020-09-06T11:06:01.474Z","sageScore":7,"diffs":[{"njs":10.0,"offset":0.5,"notes":171,"bombs":0,"obstacles":0,"nps":0.849,"length":638.0,"characteristic":"Standard","difficulty":"Easy","events":12015,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":201.474,"paritySummary":{"errors":169,"warns":0,"resets":0}},{"njs":12.0,"offset":0.0,"notes":345,"bombs":0,"obstacles":0,"nps":1.712,"length":638.0,"characteristic":"Standard","difficulty":"Normal","events":12015,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":201.474,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":14.0,"offset":-0.5,"notes":526,"bombs":0,"obstacles":0,"nps":2.611,"length":638.0,"characteristic":"Standard","difficulty":"Hard","events":12015,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":201.474,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":16.0,"offset":0.75,"notes":710,"bombs":0,"obstacles":0,"nps":3.516,"length":639.5,"characteristic":"Standard","difficulty":"Expert","events":12016,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":201.947,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":18.0,"offset":0.25,"notes":930,"bombs":12,"obstacles":16,"nps":4.605,"length":639.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":12015,"chroma":true,"me":false,"ne":false,"cinema":false,"seconds":201.947,"paritySummary":{"errors":0,"warns":3,"resets":2}}],"downloadURL":"https://cdn.beatsaver.com/6afef6c5baaf7348d0bb4107c78dc4e59ca511e2.zip","coverURL":"https://cdn.beatsaver.com/6afef6c5baaf7348d0bb4107c78dc4e59ca511e2.jpg","previewURL":"https://cdn.beatsaver.com/6afef6c5baaf7348d0bb4107c78dc4e59ca511e2.mp3"}],"createdAt":"2020-09-06T11:06:01.474Z","updatedAt":"2020-09-06T11:06:01.474Z","lastPublishedAt":"2020-09-06T11:06:01.474Z"},{"id":"ca40","name":"Kings & Queens - Ava Max","description":"A map requested by my sister so she can play it when she borrows my Quest for extended periods of time to practice her Beat Saber skills. ^_^\nShe helped me decide on some of the mapping decisions on this and helped me with play testing so some credit does go to her :D\n\nIf you have any suggestions about the map and would like to get in touch my discord is Edmard#5334\nNuff luv peeps!","uploader":{"id":4285633,"name":"edmard","uniqueSet":true,"hash":"5cff0b7798cc5a672c856604","avatar":"https://cdn.beatsaver.com/avatar/157188812462620672.png","type":"DISCORD"},"metadata":{"bpm":130.0,"duration":162,"songName":"Kings & Queens","songSubName":"","songAuthorName":"Ava Max","levelAuthorName":"Edmard"},"stats":{"plays":0,"downloads":5634,"upvotes":1649,"downvotes":61,"score":0.915},"uploaded":"2020-07-29T22:38:29.144Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"41d7c7b621d397db0723b55f75ab2ef6be1891e8","key":"ca40","state":"Published","createdAt":"2020-07-29T22:38:29.144Z","sageScore":3,"diffs":[{"njs":14.0,"offset":0.0,"notes":424,"bombs":0,"obstacles":29,"nps":2.857,"length":321.5,"characteristic":"Standard","difficulty":"Hard","events":2338,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":148.385,"paritySummary":{"errors":0,"warns":0,"resets":0},"stars":1.71},{"njs":15.0,"offset":0.0,"notes":606,"bombs":0,"obstacles":25,"nps":4.084,"length":321.5,"characteristic":"Standard","difficulty":"Expert","events":2338,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":148.385,"paritySummary":{"errors":0,"warns":0,"resets":0},"stars":2.6},{"njs":15.0,"offset":-0.3,"notes":661,"bombs":0,"obstacles":22,"nps":4.455,"length":321.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":2338,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":148.385,"paritySummary":{"errors":0,"warns":2,"resets":0},"stars":5.85}],"downloadURL":"https://cdn.beatsaver.com/41d7c7b621d397db0723b55f75ab2ef6be1891e8.zip","coverURL":"https://cdn.beatsaver.com/41d7c7b621d397db0723b55f75ab2ef6be1891e8.jpg","previewURL":"https://cdn.beatsaver.com/41d7c7b621d397db0723b55f75ab2ef6be1891e8.mp3"}],"createdAt":"2020-07-29T22:38:29.144Z","updatedAt":"2020-07-29T22:38:29.144Z","lastPublishedAt":"2020-07-29T22:38:29.144Z"},{"id":"9a35","name":"[Tokyo Machine Pack] Tokyo Machine - PIXEL","description":"3/6\nPart of the Tokyo Machine Pack, a collab between Firestrike, Cyansnow and I.\nMap by me, lights by FireStrike.\n\nFireStrike's account: https://beatsaver.com/uploader/5cff0b7698cc5a672c85479f\nCyanSnow's account: https://beatsaver.com/uploader/5cff0b7698cc5a672c8543ac\n\nPlaylist: https://bsaber.com/tokyo-machine-pack/\n\nCheck out the trailer for the pack here: https://www.youtube.com/watch?v=lStPUnecsD8","uploader":{"id":57657,"name":"pixelguymm","uniqueSet":true,"hash":"5cff0b7698cc5a672c8541a8","avatar":"https://cdn.beatsaver.com/avatar/434386941547511818.png","type":"DISCORD"},"metadata":{"bpm":128.0,"duration":201,"songName":"PIXEL","songSubName":"","songAuthorName":"Tokyo Machine","levelAuthorName":"FireStrike & Pixel"},"stats":{"plays":0,"downloads":1838,"upvotes":650,"downvotes":11,"score":0.915},"uploaded":"2020-04-12T18:07:43.267Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"b5d3d5f97d34fc85c0a2cf694631bdf125229304","key":"9a35","state":"Published","createdAt":"2020-04-12T18:07:43.267Z","sageScore":4,"diffs":[{"njs":18.0,"offset":-0.3,"notes":1172,"bombs":54,"obstacles":4,"nps":6.016,"length":415.625,"characteristic":"Standard","difficulty":"ExpertPlus","events":4372,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":194.824,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/b5d3d5f97d34fc85c0a2cf694631bdf125229304.zip","coverURL":"https://cdn.beatsaver.com/b5d3d5f97d34fc85c0a2cf694631bdf125229304.jpg","previewURL":"https://cdn.beatsaver.com/b5d3d5f97d34fc85c0a2cf694631bdf125229304.mp3"}],"createdAt":"2020-04-12T18:07:43.267Z","updatedAt":"2020-04-12T18:07:43.267Z","lastPublishedAt":"2020-04-12T18:07:43.267Z"},{"id":"c1d","name":"Good Times Roll","description":"Be sure to check out the other difficulties! There were certain patterns that I loved that only worked for some of the difficulties, and they're all super fun! Anyone playing Easy will find that Normal teaches you how to play harder maps while being very forgiving.\r\n\r\nAlso, I'm going on hiatus! This will be my last map for a good while since I'm back in school and also working full time. I'll still play here and there and maybe try to map a bit, but I likely won't release anything for several months. Hopefully this map will keep people satisfied for a while ;)\r\n\r\nhttps://youtu.be/vCbgECLTxpU","uploader":{"id":44595,"name":"awfulnaut","uniqueSet":true,"hash":"5cff0b7398cc5a672c84edac","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84edac?d=retro","type":"SIMPLE"},"metadata":{"bpm":200.0,"duration":146,"songName":"Good Times Roll","songSubName":"Griz x Big Gigantic","songAuthorName":"Awfulnaut","levelAuthorName":"awfulnaut"},"stats":{"plays":0,"downloads":6704,"upvotes":3141,"downvotes":149,"score":0.915},"uploaded":"2018-07-27T15:47:05Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"f22061809c798178786ca1b6e61b10ccbcbe8d28","key":"c1d","state":"Published","createdAt":"2018-07-27T15:47:05Z","sageScore":4,"diffs":[{"njs":10.0,"offset":0.0,"notes":356,"bombs":8,"obstacles":11,"nps":2.566,"length":462.5,"characteristic":"Standard","difficulty":"Normal","events":1208,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":138.75,"paritySummary":{"errors":95,"warns":15,"resets":4},"stars":1.45},{"njs":10.0,"offset":0.0,"notes":469,"bombs":8,"obstacles":11,"nps":3.38,"length":462.5,"characteristic":"Standard","difficulty":"Hard","events":1208,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":138.75,"paritySummary":{"errors":44,"warns":29,"resets":1},"stars":1.88},{"njs":10.0,"offset":0.0,"notes":519,"bombs":0,"obstacles":12,"nps":3.741,"length":462.5,"characteristic":"Standard","difficulty":"Expert","events":1208,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":138.75,"paritySummary":{"errors":24,"warns":41,"resets":0},"stars":2.25},{"njs":10.0,"offset":0.0,"notes":634,"bombs":0,"obstacles":12,"nps":4.569,"length":462.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":1208,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":138.75,"paritySummary":{"errors":34,"warns":48,"resets":0},"stars":2.74}],"downloadURL":"https://cdn.beatsaver.com/f22061809c798178786ca1b6e61b10ccbcbe8d28.zip","coverURL":"https://cdn.beatsaver.com/f22061809c798178786ca1b6e61b10ccbcbe8d28.jpg","previewURL":"https://cdn.beatsaver.com/f22061809c798178786ca1b6e61b10ccbcbe8d28.mp3"}],"createdAt":"2018-07-27T15:47:05Z","updatedAt":"2018-07-27T15:47:05Z","lastPublishedAt":"2018-07-27T15:47:05Z"},{"id":"e7ce","name":"[NoodleGames Vol.2] Rivers in the Desert - Persona 5","description":"The Ramen Noodle group is back again to bring you a map pack full of our favorite video game soundtracks and game-inspired music!\n\nHere's one of my 4 Persona maps for the pack! Hope you enjoy.","uploader":{"id":15368,"name":"theab","uniqueSet":true,"hash":"5cff0b7698cc5a672c853a14","avatar":"https://www.gravatar.com/avatar/5cff0b7698cc5a672c853a14?d=retro","type":"SIMPLE"},"metadata":{"bpm":130.0,"duration":224,"songName":"Rivers In the Desert","songSubName":"(Short Ver.)","songAuthorName":"Shoji Meguro","levelAuthorName":"Ab"},"stats":{"plays":0,"downloads":3270,"upvotes":741,"downvotes":15,"score":0.9149},"uploaded":"2020-09-10T19:20:12.870Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"6dd531f3920735b2b1b64f39442fcb753b4a52a7","key":"e7ce","state":"Published","createdAt":"2020-09-10T19:20:12.870Z","sageScore":4,"diffs":[{"njs":16.0,"offset":-0.25,"notes":760,"bombs":0,"obstacles":0,"nps":3.441,"length":478.5,"characteristic":"Standard","difficulty":"Expert","events":941,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":220.846,"paritySummary":{"errors":2,"warns":2,"resets":0}},{"njs":17.0,"offset":-0.35,"notes":824,"bombs":0,"obstacles":0,"nps":3.731,"length":478.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":946,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":220.846,"paritySummary":{"errors":2,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/6dd531f3920735b2b1b64f39442fcb753b4a52a7.zip","coverURL":"https://cdn.beatsaver.com/6dd531f3920735b2b1b64f39442fcb753b4a52a7.jpg","previewURL":"https://cdn.beatsaver.com/6dd531f3920735b2b1b64f39442fcb753b4a52a7.mp3"}],"createdAt":"2020-09-10T19:20:12.870Z","updatedAt":"2020-09-10T19:20:12.870Z","lastPublishedAt":"2020-09-10T19:20:12.870Z"},{"id":"d0be","name":"Bohemian Rhapsody - Queen","description":"Honestly, I never really liked that other version. And I'm sure some people would agree, so since it seemed like no one else was going fix it, I went and mapped it myself.\r\nEnjoy.\r\n\r\nP.S. - If kingpeuche ever plays this, good job man. Bohemian Rhapsody isn't an easy song to map, so I have some genuine respect for you.\r\n\r\nPlay kingpeuche's version(s) here: \r\nhttps://beatsaver.com/beatmap/4a6\r\nhttps://beatsaver.com/beatmap/77c\r\n\r\nSong Info:\r\nhttps://en.wikipedia.org/wiki/Bohemian_Rhapsody","uploader":{"id":4284694,"name":"jokidum","uniqueSet":true,"hash":"5e15518d47f1600006e912cc","avatar":"https://cdn.beatsaver.com/avatar/494282373094047745.png","type":"DISCORD"},"metadata":{"bpm":120.0,"duration":356,"songName":"Bohemian Rhapsody","songSubName":"- Queen","songAuthorName":"Queen","levelAuthorName":"Jokidum"},"stats":{"plays":0,"downloads":8506,"upvotes":1666,"downvotes":62,"score":0.9149},"uploaded":"2020-08-07T20:00:07.052Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"d19b4abf7d83d2882a5bf1f2bdc3b03491ef3eaf","key":"d0be","state":"Published","createdAt":"2020-08-07T20:00:07.052Z","sageScore":2,"diffs":[{"njs":12.0,"offset":0.0,"notes":1100,"bombs":0,"obstacles":0,"nps":3.303,"length":666.0,"characteristic":"Standard","difficulty":"Expert","events":2875,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":333.0,"paritySummary":{"errors":4,"warns":2,"resets":0}},{"njs":16.0,"offset":0.0,"notes":0,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"Lightshow","difficulty":"Easy","events":2875,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/d19b4abf7d83d2882a5bf1f2bdc3b03491ef3eaf.zip","coverURL":"https://cdn.beatsaver.com/d19b4abf7d83d2882a5bf1f2bdc3b03491ef3eaf.jpg","previewURL":"https://cdn.beatsaver.com/d19b4abf7d83d2882a5bf1f2bdc3b03491ef3eaf.mp3"}],"createdAt":"2020-08-07T20:00:07.052Z","updatedAt":"2020-08-07T20:00:07.052Z","lastPublishedAt":"2020-08-07T20:00:07.052Z"},{"id":"96ff","name":"Imagine Dragons - Warriors (2020 ReMap)","description":"Two years ago on the 24th July 2018 I released my first beat saber map of Warriors by Imagine Dragons. Well now its back! and its BIGGER, LOUDER and more EPIC than ever! \n\nThe map was completely remade from the ground up, so new audio, new lights and completely new difficulties. Don't worry though, the old warriors will still remain on beatsaver just in case anyone prefers playing it.\n\nThanks to Strofan and Layanmeta for playtesting :P\n\nMap preview: https://youtu.be/pdb5F0Q1cwo","uploader":{"id":4785,"name":"stumi","uniqueSet":false,"hash":"5cff0b7398cc5a672c84f720","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro","type":"SIMPLE"},"metadata":{"bpm":78.0,"duration":172,"songName":"Warriors (2020 ReMap)","songSubName":"","songAuthorName":"Imagine Dragons","levelAuthorName":"Stumi"},"stats":{"plays":0,"downloads":7111,"upvotes":1861,"downvotes":73,"score":0.9149},"uploaded":"2020-04-03T16:29:45.360Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"8ee2cc6242db4d138e620a347e3a2904f2a5b902","key":"96ff","state":"Published","createdAt":"2020-04-03T16:29:45.360Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":169,"bombs":0,"obstacles":67,"nps":1.036,"length":212.0,"characteristic":"Standard","difficulty":"Easy","events":2808,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":163.077,"paritySummary":{"errors":32,"warns":9,"resets":0}},{"njs":11.0,"offset":0.0,"notes":317,"bombs":0,"obstacles":82,"nps":1.944,"length":212.0,"characteristic":"Standard","difficulty":"Normal","events":2808,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":163.077,"paritySummary":{"errors":52,"warns":18,"resets":0}},{"njs":12.0,"offset":0.4,"notes":506,"bombs":4,"obstacles":97,"nps":3.103,"length":212.0,"characteristic":"Standard","difficulty":"Hard","events":2807,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":163.077,"paritySummary":{"errors":29,"warns":11,"resets":0}},{"njs":16.0,"offset":0.2,"notes":673,"bombs":64,"obstacles":130,"nps":4.127,"length":212.0,"characteristic":"Standard","difficulty":"Expert","events":2808,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":163.077,"paritySummary":{"errors":20,"warns":40,"resets":11}}],"downloadURL":"https://cdn.beatsaver.com/8ee2cc6242db4d138e620a347e3a2904f2a5b902.zip","coverURL":"https://cdn.beatsaver.com/8ee2cc6242db4d138e620a347e3a2904f2a5b902.jpg","previewURL":"https://cdn.beatsaver.com/8ee2cc6242db4d138e620a347e3a2904f2a5b902.mp3"}],"createdAt":"2020-04-03T16:29:45.360Z","updatedAt":"2020-04-03T16:29:45.360Z","lastPublishedAt":"2020-04-03T16:29:45.360Z"},{"id":"8f65","name":"Jump in the Line - Harry Belafonte","description":"My parents were big Harry Belafonte fans, and I grew up listening to this 1961 hit, Jump in the Line. In 1988, this song was a major part of the 1988 Michael Keaton classic, Beetlejuice. Who can forget Winona Ryder dancing in the air? Now you can dance along with her while slicing flying blocks!\n\nFully mapped Easy, Normal, Hard, Expert, Expert Plus Standard, and Expert Plus 360.\n\nThis song is part of my new song pack collaboration with MajorPickle: PickleTech Goes to the Movies - The 1980s.\n\nhttps://youtu.be/cbLl1ofeBZY","uploader":{"id":78593,"name":"techbutterfly","uniqueSet":true,"hash":"5cff0b7798cc5a672c8566f7","avatar":"https://cdn.beatsaver.com/avatar/527111497617506304.png","type":"DISCORD"},"metadata":{"bpm":115.0,"duration":223,"songName":"Jump in the Line","songSubName":"","songAuthorName":"Harry Belafonte","levelAuthorName":"TechButterfly"},"stats":{"plays":0,"downloads":2510,"upvotes":830,"downvotes":19,"score":0.9149},"uploaded":"2020-03-13T04:10:43.592Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"ba3e5d8bca161ef9e9f70383b6c33f83ecf8998a","key":"8f65","state":"Published","createdAt":"2020-03-13T04:10:43.592Z","sageScore":5,"diffs":[{"njs":8.0,"offset":0.0,"notes":274,"bombs":0,"obstacles":2,"nps":1.256,"length":418.0,"characteristic":"Standard","difficulty":"Easy","events":919,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":218.087,"paritySummary":{"errors":67,"warns":33,"resets":0}},{"njs":10.0,"offset":0.0,"notes":407,"bombs":0,"obstacles":2,"nps":1.864,"length":418.5,"characteristic":"Standard","difficulty":"Normal","events":919,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":218.348,"paritySummary":{"errors":71,"warns":55,"resets":0}},{"njs":12.0,"offset":0.5,"notes":634,"bombs":5,"obstacles":2,"nps":2.904,"length":418.5,"characteristic":"Standard","difficulty":"Hard","events":919,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":218.348,"paritySummary":{"errors":47,"warns":51,"resets":2}},{"njs":12.0,"offset":0.5,"notes":793,"bombs":0,"obstacles":2,"nps":3.632,"length":418.5,"characteristic":"Standard","difficulty":"Expert","events":919,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":218.348,"paritySummary":{"errors":35,"warns":46,"resets":0}},{"njs":13.0,"offset":0.5,"notes":920,"bombs":0,"obstacles":2,"nps":4.213,"length":418.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":920,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":218.348,"paritySummary":{"errors":69,"warns":77,"resets":0}},{"njs":13.0,"offset":0.5,"notes":793,"bombs":0,"obstacles":2,"nps":3.632,"length":418.5,"characteristic":"360Degree","difficulty":"ExpertPlus","events":1125,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":218.348,"paritySummary":{"errors":35,"warns":46,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/ba3e5d8bca161ef9e9f70383b6c33f83ecf8998a.zip","coverURL":"https://cdn.beatsaver.com/ba3e5d8bca161ef9e9f70383b6c33f83ecf8998a.jpg","previewURL":"https://cdn.beatsaver.com/ba3e5d8bca161ef9e9f70383b6c33f83ecf8998a.mp3"}],"createdAt":"2020-03-13T04:10:43.592Z","updatedAt":"2020-03-13T04:10:43.592Z","lastPublishedAt":"2020-03-13T04:10:43.592Z"},{"id":"8e35","name":"Beat It [Punk Goes Pop Vol.2] - Fall Out Boy ft. John Mayer","description":"The first song in my up and coming Punk Goes Pop Volume 2 playlist! A punk rock cover of Beat It as covered by Fall Out Boy featuring John Mayer. Original song by Michael Jackson.","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":150.0,"duration":227,"songName":"Beat It","songSubName":"ft. John Mayer","songAuthorName":"Fall Out Boy","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":4056,"upvotes":935,"downvotes":24,"score":0.9149},"uploaded":"2020-03-08T05:50:10.166Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"88474a324602552647553aa9533596c7cd882c60","key":"8e35","state":"Published","createdAt":"2020-03-08T05:50:10.166Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":396,"bombs":0,"obstacles":8,"nps":1.827,"length":542.0,"characteristic":"Standard","difficulty":"Easy","events":7559,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":216.8,"paritySummary":{"errors":44,"warns":39,"resets":0}},{"njs":12.0,"offset":0.0,"notes":531,"bombs":0,"obstacles":8,"nps":2.405,"length":552.0,"characteristic":"Standard","difficulty":"Normal","events":7559,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":220.8,"paritySummary":{"errors":43,"warns":55,"resets":0}},{"njs":13.5,"offset":0.0,"notes":863,"bombs":0,"obstacles":6,"nps":3.909,"length":552.0,"characteristic":"Standard","difficulty":"Hard","events":7559,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":220.8,"paritySummary":{"errors":50,"warns":49,"resets":0}},{"njs":15.0,"offset":0.0,"notes":878,"bombs":0,"obstacles":6,"nps":3.976,"length":552.0,"characteristic":"Standard","difficulty":"Expert","events":7559,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":220.8,"paritySummary":{"errors":47,"warns":54,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/88474a324602552647553aa9533596c7cd882c60.zip","coverURL":"https://cdn.beatsaver.com/88474a324602552647553aa9533596c7cd882c60.jpg","previewURL":"https://cdn.beatsaver.com/88474a324602552647553aa9533596c7cd882c60.mp3"}],"createdAt":"2020-03-08T05:50:10.166Z","updatedAt":"2020-03-08T05:50:10.166Z","lastPublishedAt":"2020-03-08T05:50:10.166Z"},{"id":"7395","name":"Bruh Sound Effect #2","description":"tried to get it ranked\nthey said common sense to me\nquite a bruh moment\n\nhaiku written by yours truly (its a true story btw)","uploader":{"id":4285820,"name":"ezconfirmed","uniqueSet":true,"hash":"5d6444b8589aee0006ff76ad","avatar":"https://cdn.beatsaver.com/avatar/343415744324960256.png","type":"DISCORD"},"metadata":{"bpm":120.0,"duration":4,"songName":"Bruh Sound Effect #2","songSubName":"","songAuthorName":"Jame Benedict","levelAuthorName":"eZconfirmed"},"stats":{"plays":0,"downloads":908,"upvotes":807,"downvotes":18,"score":0.9149},"uploaded":"2019-12-03T19:19:01.005Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"1c30514852ae45a9651d476fe748d2c9926facfc","key":"7395","state":"Published","createdAt":"2019-12-03T19:19:01.005Z","sageScore":1,"diffs":[{"njs":16.0,"offset":0.0,"notes":4,"bombs":0,"obstacles":0,"nps":0.0,"length":0.0,"characteristic":"Standard","difficulty":"Normal","events":10,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":0.0,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/1c30514852ae45a9651d476fe748d2c9926facfc.zip","coverURL":"https://cdn.beatsaver.com/1c30514852ae45a9651d476fe748d2c9926facfc.jpg","previewURL":"https://cdn.beatsaver.com/1c30514852ae45a9651d476fe748d2c9926facfc.mp3"}],"createdAt":"2019-12-03T19:19:01.005Z","updatedAt":"2019-12-03T19:19:01.005Z","lastPublishedAt":"2019-12-03T19:19:01.005Z"},{"id":"6361","name":"Choke - I DONT KNOW HOW BUT THEY FOUND ME","description":"Here's another fun and bouncy song! The lyrics are a bit...darker than the music would have you suggest though. So bite your tongue, and choke yourself to sleep.\n\nBPM: 120\nNPS: N - 2.45; H - 3.14; Ex - 3.96\nNotes: N - 482; H - 617; Ex - 778\nWalls: N - 28; H - 20; Ex - 17\nBombs: None!\n\nThanks to helencarnate and Checkthepan for testplaying!","uploader":{"id":4285188,"name":"fruhead","uniqueSet":true,"hash":"5cff0b7598cc5a672c852683","avatar":"https://cdn.beatsaver.com/avatar/174000100413145090.png","type":"DISCORD"},"metadata":{"bpm":120.251,"duration":196,"songName":"Choke","songSubName":"","songAuthorName":"I DONT KNOW HOW BUT THEY FOUND ME","levelAuthorName":"fruhead"},"stats":{"plays":0,"downloads":1052,"upvotes":388,"downvotes":1,"score":0.9149},"uploaded":"2019-09-14T17:56:33.555Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"ea073ec1320fd83c3b9c5e5be5fe2cb58e846b3f","key":"6361","state":"Published","createdAt":"2019-09-14T17:56:33.555Z","sageScore":6,"diffs":[{"njs":12.0,"offset":0.0,"notes":482,"bombs":0,"obstacles":28,"nps":2.518,"length":383.667,"characteristic":"Standard","difficulty":"Normal","events":4223,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":191.433,"paritySummary":{"errors":8,"warns":0,"resets":0}},{"njs":14.0,"offset":0.0,"notes":617,"bombs":0,"obstacles":20,"nps":3.223,"length":383.667,"characteristic":"Standard","difficulty":"Hard","events":4223,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":191.433,"paritySummary":{"errors":3,"warns":0,"resets":0}},{"njs":16.0,"offset":0.0,"notes":778,"bombs":0,"obstacles":17,"nps":4.064,"length":383.667,"characteristic":"Standard","difficulty":"Expert","events":4223,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":191.433,"paritySummary":{"errors":4,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/ea073ec1320fd83c3b9c5e5be5fe2cb58e846b3f.zip","coverURL":"https://cdn.beatsaver.com/ea073ec1320fd83c3b9c5e5be5fe2cb58e846b3f.jpg","previewURL":"https://cdn.beatsaver.com/ea073ec1320fd83c3b9c5e5be5fe2cb58e846b3f.mp3"}],"createdAt":"2019-09-14T17:56:33.555Z","updatedAt":"2019-09-14T17:56:33.555Z","lastPublishedAt":"2019-09-14T17:56:33.555Z"},{"id":"8600","name":"Tom Sawyer - Rush","description":"My tribute to Rush.","uploader":{"id":4285077,"name":"ris","uniqueSet":true,"hash":"5cff0b7598cc5a672c8535df","avatar":"https://cdn.beatsaver.com/avatar/191597992061435904.png","type":"DISCORD"},"metadata":{"bpm":88.0,"duration":273,"songName":"Tom Sawyer","songSubName":"","songAuthorName":"Rush","levelAuthorName":"Ris"},"stats":{"plays":0,"downloads":2010,"upvotes":806,"downvotes":18,"score":0.9148},"uploaded":"2020-02-11T03:37:38.994Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"1b39e3091cda17c7d35db7707e1f673a5e8ceb66","key":"8600","state":"Published","createdAt":"2020-02-11T03:37:38.994Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.5,"notes":386,"bombs":0,"obstacles":0,"nps":1.456,"length":388.702,"characteristic":"Standard","difficulty":"Normal","events":662,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":265.024,"paritySummary":{"errors":50,"warns":42,"resets":0}},{"njs":12.0,"offset":0.0,"notes":748,"bombs":0,"obstacles":0,"nps":2.822,"length":388.702,"characteristic":"Standard","difficulty":"Hard","events":662,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":265.024,"paritySummary":{"errors":74,"warns":89,"resets":0}},{"njs":16.0,"offset":0.25,"notes":1055,"bombs":30,"obstacles":0,"nps":3.981,"length":388.702,"characteristic":"Standard","difficulty":"Expert","events":662,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":265.024,"paritySummary":{"errors":75,"warns":86,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/1b39e3091cda17c7d35db7707e1f673a5e8ceb66.zip","coverURL":"https://cdn.beatsaver.com/1b39e3091cda17c7d35db7707e1f673a5e8ceb66.jpg","previewURL":"https://cdn.beatsaver.com/1b39e3091cda17c7d35db7707e1f673a5e8ceb66.mp3"}],"createdAt":"2020-02-11T03:37:38.994Z","updatedAt":"2020-02-11T03:37:38.994Z","lastPublishedAt":"2020-02-11T03:37:38.994Z"},{"id":"55d1","name":"Short Skirt Long Jacket - Cake","description":"Swing along with Cake's 2001 hit, Short Skirt Long Jacket. Even if you're not a Cake fan, you might remember this as the theme song for the TV show Chuck.\n\nFully mapped Easy, Normal, Hard, and Expert. Quest friendly!\n\nhttps://www.youtube.com/watch?v=1RKRbWus-qM","uploader":{"id":78593,"name":"techbutterfly","uniqueSet":true,"hash":"5cff0b7798cc5a672c8566f7","avatar":"https://cdn.beatsaver.com/avatar/527111497617506304.png","type":"DISCORD"},"metadata":{"bpm":120.0,"duration":203,"songName":"Short Skirt Long Jacket","songSubName":"","songAuthorName":"Cake","levelAuthorName":"TechButterfly"},"stats":{"plays":0,"downloads":1700,"upvotes":671,"downvotes":12,"score":0.9148},"uploaded":"2019-07-07T01:49:57.642Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"20b9326bd71db4454aba08df06b035ea536322a9","key":"55d1","state":"Published","createdAt":"2019-07-07T01:49:57.642Z","sageScore":5,"diffs":[{"njs":12.0,"offset":0.0,"notes":234,"bombs":0,"obstacles":4,"nps":1.188,"length":394.0,"characteristic":"Standard","difficulty":"Easy","events":6191,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":197.0,"paritySummary":{"errors":69,"warns":25,"resets":0}},{"njs":13.0,"offset":0.0,"notes":358,"bombs":0,"obstacles":4,"nps":1.815,"length":394.5,"characteristic":"Standard","difficulty":"Normal","events":6191,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":197.25,"paritySummary":{"errors":90,"warns":48,"resets":0}},{"njs":15.0,"offset":0.0,"notes":562,"bombs":0,"obstacles":44,"nps":2.849,"length":394.5,"characteristic":"Standard","difficulty":"Hard","events":6191,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":197.25,"paritySummary":{"errors":31,"warns":49,"resets":0}},{"njs":17.0,"offset":0.0,"notes":669,"bombs":0,"obstacles":32,"nps":3.392,"length":394.5,"characteristic":"Standard","difficulty":"Expert","events":6195,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":197.25,"paritySummary":{"errors":45,"warns":69,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/20b9326bd71db4454aba08df06b035ea536322a9.zip","coverURL":"https://cdn.beatsaver.com/20b9326bd71db4454aba08df06b035ea536322a9.jpg","previewURL":"https://cdn.beatsaver.com/20b9326bd71db4454aba08df06b035ea536322a9.mp3"}],"createdAt":"2019-07-07T01:49:57.642Z","updatedAt":"2019-07-07T01:49:57.642Z","lastPublishedAt":"2019-07-07T01:49:57.642Z"},{"id":"4a08","name":"Attack on Titan OP 5 | Shoukei to Shikabane no Michi | Shingeki no Kyojin OP 5| Mapped by Ab","description":"I offer all difficulties except Easy here. But Normal is pretty easy.\r\nSeizure warning I guess.","uploader":{"id":15368,"name":"theab","uniqueSet":true,"hash":"5cff0b7698cc5a672c853a14","avatar":"https://www.gravatar.com/avatar/5cff0b7698cc5a672c853a14?d=retro","type":"SIMPLE"},"metadata":{"bpm":178.0,"duration":89,"songName":"Attack on Titan OP5 (Shoukei to Shikabane no Michi)","songSubName":"Linked Horizon","songAuthorName":"Ab","levelAuthorName":"TheAb"},"stats":{"plays":0,"downloads":2844,"upvotes":891,"downvotes":22,"score":0.9148},"uploaded":"2019-05-02T20:07:56Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"922afca4bfe670e6ebff75c18245035744193d22","key":"4a08","state":"Published","createdAt":"2019-05-02T20:07:56Z","sageScore":3,"diffs":[{"njs":10.0,"offset":0.0,"notes":146,"bombs":5,"obstacles":5,"nps":1.685,"length":257.0,"characteristic":"Standard","difficulty":"Normal","events":5631,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":86.629,"paritySummary":{"errors":62,"warns":1,"resets":2}},{"njs":13.0,"offset":0.0,"notes":238,"bombs":12,"obstacles":7,"nps":2.747,"length":257.0,"characteristic":"Standard","difficulty":"Hard","events":5631,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":86.629,"paritySummary":{"errors":30,"warns":9,"resets":2}},{"njs":15.0,"offset":1.0,"notes":373,"bombs":4,"obstacles":6,"nps":4.306,"length":257.0,"characteristic":"Standard","difficulty":"Expert","events":5631,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":86.629,"paritySummary":{"errors":19,"warns":20,"resets":2}},{"njs":18.0,"offset":0.0,"notes":555,"bombs":1,"obstacles":3,"nps":6.599,"length":249.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":5634,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":84.101,"paritySummary":{"errors":29,"warns":39,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/922afca4bfe670e6ebff75c18245035744193d22.zip","coverURL":"https://cdn.beatsaver.com/922afca4bfe670e6ebff75c18245035744193d22.jpg","previewURL":"https://cdn.beatsaver.com/922afca4bfe670e6ebff75c18245035744193d22.mp3"}],"createdAt":"2019-05-02T20:07:56Z","updatedAt":"2019-05-02T20:07:56Z","lastPublishedAt":"2019-05-02T20:07:56Z"},{"id":"487c","name":"Don't Stop Me Now - Queen","description":"Huge thanks to WhipStickGoStop for the full combo vid!\r\nhttps://www.youtube.com/watch?v=RPDvDY2HT58\r\n\r\nPlaytesters <3 WhipStickGoStop, XORoseGold, MozzVR, Izzake","uploader":{"id":4285169,"name":"ryger","uniqueSet":true,"hash":"5cff0b7798cc5a672c855a42","avatar":"https://cdn.beatsaver.com/avatar/169266024502263808.png","type":"DISCORD"},"metadata":{"bpm":120.0,"duration":214,"songName":"Don't Stop Me Now","songSubName":"Queen","songAuthorName":"Ryger","levelAuthorName":"Ryger"},"stats":{"plays":0,"downloads":5041,"upvotes":1291,"downvotes":42,"score":0.9148},"uploaded":"2019-04-26T16:28:36Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"9db67df13260c4715d33068e3982071ca6e3e815","key":"487c","state":"Published","createdAt":"2019-04-26T16:28:36Z","sageScore":6,"diffs":[{"njs":12.0,"offset":0.0,"notes":734,"bombs":0,"obstacles":1,"nps":3.677,"length":519.002,"characteristic":"Standard","difficulty":"ExpertPlus","events":3998,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":259.501,"paritySummary":{"errors":71,"warns":56,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/9db67df13260c4715d33068e3982071ca6e3e815.zip","coverURL":"https://cdn.beatsaver.com/9db67df13260c4715d33068e3982071ca6e3e815.jpg","previewURL":"https://cdn.beatsaver.com/9db67df13260c4715d33068e3982071ca6e3e815.mp3"}],"createdAt":"2019-04-26T16:28:36Z","updatedAt":"2019-04-26T16:28:36Z","lastPublishedAt":"2019-04-26T16:28:36Z"},{"id":"243c","name":"Ocarina of Time Medley [Smash Bros Map Pack]","description":"by Michiko Naruke\r\n\r\nPart of the Smash Bros map pack!\r\n\r\nVideo: https://youtu.be/lw7EN7Xu-9c","uploader":{"id":39365,"name":"todokete","uniqueSet":true,"hash":"5cff0b7398cc5a672c84ee70","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee70?d=retro","type":"SIMPLE"},"metadata":{"bpm":145.0,"duration":114,"songName":"Ocarina of Time Medley","songSubName":"Michiko Naruke","songAuthorName":"Todokete","levelAuthorName":"todokete"},"stats":{"plays":0,"downloads":4995,"upvotes":2238,"downvotes":95,"score":0.9148},"uploaded":"2018-12-07T00:16:02Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"00b539e86ea3f0b1e966544a297fb4942e499e6f","key":"243c","state":"Published","createdAt":"2018-12-07T00:16:02Z","sageScore":5,"diffs":[{"njs":11.0,"offset":0.0,"notes":239,"bombs":0,"obstacles":0,"nps":2.179,"length":265.0,"characteristic":"Standard","difficulty":"Hard","events":882,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":109.655,"paritySummary":{"errors":34,"warns":8,"resets":0},"stars":1.33},{"njs":14.0,"offset":0.0,"notes":330,"bombs":0,"obstacles":0,"nps":3.008,"length":265.0,"characteristic":"Standard","difficulty":"Expert","events":882,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":109.655,"paritySummary":{"errors":37,"warns":37,"resets":0},"stars":2.97}],"downloadURL":"https://cdn.beatsaver.com/00b539e86ea3f0b1e966544a297fb4942e499e6f.zip","coverURL":"https://cdn.beatsaver.com/00b539e86ea3f0b1e966544a297fb4942e499e6f.jpg","previewURL":"https://cdn.beatsaver.com/00b539e86ea3f0b1e966544a297fb4942e499e6f.mp3"}],"createdAt":"2018-12-07T00:16:02Z","updatedAt":"2018-12-07T00:16:02Z","lastPublishedAt":"2018-12-07T00:16:02Z"},{"id":"115c2","name":"[Wall Map] Alan Walker - Darkside (feat. Au/Ra and Tomine Harket)","description":"-FALL INTO THE DARKSIDE-\n\nMy first big wall map to feature ne 1.2 pogger, be prepared for a long load time and possible lag spikes.\nThanks to Rizthesnuggie and Liams2005 for contributing their maps and for putting up with my shit throughout this :)\nThanks to Krueger for answering all my programming questions.\n\nKrueger's Beatsaber Vids: https://www.youtube.com/watch?v=Q0hNfhk4Ngs&t=142s\nPlaythrough: https://www.youtube.com/watch?v=9BqzyBwFPE4\n\nmy ne tool: https://github.com/thelightdesigner/ScuffedWalls/releases/tag/v0.5.0-beta\n\nRequirements:\nNoodle Extensions\nChroma\nCustom JSON Data","uploader":{"id":73008,"name":"thelightdesigner","uniqueSet":true,"hash":"5cff0b7798cc5a672c85627a","avatar":"https://cdn.beatsaver.com/avatar/480555157952659489.png","type":"DISCORD"},"metadata":{"bpm":170.0,"duration":178,"songName":"Darkside","songSubName":"(ft. Au/Ra & Tomine Harket)","songAuthorName":"Alan Walker","levelAuthorName":"Liam, Riz & KyleT"},"stats":{"plays":0,"downloads":3946,"upvotes":1365,"downvotes":46,"score":0.9147},"uploaded":"2020-11-27T05:08:50.986Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"713e301fc4f774edf4ea1001a19dd5bf7e3f4ce6","key":"115c2","state":"Published","createdAt":"2020-11-27T05:08:50.986Z","sageScore":1,"diffs":[{"njs":16.0,"offset":0.0,"notes":500,"bombs":24,"obstacles":65952,"nps":2.905,"length":487.667,"characteristic":"Standard","difficulty":"Hard","events":1,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":172.118,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":17.0,"offset":0.0,"notes":610,"bombs":36,"obstacles":65952,"nps":3.571,"length":484.0,"characteristic":"Standard","difficulty":"Expert","events":1,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":170.824,"paritySummary":{"errors":1,"warns":0,"resets":12}},{"njs":18.0,"offset":0.0,"notes":866,"bombs":0,"obstacles":65952,"nps":5.07,"length":484.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":1,"chroma":true,"me":false,"ne":true,"cinema":false,"seconds":170.824,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/713e301fc4f774edf4ea1001a19dd5bf7e3f4ce6.zip","coverURL":"https://cdn.beatsaver.com/713e301fc4f774edf4ea1001a19dd5bf7e3f4ce6.jpg","previewURL":"https://cdn.beatsaver.com/713e301fc4f774edf4ea1001a19dd5bf7e3f4ce6.mp3"}],"createdAt":"2020-11-27T05:08:50.986Z","updatedAt":"2020-11-27T05:08:50.986Z","lastPublishedAt":"2020-11-27T05:08:50.986Z"},{"id":"57cb","name":"CAN CAN WORLD","description":"Twitter: https://twitter.com/Dack731","uploader":{"id":4285250,"name":"dack","uniqueSet":true,"hash":"5cff0b7598cc5a672c852c6f","avatar":"https://cdn.beatsaver.com/avatar/297344689798119424.png","type":"DISCORD"},"metadata":{"bpm":158.0,"duration":297,"songName":"CAN CAN WORLD","songSubName":"","songAuthorName":"MAKKERONI","levelAuthorName":"Dack"},"stats":{"plays":0,"downloads":813,"upvotes":523,"downvotes":6,"score":0.9147},"uploaded":"2019-07-18T23:50:08.241Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"d2dab61784b612b9b807e127260a81ed974315af","key":"57cb","state":"Published","createdAt":"2019-07-18T23:50:08.241Z","sageScore":3,"diffs":[{"njs":12.0,"offset":0.0,"notes":531,"bombs":0,"obstacles":114,"nps":1.828,"length":765.0,"characteristic":"Standard","difficulty":"Normal","events":1776,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":290.506,"paritySummary":{"errors":14,"warns":18,"resets":0}},{"njs":13.0,"offset":0.0,"notes":806,"bombs":0,"obstacles":114,"nps":2.774,"length":765.0,"characteristic":"Standard","difficulty":"Hard","events":1776,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":290.506,"paritySummary":{"errors":12,"warns":11,"resets":0}},{"njs":14.0,"offset":0.0,"notes":1150,"bombs":0,"obstacles":110,"nps":3.959,"length":765.0,"characteristic":"Standard","difficulty":"Expert","events":1776,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":290.506,"paritySummary":{"errors":5,"warns":9,"resets":0}},{"njs":17.0,"offset":0.0,"notes":1399,"bombs":8,"obstacles":114,"nps":4.816,"length":765.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":1784,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":290.506,"paritySummary":{"errors":31,"warns":28,"resets":2}}],"downloadURL":"https://cdn.beatsaver.com/d2dab61784b612b9b807e127260a81ed974315af.zip","coverURL":"https://cdn.beatsaver.com/d2dab61784b612b9b807e127260a81ed974315af.jpg","previewURL":"https://cdn.beatsaver.com/d2dab61784b612b9b807e127260a81ed974315af.mp3"}],"createdAt":"2019-07-18T23:50:08.241Z","updatedAt":"2019-07-18T23:50:08.241Z","lastPublishedAt":"2019-07-18T23:50:08.241Z"},{"id":"66f","name":"This Is Gospel - Panic! At The Disco","description":"Expert - Hard - Normal Charts\nLighting Events\n\nhttps://twitter.com/TheDownyCat\nhttps://www.twitch.tv/downycat\nhttps://streamlabs.com/downycat/tip","uploader":{"id":4285982,"name":"downycat","uniqueSet":true,"hash":"5cff0b7398cc5a672c84ede5","avatar":"https://cdn.beatsaver.com/avatar/173538829888782336.png","type":"DISCORD"},"metadata":{"bpm":156.0,"duration":180,"songName":"This Is Gospel","songSubName":"Panic! At The Disco","songAuthorName":"DownyCat","levelAuthorName":"downycat"},"stats":{"plays":0,"downloads":2221,"upvotes":1421,"downvotes":49,"score":0.9147},"uploaded":"2018-06-24T10:25:39Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"e14ecfe4def439051ae404353aae6aabc7d1e05f","key":"66f","state":"Published","createdAt":"2018-06-24T10:25:39Z","sageScore":4,"diffs":[{"njs":10.0,"offset":0.0,"notes":382,"bombs":0,"obstacles":14,"nps":2.178,"length":455.999,"characteristic":"Standard","difficulty":"Normal","events":970,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":175.384,"paritySummary":{"errors":47,"warns":12,"resets":0}},{"njs":10.0,"offset":0.0,"notes":619,"bombs":0,"obstacles":14,"nps":3.529,"length":456.0,"characteristic":"Standard","difficulty":"Hard","events":970,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":175.385,"paritySummary":{"errors":77,"warns":55,"resets":0}},{"njs":10.0,"offset":0.0,"notes":733,"bombs":0,"obstacles":14,"nps":4.179,"length":456.0,"characteristic":"Standard","difficulty":"Expert","events":970,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":175.385,"paritySummary":{"errors":33,"warns":25,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/e14ecfe4def439051ae404353aae6aabc7d1e05f.zip","coverURL":"https://cdn.beatsaver.com/e14ecfe4def439051ae404353aae6aabc7d1e05f.jpg","previewURL":"https://cdn.beatsaver.com/e14ecfe4def439051ae404353aae6aabc7d1e05f.mp3"}],"createdAt":"2018-06-24T10:25:39Z","updatedAt":"2018-06-24T10:25:39Z","lastPublishedAt":"2018-06-24T10:25:39Z"},{"id":"4739","name":"Paramore - Decode","description":"Twilight = Hard\r\nParamore = Expert","uploader":{"id":4285107,"name":"kikaeaeon","uniqueSet":true,"hash":"5cff0b7498cc5a672c85109b","avatar":"https://cdn.beatsaver.com/avatar/103715469822816256.png","type":"DISCORD"},"metadata":{"bpm":164.0,"duration":262,"songName":"Decode","songSubName":"Paramore","songAuthorName":"KikaeAeon","levelAuthorName":"kikaeaeon"},"stats":{"plays":0,"downloads":1976,"upvotes":950,"downvotes":25,"score":0.9146},"uploaded":"2019-04-20T06:10:32Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"964d8f8c41aaf56aa2cfc06072eff70f599d6a3f","key":"4739","state":"Published","createdAt":"2019-04-20T06:10:32Z","sageScore":6,"diffs":[{"njs":10.0,"offset":0.0,"notes":616,"bombs":0,"obstacles":16,"nps":2.556,"length":658.75,"characteristic":"Standard","difficulty":"Hard","events":798,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":241.006,"paritySummary":{"errors":20,"warns":8,"resets":0}},{"njs":15.0,"offset":0.0,"notes":983,"bombs":0,"obstacles":16,"nps":4.079,"length":658.75,"characteristic":"Standard","difficulty":"Expert","events":1165,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":241.006,"paritySummary":{"errors":28,"warns":23,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/964d8f8c41aaf56aa2cfc06072eff70f599d6a3f.zip","coverURL":"https://cdn.beatsaver.com/964d8f8c41aaf56aa2cfc06072eff70f599d6a3f.jpg","previewURL":"https://cdn.beatsaver.com/964d8f8c41aaf56aa2cfc06072eff70f599d6a3f.mp3"}],"createdAt":"2019-04-20T06:10:32Z","updatedAt":"2019-04-20T06:10:32Z","lastPublishedAt":"2019-04-20T06:10:32Z"},{"id":"9a3f","name":"[Tokyo Machine Pack] Tokyo Machine - BUBBLES","description":"2/3\nPart of the Tokyo Machine Pack, a collab between Pixelguy, CyanSnow and I.\nMap and lights both by me.\n\nCyanSnow's account: https://beatsaver.com/uploader/5cff0b7698cc5a672c8543ac\nPixelguymm's account: https://beatsaver.com/uploader/5cff0b7698cc5a672c8541a8\n\nCheck out the trailer for the pack here: https://www.youtube.com/watch?v=lStPUnecsD8","uploader":{"id":3376,"name":"firestrikecm","uniqueSet":true,"hash":"5cff0b7698cc5a672c85479f","avatar":"https://cdn.beatsaver.com/avatar/3376.jpg","type":"SIMPLE"},"metadata":{"bpm":128.0,"duration":232,"songName":"BUBBLES","songSubName":"","songAuthorName":"Tokyo Machine","levelAuthorName":"FireStrike"},"stats":{"plays":0,"downloads":2141,"upvotes":926,"downvotes":24,"score":0.9145},"uploaded":"2020-04-12T18:21:41.920Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"d4b087ffab62b7994ce433969c21ef6b29462163","key":"9a3f","state":"Published","createdAt":"2020-04-12T18:21:41.920Z","sageScore":5,"diffs":[{"njs":20.0,"offset":0.7,"notes":883,"bombs":0,"obstacles":10,"nps":3.868,"length":487.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":3192,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":228.281,"paritySummary":{"errors":3,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/d4b087ffab62b7994ce433969c21ef6b29462163.zip","coverURL":"https://cdn.beatsaver.com/d4b087ffab62b7994ce433969c21ef6b29462163.jpg","previewURL":"https://cdn.beatsaver.com/d4b087ffab62b7994ce433969c21ef6b29462163.mp3"}],"createdAt":"2020-04-12T18:21:41.920Z","updatedAt":"2020-04-12T18:21:41.920Z","lastPublishedAt":"2020-04-12T18:21:41.920Z"},{"id":"7578","name":"Shape of You [Punk Goes Pop Vol.1] - Our Last Night","description":"A rock cover of \"Shape of You\" by rock band, Our Last Night. Original song by Ed Sheeran.\n\nEDIT: Fixed one missing note mismap","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":192.0,"duration":240,"songName":"Shape of You (Rock Cover)","songSubName":"","songAuthorName":"Our Last Night","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":2427,"upvotes":618,"downvotes":10,"score":0.9145},"uploaded":"2019-12-10T17:53:07.422Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"dfff04c4d50466e5a6c9b72466af5e72aee623c3","key":"7578","state":"Published","createdAt":"2019-12-10T17:53:07.422Z","sageScore":4,"diffs":[{"njs":16.0,"offset":0.0,"notes":1039,"bombs":0,"obstacles":6,"nps":4.421,"length":752.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":2377,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":235.0,"paritySummary":{"errors":59,"warns":56,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/dfff04c4d50466e5a6c9b72466af5e72aee623c3.zip","coverURL":"https://cdn.beatsaver.com/dfff04c4d50466e5a6c9b72466af5e72aee623c3.jpg","previewURL":"https://cdn.beatsaver.com/dfff04c4d50466e5a6c9b72466af5e72aee623c3.mp3"}],"createdAt":"2019-12-10T17:53:07.422Z","updatedAt":"2019-12-10T17:53:07.422Z","lastPublishedAt":"2019-12-10T17:53:07.422Z"},{"id":"7375","name":"Martin O' Donnell - Tip of the Spear (Halo Reach)","description":"#16\nAnyone else hyped for Halo Reach tomorrow? I know I am, probably my favorite FPS franchise. Time to grind back to where I was (even though leveling is different). Anyway, here's one of the songs from the game.\n\nN/S:\nEasy: 0.84\nNormal: 1.22\nHard (Heroic): 2.12\nExpert (Legendary): 2.61\nLights: 666 (998 on expert/legendary somehow)","uploader":{"id":4284294,"name":"eop-glacier","uniqueSet":true,"hash":"5d50e360adb1a20006305ca0","avatar":"https://cdn.beatsaver.com/avatar/459209214376804363.png","type":"DISCORD"},"metadata":{"bpm":126.0,"duration":186,"songName":"Tip of the Spear","songSubName":"","songAuthorName":"Martin O' Donnell","levelAuthorName":"EOP Glacier"},"stats":{"plays":0,"downloads":2106,"upvotes":688,"downvotes":13,"score":0.9145},"uploaded":"2019-12-03T04:18:47.641Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"16e10bdc52ee5a515fab9661df0efffcaa3712d3","key":"7375","state":"Published","createdAt":"2019-12-03T04:18:47.641Z","sageScore":4,"diffs":[{"njs":11.0,"offset":0.0,"notes":158,"bombs":0,"obstacles":7,"nps":1.009,"length":329.0,"characteristic":"Standard","difficulty":"Easy","events":663,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":156.667,"paritySummary":{"errors":6,"warns":0,"resets":0}},{"njs":13.0,"offset":0.0,"notes":229,"bombs":0,"obstacles":10,"nps":1.462,"length":329.0,"characteristic":"Standard","difficulty":"Normal","events":663,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":156.667,"paritySummary":{"errors":1,"warns":0,"resets":0}},{"njs":15.5,"offset":0.0,"notes":397,"bombs":0,"obstacles":9,"nps":2.533,"length":329.075,"characteristic":"Standard","difficulty":"Hard","events":663,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":156.702,"paritySummary":{"errors":2,"warns":0,"resets":0}},{"njs":18.0,"offset":0.2,"notes":489,"bombs":0,"obstacles":25,"nps":3.121,"length":329.0,"characteristic":"Standard","difficulty":"Expert","events":995,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":156.667,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/16e10bdc52ee5a515fab9661df0efffcaa3712d3.zip","coverURL":"https://cdn.beatsaver.com/16e10bdc52ee5a515fab9661df0efffcaa3712d3.jpg","previewURL":"https://cdn.beatsaver.com/16e10bdc52ee5a515fab9661df0efffcaa3712d3.mp3"}],"createdAt":"2019-12-03T04:18:47.641Z","updatedAt":"2019-12-03T04:18:47.641Z","lastPublishedAt":"2019-12-03T04:18:47.641Z"},{"id":"5a7c","name":"Bon Jovi - Livin' on a Prayer","description":"Its been waay too long since I last released a map. Been on a break from Beatsaber lately but now that I'm back I hope I can carry on getting out monthly maps like I used to.\nThis song is victim to some pretty nasty variable BPM, but hopefully if I've done it right you wont be able to notice any timing issues ;) Regardless, Hopefully you can give it a go and let me know what you think!\nVideo preview: https://www.youtube.com/watch?v=eYKJrkcHj0I","uploader":{"id":4785,"name":"stumi","uniqueSet":false,"hash":"5cff0b7398cc5a672c84f720","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro","type":"SIMPLE"},"metadata":{"bpm":121.8,"duration":248,"songName":"Livin' on a Prayer","songSubName":"","songAuthorName":"Bon Jovi","levelAuthorName":"Stumi"},"stats":{"plays":0,"downloads":8093,"upvotes":1356,"downvotes":46,"score":0.9145},"uploaded":"2019-08-03T20:42:08.797Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"8e4e798189ddecb9f49f624d6aa6a0648dd2650b","key":"5a7c","state":"Published","createdAt":"2019-08-03T20:42:08.797Z","sageScore":2,"diffs":[{"njs":10.0,"offset":0.0,"notes":253,"bombs":4,"obstacles":48,"nps":1.12,"length":458.614,"characteristic":"Standard","difficulty":"Easy","events":1973,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":225.918,"paritySummary":{"errors":59,"warns":11,"resets":2}},{"njs":11.0,"offset":0.0,"notes":432,"bombs":0,"obstacles":90,"nps":1.914,"length":458.125,"characteristic":"Standard","difficulty":"Normal","events":1974,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":225.677,"paritySummary":{"errors":58,"warns":20,"resets":0}},{"njs":13.0,"offset":0.0,"notes":755,"bombs":0,"obstacles":79,"nps":3.345,"length":458.125,"characteristic":"Standard","difficulty":"Hard","events":1973,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":225.677,"paritySummary":{"errors":45,"warns":58,"resets":0}},{"njs":15.0,"offset":0.0,"notes":920,"bombs":0,"obstacles":86,"nps":4.077,"length":458.125,"characteristic":"Standard","difficulty":"Expert","events":1973,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":225.677,"paritySummary":{"errors":43,"warns":47,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/8e4e798189ddecb9f49f624d6aa6a0648dd2650b.zip","coverURL":"https://cdn.beatsaver.com/8e4e798189ddecb9f49f624d6aa6a0648dd2650b.jpg","previewURL":"https://cdn.beatsaver.com/8e4e798189ddecb9f49f624d6aa6a0648dd2650b.mp3"}],"createdAt":"2019-08-03T20:42:08.797Z","updatedAt":"2019-08-03T20:42:08.797Z","lastPublishedAt":"2019-08-03T20:42:08.797Z"},{"id":"1fee","name":"Wavin' Flag (100k Contest)","description":"This is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes. Go to https://bsaber.com/100k-contest/ to register!","uploader":{"id":2521,"name":"darkgrisen","uniqueSet":true,"hash":"5cff0b7398cc5a672c84fe44","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84fe44?d=retro","type":"SIMPLE"},"metadata":{"bpm":152.0,"duration":215,"songName":"Wavin' Flag (100k Contest)","songSubName":"K'NAAN","songAuthorName":"DarkGrisen","levelAuthorName":"DarkGrisen"},"stats":{"plays":0,"downloads":4479,"upvotes":1244,"downvotes":40,"score":0.9145},"uploaded":"2018-11-12T17:47:43Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"de9c89b59023a9e30e2c4dfc9b63dd30807b68cb","key":"1fee","state":"Published","createdAt":"2018-11-12T17:47:43Z","sageScore":6,"diffs":[{"njs":9.0,"offset":0.0,"notes":157,"bombs":0,"obstacles":2,"nps":0.765,"length":520.0,"characteristic":"Standard","difficulty":"Easy","events":528,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":205.263,"paritySummary":{"errors":18,"warns":14,"resets":0}},{"njs":9.0,"offset":0.0,"notes":360,"bombs":0,"obstacles":2,"nps":1.754,"length":520.0,"characteristic":"Standard","difficulty":"Normal","events":528,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":205.263,"paritySummary":{"errors":54,"warns":25,"resets":0}},{"njs":10.0,"offset":0.0,"notes":496,"bombs":0,"obstacles":2,"nps":2.416,"length":520.0,"characteristic":"Standard","difficulty":"Hard","events":528,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":205.263,"paritySummary":{"errors":46,"warns":40,"resets":0}},{"njs":11.0,"offset":0.0,"notes":676,"bombs":0,"obstacles":2,"nps":3.293,"length":520.0,"characteristic":"Standard","difficulty":"Expert","events":528,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":205.263,"paritySummary":{"errors":58,"warns":79,"resets":0}},{"njs":12.0,"offset":0.0,"notes":869,"bombs":0,"obstacles":2,"nps":4.234,"length":520.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":528,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":205.263,"paritySummary":{"errors":47,"warns":72,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/de9c89b59023a9e30e2c4dfc9b63dd30807b68cb.zip","coverURL":"https://cdn.beatsaver.com/de9c89b59023a9e30e2c4dfc9b63dd30807b68cb.jpg","previewURL":"https://cdn.beatsaver.com/de9c89b59023a9e30e2c4dfc9b63dd30807b68cb.mp3"}],"createdAt":"2018-11-12T17:47:43Z","updatedAt":"2018-11-12T17:47:43Z","lastPublishedAt":"2018-11-12T17:47:43Z"},{"id":"b741","name":"Eskimo Callboy - Hypa Hypa","description":"Genre: Post-Hardcore / Metalcore / Electronic\n\nIf you don't want to see flying words or don't have MappingExtensions, just play \"No Lyrics\" difficult.\n\nPreview by Kira Argenta: https://www.youtube.com/watch?v=pFSpAzmNbJo\nPreview by Superritchman: https://www.youtube.com/watch?v=XwGZQNPI08c\n\nFeedback (Discord): ExistenceExpire#9858\nFeedback and support: https://ko-fi.com/existenceexpire","uploader":{"id":69683,"name":"existenceexpire","uniqueSet":true,"hash":"5e9e16bb2a34090006a1aed5","avatar":"https://cdn.beatsaver.com/avatar/226078773517352960.png","type":"DISCORD"},"metadata":{"bpm":152.0,"duration":210,"songName":"Hypa Hypa","songSubName":"","songAuthorName":"Eskimo Callboy","levelAuthorName":"ExistenceExpire"},"stats":{"plays":0,"downloads":1477,"upvotes":662,"downvotes":12,"score":0.9144},"uploaded":"2020-06-28T18:04:59.590Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"b39e9d698422517226f24666ebd7ae3d7aaf244a","key":"b741","state":"Published","createdAt":"2020-06-28T18:04:59.590Z","sageScore":5,"diffs":[{"njs":18.0,"offset":0.15301132,"notes":912,"bombs":59,"obstacles":0,"nps":4.499,"length":513.5,"characteristic":"Standard","difficulty":"Expert","events":3501,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":202.697,"paritySummary":{"errors":6,"warns":16,"resets":8}},{"njs":18.0,"offset":0.15301132,"notes":912,"bombs":59,"obstacles":12486,"nps":4.499,"length":513.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":3501,"chroma":false,"me":true,"ne":false,"cinema":false,"seconds":202.697,"paritySummary":{"errors":6,"warns":16,"resets":8}}],"downloadURL":"https://cdn.beatsaver.com/b39e9d698422517226f24666ebd7ae3d7aaf244a.zip","coverURL":"https://cdn.beatsaver.com/b39e9d698422517226f24666ebd7ae3d7aaf244a.jpg","previewURL":"https://cdn.beatsaver.com/b39e9d698422517226f24666ebd7ae3d7aaf244a.mp3"}],"createdAt":"2020-06-28T18:04:59.590Z","updatedAt":"2020-06-28T18:04:59.590Z","lastPublishedAt":"2020-06-28T18:04:59.590Z"},{"id":"5e06","name":"I Will Not Bow - Breaking Benjamin","description":"Shoutouts to twitch.tv/whipstickgostop and twitch.tv/xorosegold for playtesting!","uploader":{"id":4285077,"name":"ris","uniqueSet":true,"hash":"5cff0b7598cc5a672c8535df","avatar":"https://cdn.beatsaver.com/avatar/191597992061435904.png","type":"DISCORD"},"metadata":{"bpm":108.0,"duration":218,"songName":"I Will Not Bow","songSubName":"","songAuthorName":"Breaking Benjamin","levelAuthorName":"Ris"},"stats":{"plays":0,"downloads":2375,"upvotes":819,"downvotes":19,"score":0.9144},"uploaded":"2019-08-20T03:22:59.663Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"29c0a39db6a53375d2359f4a2a492a0ea784d04f","key":"5e06","state":"Published","createdAt":"2019-08-20T03:22:59.663Z","sageScore":4,"diffs":[{"njs":10.0,"offset":1.0,"notes":310,"bombs":6,"obstacles":4,"nps":1.516,"length":368.0,"characteristic":"Standard","difficulty":"Normal","events":318,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":204.444,"paritySummary":{"errors":60,"warns":40,"resets":0}},{"njs":12.0,"offset":1.0,"notes":619,"bombs":73,"obstacles":4,"nps":2.936,"length":379.5,"characteristic":"Standard","difficulty":"Hard","events":318,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":210.833,"paritySummary":{"errors":59,"warns":67,"resets":0}},{"njs":16.0,"offset":0.0,"notes":942,"bombs":73,"obstacles":4,"nps":4.468,"length":379.5,"characteristic":"Standard","difficulty":"Expert","events":318,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":210.833,"paritySummary":{"errors":59,"warns":69,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/29c0a39db6a53375d2359f4a2a492a0ea784d04f.zip","coverURL":"https://cdn.beatsaver.com/29c0a39db6a53375d2359f4a2a492a0ea784d04f.jpg","previewURL":"https://cdn.beatsaver.com/29c0a39db6a53375d2359f4a2a492a0ea784d04f.mp3"}],"createdAt":"2019-08-20T03:22:59.663Z","updatedAt":"2019-08-20T03:22:59.663Z","lastPublishedAt":"2019-08-20T03:22:59.663Z"},{"id":"29f8","name":"Camila Cabello - Havana (Remapped)","description":"Update: Added Hard Difficulty :)\r\n\r\nI know there's a map for Havana already, but I decided to make another version of it.\r\nPlaythrough:\r\nhttps://www.youtube.com/watch?v=d7KNm2BzcqA\r\n\r\nEnjoy!\r\n\r\n- ORYGINAL (aka guachitonico)","uploader":{"id":45130,"name":"guachitonico","uniqueSet":true,"hash":"5cff0b7698cc5a672c854035","avatar":"https://www.gravatar.com/avatar/5cff0b7698cc5a672c854035?d=retro","type":"SIMPLE"},"metadata":{"bpm":105.0,"duration":220,"songName":"Havana","songSubName":"Camila Cabello","songAuthorName":"Remapped by ORYGINAL","levelAuthorName":"guachitonico"},"stats":{"plays":0,"downloads":2862,"upvotes":1259,"downvotes":41,"score":0.9144},"uploaded":"2019-01-01T22:14:06Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"5d8e56195df0a9735b4c6db2884d3ee6a2f5acef","key":"29f8","state":"Published","createdAt":"2019-01-01T22:14:06Z","sageScore":6,"diffs":[{"njs":10.0,"offset":0.0,"notes":489,"bombs":0,"obstacles":9,"nps":2.325,"length":368.0,"characteristic":"Standard","difficulty":"Hard","events":1019,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":210.286,"paritySummary":{"errors":68,"warns":18,"resets":0}},{"njs":12.0,"offset":0.0,"notes":777,"bombs":0,"obstacles":9,"nps":3.695,"length":368.0,"characteristic":"Standard","difficulty":"Expert","events":1019,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":210.286,"paritySummary":{"errors":45,"warns":16,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/5d8e56195df0a9735b4c6db2884d3ee6a2f5acef.zip","coverURL":"https://cdn.beatsaver.com/5d8e56195df0a9735b4c6db2884d3ee6a2f5acef.jpg","previewURL":"https://cdn.beatsaver.com/5d8e56195df0a9735b4c6db2884d3ee6a2f5acef.mp3"}],"createdAt":"2019-01-01T22:14:06Z","updatedAt":"2019-01-01T22:14:06Z","lastPublishedAt":"2019-01-01T22:14:06Z"},{"id":"22bf","name":"Hold Me Down - Halsey","description":"YouTube Playthrough: https://www.youtube.com/channel/UCeG7cXNLr6dKSYBKqoUvcbQ\r\nDifficulties: Expert+, Expert, Hard, Normal, Easy\r\nNote Jump Speeds From E+ to Easy: 15, 13, 11, 10, 10\r\nLighting & Events: Yes\r\nBPM: 146","uploader":{"id":30754,"name":"styngme","uniqueSet":false,"hash":"5cff0b7298cc5a672c84e9cd","avatar":"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9cd?d=retro","type":"SIMPLE"},"metadata":{"bpm":146.0,"duration":208,"songName":"Hold Me Down","songSubName":"Halsey","songAuthorName":"StyngMe","levelAuthorName":"styngme"},"stats":{"plays":0,"downloads":4092,"upvotes":1204,"downvotes":38,"score":0.9144},"uploaded":"2018-11-29T03:58:10Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"a6cced35a0ac357cc16d5e4328be59e52339a157","key":"22bf","state":"Published","createdAt":"2018-11-29T03:58:10Z","sageScore":7,"diffs":[{"njs":10.0,"offset":0.0,"notes":483,"bombs":0,"obstacles":59,"nps":2.449,"length":480.0,"characteristic":"Standard","difficulty":"Easy","events":1826,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":197.26,"paritySummary":{"errors":19,"warns":15,"resets":0}},{"njs":10.0,"offset":0.0,"notes":588,"bombs":0,"obstacles":62,"nps":2.981,"length":480.0,"characteristic":"Standard","difficulty":"Normal","events":1826,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":197.26,"paritySummary":{"errors":40,"warns":36,"resets":0}},{"njs":11.0,"offset":0.0,"notes":674,"bombs":0,"obstacles":65,"nps":3.417,"length":480.0,"characteristic":"Standard","difficulty":"Hard","events":1826,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":197.26,"paritySummary":{"errors":46,"warns":53,"resets":0}},{"njs":13.0,"offset":0.0,"notes":697,"bombs":0,"obstacles":97,"nps":3.533,"length":480.0,"characteristic":"Standard","difficulty":"Expert","events":1826,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":197.26,"paritySummary":{"errors":53,"warns":80,"resets":0}},{"njs":15.0,"offset":0.0,"notes":814,"bombs":0,"obstacles":114,"nps":4.127,"length":480.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":1826,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":197.26,"paritySummary":{"errors":50,"warns":75,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/a6cced35a0ac357cc16d5e4328be59e52339a157.zip","coverURL":"https://cdn.beatsaver.com/a6cced35a0ac357cc16d5e4328be59e52339a157.jpg","previewURL":"https://cdn.beatsaver.com/a6cced35a0ac357cc16d5e4328be59e52339a157.mp3"}],"createdAt":"2018-11-29T03:58:10Z","updatedAt":"2018-11-29T03:58:10Z","lastPublishedAt":"2018-11-29T03:58:10Z"},{"id":"198ba","name":"Hades - The Unseen Ones","description":"One of the many great game OSTs from the game Hades !\nThis time however.......we are talking rock and roll, the epic guitars by Masahiro Aoki and Daisuke Kurosawa directed by Darren Korb !\nSome of you that played the game may not of heard of this OST.....you will need to keep on playing to encounter it !\n\nWARNING : THE DESCRIPTION MAY CONTAIN SPOILERS, PLEASE TAKE NOTE !\n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . \nIf you wish to take a lore dive with the OST based on my understanding of the story the characters POV, keep reading :D !\n...................................................................................................................................\nNarrator : Prince Zagreus, son of Hades - God of the Dead and ruler of the Underworld, has embarked on a mission to escape the Underworld to the surface.\nWhat started as a personal affair with his father and a personal will to breath fresh air from the surface turned into a dedicated mission as he discovered that his very own mother was alive and living on the surface !\nAfter the first initial escape in which Zagreus met up with her, he suddenly started to understand many circles in his life that were still very much opened thus far.\n\nUnfortunately.......each time Zagreus manages to escape and meet his mother for a chat, the Styx grant him only but a moment to exchange a few words with his mother on her cabin before he gets engulfed and taken aback to the underworld.\n\nDetermined to keep visiting his mother despite the ordeal and in order to understand why she was missing from his life, he keeps on going.\n\nHades, being unpleased by his sons rampage, decides to punish him by a \"Pact of Punisment\" in which Zagreus will need to sign in order to grow stronger on his expedition.\n\nOnce came a time where Zagreus pact option became increasingly intense that he had to resort to..... other punishment options that he did not know the consequences of.....\nMeanwhile, Zagreus is preparing for yet another escape attempt.\n\nZagreus : \"Hmm.....which pact should I choose this time.......what's this? Extreme Measures?\"\nNarrator : reading through the pact, Zagreus understood it meant that each underworld boss will be significantly stronger with new weapons at thier disposal.........including the last one that so happens to be his very own father !\nZagreus : \"How hard can it be? let's go ! \"\n\nNarrator: And thus Zagreus began yet another escape attempt, with the thought of the pact in his mind......\n\n.......Time goes by..............\n\nAfter fighting the Fury sisters, vanquishing the Hydra, beating Theseus and Asterius and braving through the Satyr tunnels, he finally arrives to his final showdown.....\nOpening the gates to the surface, Zagreus Green and Red eyes spot a figure in Golden-Red armor, this figure was also the final obstacle to his mothers cabin....\n\nThus the two begin a dialog :\nZagrues : \"Think you can beat me this time, Father?\"\nHades : \"I was reviewing the terms of the Pact of Punishment to which you are bound.\nEven when my servants resort to extreme measures, they were still unable to surpass you then.\nSo now.....it is my turn !\"\nZagrues : \"Caught you unprepared, did I? After Theseus and his Macedonian, I half-expected to see you thundering around by some golden chariot of your own, drawn by sable steeds, that sort of thing\nBut......it's just you.....\"\nHades : \"It is just me indeed.\nHowever...that should be more than necassary here.\nNo holding back this time Zagrues, are you ready?\"\nZagrues : \"Let's go !!\" \n\nThus the two begin yet another brawl of darkness and blood.\nAfter exchanging countless blows, Zagrues manages to down his father twice but not before suffering a few himself, as Hades falls for the second time, Zagrues expects him to vanish back to the underwrold as would normally happen, however.......\n\nHades : \" Urgh....no.......I am not......finished......with you........yet!!!\"\nNarrator : and thus to Zagrues complete surprise, his father once again regains his balance and is fired with a fighting spirit he has never yet seen.\nHades : \"I can still fight !!\"\nZagrues : \"Are you serious?!\"\n\nHades : \"DARKNESS !\"\nNarrator : Hades vanishes once more and engulfes the entire region in darkness, which hinders Zagrues abillity to see and regains his whereabouts..........\nJust then, Zagrues remembered that he carried his father's keepsake sigil, one which allowed him to use his father's powers himself !\nZagrues : \"Two can play at that game.........DARKNESS ! \"\n\nAnd thus, both Hades and Zagrues vanished from the view of the naked eye, off to the final and decisive showdown of Blood and Darkness..........such is the familly......of The Unseen Ones.\n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\nAt long last I am happy to present you all one of the most pumping OSTs from the Hades soundtrack !\nTo make it more convenient, this map includes two mods to spice up the things !\nIn standard mode, you will be playing from Zagrues POV !\nHelp him beat and survive his fathers endless blows so he might see his mother once more !\nOr.....if you wish to take a different approach.\nIn One Saber mode you will infuse you sword with the power of darkness and take on the POV of no less than Hades himself !\nShow your son you can still best him in combat !\n.........................................................................................................................................\nMany thanks to monster, steg universe, Kaltern and the BSMG for providing the much needed feedback which helped forge this map and help get it to where it is now ! :)\n\nHope you enjoy ! :)\n\nMap preview by Javierattor - https://www.youtube.com/watch?v=namzq2MNvJ4\n","uploader":{"id":4285616,"name":"sp234","uniqueSet":true,"hash":"5f352ca7530c8e00061b14fe","avatar":"https://cdn.beatsaver.com/avatar/215418254980677643.png","type":"DISCORD"},"metadata":{"bpm":118.0,"duration":248,"songName":"Hades - The Unseen Ones","songSubName":"Game OST","songAuthorName":"Darren Korb","levelAuthorName":"Sp234"},"stats":{"plays":0,"downloads":6435,"upvotes":637,"downvotes":11,"score":0.9143},"uploaded":"2021-06-25T08:04:00.236Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"d93d094ae17f25dedaee7796f7ca9fc078dc5060","key":"198ba","state":"Published","createdAt":"2021-06-25T08:04:00.236Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.6,"notes":554,"bombs":0,"obstacles":65,"nps":2.269,"length":480.25,"characteristic":"Standard","difficulty":"Normal","events":5589,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":244.195,"paritySummary":{"errors":4,"warns":0,"resets":0}},{"njs":13.0,"offset":-0.1,"notes":812,"bombs":4,"obstacles":135,"nps":3.325,"length":480.25,"characteristic":"Standard","difficulty":"Hard","events":5589,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":244.195,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":16.0,"offset":-0.55,"notes":1238,"bombs":0,"obstacles":160,"nps":5.069,"length":480.292,"characteristic":"Standard","difficulty":"Expert","events":5591,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":244.216,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":16.0,"offset":-0.55,"notes":878,"bombs":0,"obstacles":113,"nps":3.595,"length":480.333,"characteristic":"OneSaber","difficulty":"Expert","events":5589,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":244.237,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/d93d094ae17f25dedaee7796f7ca9fc078dc5060.zip","coverURL":"https://cdn.beatsaver.com/d93d094ae17f25dedaee7796f7ca9fc078dc5060.jpg","previewURL":"https://cdn.beatsaver.com/d93d094ae17f25dedaee7796f7ca9fc078dc5060.mp3"}],"createdAt":"2021-06-25T08:04:00.236Z","updatedAt":"2021-06-25T08:04:00.236Z","lastPublishedAt":"2021-06-25T08:04:00.236Z"},{"id":"9725","name":"Dua Lipa - Break My Heart","description":"Dua Lipa - Break My Heart\nThis is my second Dua Lipa map and it was super fun to make and test! I hope you enjoy it. \nSpecial thanks to Treetrain1YT for testing this many times on both Steam and Quest.\n\nNormal - 2.09 NPS, 470 Notes, 10 NJS\nHard - 2.92 NPS, 655 Notes, 12 NJS\nExpert - 3.63 NPS, 814 Notes, 16 NJS","uploader":{"id":4285261,"name":"yomama","uniqueSet":true,"hash":"5e23f0a1054bbd0007bc1ed4","avatar":"https://cdn.beatsaver.com/avatar/153595294792155137.png","type":"DISCORD"},"metadata":{"bpm":113.0,"duration":223,"songName":"Break My Heart","songSubName":"","songAuthorName":"Dua Lipa","levelAuthorName":"yomama"},"stats":{"plays":0,"downloads":2890,"upvotes":942,"downvotes":25,"score":0.9143},"uploaded":"2020-04-04T03:17:06.970Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"e97457ce049dbd486326861e16125fac4bb24800","key":"9725","state":"Published","createdAt":"2020-04-04T03:17:06.970Z","sageScore":4,"diffs":[{"njs":10.0,"offset":0.0,"notes":470,"bombs":0,"obstacles":86,"nps":2.15,"length":411.75,"characteristic":"Standard","difficulty":"Normal","events":872,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":218.628,"paritySummary":{"errors":31,"warns":25,"resets":0}},{"njs":12.0,"offset":0.0,"notes":655,"bombs":0,"obstacles":96,"nps":2.998,"length":411.5,"characteristic":"Standard","difficulty":"Hard","events":1619,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":218.496,"paritySummary":{"errors":76,"warns":34,"resets":0}},{"njs":16.0,"offset":0.25,"notes":814,"bombs":0,"obstacles":89,"nps":3.725,"length":411.5,"characteristic":"Standard","difficulty":"Expert","events":2719,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":218.496,"paritySummary":{"errors":91,"warns":58,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/e97457ce049dbd486326861e16125fac4bb24800.zip","coverURL":"https://cdn.beatsaver.com/e97457ce049dbd486326861e16125fac4bb24800.jpg","previewURL":"https://cdn.beatsaver.com/e97457ce049dbd486326861e16125fac4bb24800.mp3"}],"createdAt":"2020-04-04T03:17:06.970Z","updatedAt":"2020-04-04T03:17:06.970Z","lastPublishedAt":"2020-04-04T03:17:06.970Z"},{"id":"3342","name":"No More Sorrow - Linkin Park","description":"133 BPM / 3:42 Runtime\r\nEasy / 288 Notes\r\nNormal / 394 Notes\r\nHard / 549 Notes\r\nExpert / 799 Notes\r\nExpert+ / 1032 Notes\r\n\r\nI was watching early Beat Saber gameplay and noticed how the player frequently put their sabers in the walls. It gave me an idea for the Expert+ map.\r\n\r\nGameplay: https://youtu.be/Wkng-fpz78w","uploader":{"id":4284981,"name":"skylerwallace","uniqueSet":true,"hash":"5cff0b7298cc5a672c84ea67","avatar":"https://cdn.beatsaver.com/avatar/398344856868487168.png","type":"DISCORD"},"metadata":{"bpm":133.0,"duration":222,"songName":"No More Sorrow","songSubName":"Linkin Park","songAuthorName":"Skyler Wallace","levelAuthorName":"skylerwallace"},"stats":{"plays":0,"downloads":2978,"upvotes":1002,"downvotes":28,"score":0.9143},"uploaded":"2019-02-03T07:55:09Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"e80f867f37808cd7cf1450327a4b445d2d0d8f02","key":"3342","state":"Published","createdAt":"2019-02-03T07:55:09Z","sageScore":8,"diffs":[{"njs":10.0,"offset":1.0,"notes":288,"bombs":7,"obstacles":7,"nps":1.321,"length":482.0,"characteristic":"Standard","difficulty":"Easy","events":5629,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":217.444,"paritySummary":{"errors":117,"warns":6,"resets":5}},{"njs":10.0,"offset":1.0,"notes":394,"bombs":5,"obstacles":10,"nps":1.807,"length":482.0,"characteristic":"Standard","difficulty":"Normal","events":5628,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":217.444,"paritySummary":{"errors":88,"warns":17,"resets":0}},{"njs":10.0,"offset":1.0,"notes":549,"bombs":4,"obstacles":11,"nps":2.518,"length":482.0,"characteristic":"Standard","difficulty":"Hard","events":5629,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":217.444,"paritySummary":{"errors":41,"warns":20,"resets":4}},{"njs":12.0,"offset":1.0,"notes":799,"bombs":4,"obstacles":17,"nps":3.664,"length":482.0,"characteristic":"Standard","difficulty":"Expert","events":5629,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":217.444,"paritySummary":{"errors":33,"warns":35,"resets":0}},{"njs":14.0,"offset":0.0,"notes":1032,"bombs":31,"obstacles":73,"nps":4.733,"length":482.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":5629,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":217.444,"paritySummary":{"errors":45,"warns":66,"resets":10}}],"downloadURL":"https://cdn.beatsaver.com/e80f867f37808cd7cf1450327a4b445d2d0d8f02.zip","coverURL":"https://cdn.beatsaver.com/e80f867f37808cd7cf1450327a4b445d2d0d8f02.jpg","previewURL":"https://cdn.beatsaver.com/e80f867f37808cd7cf1450327a4b445d2d0d8f02.mp3"}],"createdAt":"2019-02-03T07:55:09Z","updatedAt":"2019-02-03T07:55:09Z","lastPublishedAt":"2019-02-03T07:55:09Z"},{"id":"10674","name":"Spooky Scary Skeletons (Kasger DnB Remix)","description":"A nice Drum and Bass remix on theme with Halloween.\nYou can follow me on twitch for more awesomeness at https://www.twitch.tv/pkdan\nVideo preview of the map: https://www.youtube.com/watch?v=m3pFxj2jFHs&ab_channel=PKDan\n\nLength: 3:49\nNotes: 789 (Hard) / 1092 (Expert) / 1492 (Expert+)\nNJS: 14 (Hard) / 16 (Expert) / 20 (Expert+)\nBPM: 174","uploader":{"id":4284639,"name":"pkdan","uniqueSet":true,"hash":"5e6d07927abb00000681e8ee","avatar":"https://cdn.beatsaver.com/avatar/315553265091739650.png","type":"DISCORD"},"metadata":{"bpm":174.0,"duration":229,"songName":"Spooky Scary Skeletons (Kasger Remix)","songSubName":"","songAuthorName":"Andrew Gold","levelAuthorName":"pkdan"},"stats":{"plays":0,"downloads":4006,"upvotes":682,"downvotes":13,"score":0.9142},"uploaded":"2020-10-30T19:19:27.266Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"20341d92a0871dfdf2f8d39633274fdaa67a70ed","key":"10674","state":"Published","createdAt":"2020-10-30T19:19:27.266Z","sageScore":5,"diffs":[{"njs":14.0,"offset":0.3,"notes":789,"bombs":0,"obstacles":2,"nps":3.575,"length":640.0,"characteristic":"Standard","difficulty":"Hard","events":4093,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":220.69,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":16.0,"offset":0.0,"notes":1092,"bombs":0,"obstacles":2,"nps":4.948,"length":640.0,"characteristic":"Standard","difficulty":"Expert","events":4093,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":220.69,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":20.0,"offset":-0.3,"notes":1492,"bombs":0,"obstacles":2,"nps":6.761,"length":640.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":4093,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":220.69,"paritySummary":{"errors":0,"warns":0,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/20341d92a0871dfdf2f8d39633274fdaa67a70ed.zip","coverURL":"https://cdn.beatsaver.com/20341d92a0871dfdf2f8d39633274fdaa67a70ed.jpg","previewURL":"https://cdn.beatsaver.com/20341d92a0871dfdf2f8d39633274fdaa67a70ed.mp3"}],"createdAt":"2020-10-30T19:19:27.266Z","updatedAt":"2020-10-30T19:19:27.266Z","lastPublishedAt":"2020-10-30T19:19:27.266Z"},{"id":"4e81","name":"Katy Perry - Firework","description":"Thank you Joetastic for the lossless file","uploader":{"id":4285107,"name":"kikaeaeon","uniqueSet":true,"hash":"5cff0b7498cc5a672c85109b","avatar":"https://cdn.beatsaver.com/avatar/103715469822816256.png","type":"DISCORD"},"metadata":{"bpm":124.0,"duration":229,"songName":"Firework","songSubName":"Katy Perry","songAuthorName":"KikaeAeon","levelAuthorName":"kikaeaeon"},"stats":{"plays":0,"downloads":3779,"upvotes":1331,"downvotes":45,"score":0.9142},"uploaded":"2019-05-22T14:18:50Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"410a4f5ae778f9072b9136f0df5e151156cd81e3","key":"4e81","state":"Published","createdAt":"2019-05-22T14:18:50Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":563,"bombs":0,"obstacles":17,"nps":2.51,"length":463.5,"characteristic":"Standard","difficulty":"Hard","events":682,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":224.274,"paritySummary":{"errors":33,"warns":7,"resets":0}},{"njs":15.0,"offset":0.0,"notes":927,"bombs":0,"obstacles":26,"nps":4.133,"length":463.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":988,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":224.274,"paritySummary":{"errors":25,"warns":17,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/410a4f5ae778f9072b9136f0df5e151156cd81e3.zip","coverURL":"https://cdn.beatsaver.com/410a4f5ae778f9072b9136f0df5e151156cd81e3.jpg","previewURL":"https://cdn.beatsaver.com/410a4f5ae778f9072b9136f0df5e151156cd81e3.mp3"}],"createdAt":"2019-05-22T14:18:50Z","updatedAt":"2019-05-22T14:18:50Z","lastPublishedAt":"2019-05-22T14:18:50Z"},{"id":"1622c","name":"Gurenge (TV Size) [Demon Slayer: Kimetsu no Yaiba Opening] - LiSA","description":"","uploader":{"id":58338,"name":"Joetastic","uniqueSet":true,"hash":"5cff0b7498cc5a672c85050e","avatar":"https://cdn.beatsaver.com/avatar/227767566402191360.png","type":"DISCORD"},"metadata":{"bpm":135.0,"duration":90,"songName":"Gurenge (TV Size)","songSubName":"","songAuthorName":"LiSA","levelAuthorName":"Joetastic"},"stats":{"plays":0,"downloads":16462,"upvotes":896,"downvotes":23,"score":0.9141},"uploaded":"2021-04-01T08:54:27.557Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"62a63aa11f61623fdd69411bf73ab1082d4558d6","key":"1622c","state":"Published","createdAt":"2021-04-01T08:54:27.557Z","sageScore":5,"diffs":[{"njs":13.0,"offset":0.0,"notes":294,"bombs":0,"obstacles":10,"nps":3.375,"length":196.0,"characteristic":"Standard","difficulty":"Hard","events":12271,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":87.111,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":15.0,"offset":-0.2,"notes":399,"bombs":0,"obstacles":10,"nps":4.58,"length":196.0,"characteristic":"Standard","difficulty":"Expert","events":12271,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":87.111,"paritySummary":{"errors":2,"warns":2,"resets":0}},{"njs":18.0,"offset":-0.5,"notes":482,"bombs":0,"obstacles":18,"nps":5.533,"length":196.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":12268,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":87.111,"paritySummary":{"errors":3,"warns":5,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/62a63aa11f61623fdd69411bf73ab1082d4558d6.zip","coverURL":"https://cdn.beatsaver.com/62a63aa11f61623fdd69411bf73ab1082d4558d6.jpg","previewURL":"https://cdn.beatsaver.com/62a63aa11f61623fdd69411bf73ab1082d4558d6.mp3"}],"createdAt":"2021-04-01T08:54:27.557Z","updatedAt":"2021-04-01T08:54:27.557Z","lastPublishedAt":"2021-04-01T08:54:27.557Z"},{"id":"6888","name":"The Glory Days - Tia","description":"Expert and Hard diff companion to https://beatsaver.com/beatmap/56d0\nKikis lights, diffs by me. Modded by Fraies and Redmagi.","uploader":{"id":4284577,"name":"uninstaller","uniqueSet":true,"hash":"5cff0b7598cc5a672c85248e","avatar":"https://cdn.beatsaver.com/avatar/84840552935194624.png","type":"DISCORD"},"metadata":{"bpm":184.0,"duration":254,"songName":"The Glory Days","songSubName":"","songAuthorName":"Tia","levelAuthorName":"Kikis & Uninstaller"},"stats":{"plays":0,"downloads":2754,"upvotes":1511,"downvotes":55,"score":0.9141},"uploaded":"2019-10-08T01:17:01.471Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"a6ccabb105d0f2c24fe9f1dd6e4445782bc55616","key":"6888","state":"Published","createdAt":"2019-10-08T01:17:01.471Z","sageScore":6,"diffs":[{"njs":13.0,"offset":0.0,"notes":781,"bombs":30,"obstacles":11,"nps":3.243,"length":738.5,"characteristic":"Standard","difficulty":"Hard","events":3865,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":240.815,"paritySummary":{"errors":1,"warns":1,"resets":1},"stars":2.04},{"njs":15.0,"offset":0.0,"notes":1177,"bombs":32,"obstacles":11,"nps":4.888,"length":738.5,"characteristic":"Standard","difficulty":"Expert","events":3865,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":240.815,"paritySummary":{"errors":0,"warns":0,"resets":3},"stars":3.31}],"downloadURL":"https://cdn.beatsaver.com/a6ccabb105d0f2c24fe9f1dd6e4445782bc55616.zip","coverURL":"https://cdn.beatsaver.com/a6ccabb105d0f2c24fe9f1dd6e4445782bc55616.jpg","previewURL":"https://cdn.beatsaver.com/a6ccabb105d0f2c24fe9f1dd6e4445782bc55616.mp3"}],"createdAt":"2019-10-08T01:17:01.471Z","updatedAt":"2019-10-08T01:17:01.471Z","lastPublishedAt":"2019-10-08T01:17:01.471Z"},{"id":"5c92","name":"Caravan Palace - Lone Digger","description":"\nBPM: 124 | 3 Difficulties (Expert+, Expert, Hard) | Lighting done by me\n---------------------------------------------------------------------------------------------\n[Expert+]\nNJS: 19\nNotes: 1255\n---------------------------------------------------------------------------------------------\n[Expert]\nNotes: 986\nNJS: 18\n---------------------------------------------------------------------------------------------\n[Hard]\nNotes: 652\nNJS: 17\n---------------------------------------------------------------------------------------------\n\nMy Discord if you want to give feedback or just talk to me: Yun0#1355","uploader":{"id":18845,"name":"yun0","uniqueSet":true,"hash":"5cff0b7398cc5a672c84f6ca","avatar":"https://cdn.beatsaver.com/avatar/18845.jpg","type":"SIMPLE"},"metadata":{"bpm":124.0,"duration":231,"songName":"Lone Digger","songSubName":"","songAuthorName":"Caravan Palace","levelAuthorName":"Yun0"},"stats":{"plays":0,"downloads":2362,"upvotes":1174,"downvotes":37,"score":0.9141},"uploaded":"2019-08-13T03:30:08.712Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"928da96d4e5fcfeb87ac1cc6fcf6287b2f4c5e2d","key":"5c92","state":"Published","createdAt":"2019-08-13T03:30:08.712Z","sageScore":6,"diffs":[{"njs":17.0,"offset":0.0,"notes":652,"bombs":0,"obstacles":4,"nps":2.932,"length":459.5,"characteristic":"Standard","difficulty":"Hard","events":3826,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":222.339,"paritySummary":{"errors":0,"warns":0,"resets":0}},{"njs":18.0,"offset":-0.25,"notes":986,"bombs":0,"obstacles":6,"nps":4.435,"length":459.5,"characteristic":"Standard","difficulty":"Expert","events":3826,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":222.339,"paritySummary":{"errors":3,"warns":0,"resets":0}},{"njs":19.0,"offset":0.3,"notes":1255,"bombs":4,"obstacles":49,"nps":5.596,"length":463.5,"characteristic":"Standard","difficulty":"ExpertPlus","events":3826,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":224.274,"paritySummary":{"errors":9,"warns":6,"resets":2}}],"downloadURL":"https://cdn.beatsaver.com/928da96d4e5fcfeb87ac1cc6fcf6287b2f4c5e2d.zip","coverURL":"https://cdn.beatsaver.com/928da96d4e5fcfeb87ac1cc6fcf6287b2f4c5e2d.jpg","previewURL":"https://cdn.beatsaver.com/928da96d4e5fcfeb87ac1cc6fcf6287b2f4c5e2d.mp3"}],"createdAt":"2019-08-13T03:30:08.712Z","updatedAt":"2019-08-13T03:30:08.712Z","lastPublishedAt":"2019-08-13T03:30:08.712Z"},{"id":"1bc4","name":"Without Me (Nurko & Miles Away Remix) - Halsey","description":"Difficulties: Expert+ Only","uploader":{"id":30311,"name":"bennydabeast","uniqueSet":true,"hash":"5cff0b7298cc5a672c84e98d","avatar":"https://cdn.beatsaver.com/avatar/30311.jpg","type":"SIMPLE"},"metadata":{"bpm":140.0,"duration":257,"songName":"Without Me (Nurko & Miles Away Remix)","songSubName":"Halsey","songAuthorName":"BennyDaBeast","levelAuthorName":"bennydabeast"},"stats":{"plays":0,"downloads":1240,"upvotes":681,"downvotes":13,"score":0.9141},"uploaded":"2018-10-23T03:10:41Z","automapper":false,"ranked":false,"qualified":false,"versions":[{"hash":"e447ac77708869ac151546110aecda97acac2cab","key":"1bc4","state":"Published","createdAt":"2018-10-23T03:10:41Z","sageScore":5,"diffs":[{"njs":15.0,"offset":0.0,"notes":1206,"bombs":0,"obstacles":1,"nps":4.885,"length":576.0,"characteristic":"Standard","difficulty":"ExpertPlus","events":1646,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":246.857,"paritySummary":{"errors":102,"warns":151,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/e447ac77708869ac151546110aecda97acac2cab.zip","coverURL":"https://cdn.beatsaver.com/e447ac77708869ac151546110aecda97acac2cab.jpg","previewURL":"https://cdn.beatsaver.com/e447ac77708869ac151546110aecda97acac2cab.mp3"}],"createdAt":"2018-10-23T03:10:41Z","updatedAt":"2018-10-23T03:10:41Z","lastPublishedAt":"2018-10-23T03:10:41Z"},{"id":"900","name":"Limbo - Daddy Yankee","description":"If you don't at least try to limbo, you didn't really finish the map.","uploader":{"id":50121,"name":"ayewyn","uniqueSet":false,"hash":"5cff0b7398cc5a672c84f7ef","avatar":"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f7ef?d=retro","type":"SIMPLE"},"metadata":{"bpm":125.0,"duration":225,"songName":"Limbo","songSubName":"Daddy Yankee","songAuthorName":"Ayewyn","levelAuthorName":"ayewyn"},"stats":{"plays":0,"downloads":6900,"upvotes":2388,"downvotes":106,"score":0.9141},"uploaded":"2018-07-12T13:34:01Z","automapper":false,"ranked":true,"qualified":false,"versions":[{"hash":"2738e2374b821b6aa9839f128a70caae8333cb1c","key":"900","state":"Published","createdAt":"2018-07-12T13:34:01Z","sageScore":5,"diffs":[{"njs":10.0,"offset":0.0,"notes":232,"bombs":0,"obstacles":24,"nps":1.073,"length":450.5,"characteristic":"Standard","difficulty":"Easy","events":853,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":216.24,"paritySummary":{"errors":33,"warns":76,"resets":0},"stars":0.95},{"njs":10.0,"offset":0.0,"notes":464,"bombs":0,"obstacles":12,"nps":2.146,"length":450.5,"characteristic":"Standard","difficulty":"Normal","events":853,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":216.24,"paritySummary":{"errors":35,"warns":141,"resets":0}},{"njs":10.0,"offset":0.0,"notes":637,"bombs":0,"obstacles":12,"nps":2.943,"length":451.0,"characteristic":"Standard","difficulty":"Hard","events":853,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":216.48,"paritySummary":{"errors":34,"warns":190,"resets":0}},{"njs":10.0,"offset":0.0,"notes":689,"bombs":0,"obstacles":12,"nps":3.181,"length":451.25,"characteristic":"Standard","difficulty":"Expert","events":853,"chroma":false,"me":false,"ne":false,"cinema":false,"seconds":216.6,"paritySummary":{"errors":44,"warns":187,"resets":0}}],"downloadURL":"https://cdn.beatsaver.com/2738e2374b821b6aa9839f128a70caae8333cb1c.zip","coverURL":"https://cdn.beatsaver.com/2738e2374b821b6aa9839f128a70caae8333cb1c.jpg","previewURL":"https://cdn.beatsaver.com/2738e2374b821b6aa9839f128a70caae8333cb1c.mp3"}],"createdAt":"2018-07-12T13:34:01Z","updatedAt":"2018-07-12T13:34:01Z","lastPublishedAt":"2018-07-12T13:34:01Z"}] \ No newline at end of file diff --git a/src/lib/soundpool.js b/src/lib/soundpool.js deleted file mode 100644 index b0698206a..000000000 --- a/src/lib/soundpool.js +++ /dev/null @@ -1,27 +0,0 @@ -/* global Audio */ -module.exports = function SoundPool (src, volume) { - var currSound = 0; - var pool = []; - var sound; - - sound = new Audio(src); - sound.volume = volume; - pool.push(sound); - - return { - play: function () { - // Dynamic size pool. - if (pool[currSound].currentTime !== 0 || !pool[currSound].ended) { - sound = new Audio(src); - sound.volume = volume; - pool.push(sound); - currSound++; - } - - if (pool[currSound].currentTime === 0 || pool[currSound].ended) { - pool[currSound].play(); - } - currSound = (currSound + 1) % pool.length; - } - }; -}; diff --git a/src/scene.html b/src/scene.html deleted file mode 100644 index 42f0818e7..000000000 --- a/src/scene.html +++ /dev/null @@ -1,306 +0,0 @@ - - - -{% set firestore = true and 'moonrider-prod' or 'moonrider-dev' %} -{% set firekey = true and 'AIzaSyAilakXLvMgwPcBcHs3oys51eLp4yrfz0w' or 'AIzaSyALCaDKg0b7aD3nOyRv_f5RTZ1vedrGyWw' %} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {% for i in range(1, 5) %} - - {% endfor %} - - - - - - - - - {% macro weapon (hand, otherHand) %} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {% endmacro %} - - {{ weapon('left', 'right') }} - {{ weapon('right', 'left') }} - - - - - - - - - - - diff --git a/src/state/index.js b/src/state/index.js deleted file mode 100644 index ea10da83c..000000000 --- a/src/state/index.js +++ /dev/null @@ -1,1000 +0,0 @@ -/* global localStorage */ -import COLORS from '../constants/colors'; -const utils = require('../utils'); -const convertBeatmap = require('../lib/convert-beatmap'); - -const challengeDataStore = {}; -let HAS_LOGGED_VR = false; -const NUM_LEADERBOARD_DISPLAY = 10; -const SEARCH_PER_PAGE = 6; -const SONG_NAME_TRUNCATE = 22; -const SONG_SUB_NAME_RESULT_TRUNCATE = 32; -const SONG_SUB_NAME_DETAIL_TRUNCATE = 55; - -const DAMAGE_DECAY = 0.25; -const DAMAGE_MAX = 10; - -const difficultyMap = { - "Easy": 'Easy', - "Expert": 'Expert', - "ExpertPlus": 'Expert+', - "Hard": 'Hard', - "Normal": 'Normal', -}; - -const badSongs = {}; - -const DEBUG_CHALLENGE = { - author: 'Juancho Pancho', - difficulty: 'Expert', - id: '31', - image: 'assets/img/molerat.jpg', - songDuration: 100, - songName: 'Friday', - songLength: 100, - songSubName: 'Rebecca Black' -}; - -const SKIP_INTRO = AFRAME.utils.getUrlParameter('skipintro') === 'true'; - -const colorScheme = localStorage.getItem('colorScheme') || 'default'; - -let favorites = localStorage.getItem('favorites-v2'); -if (favorites) { - try { - favorites = JSON.parse(favorites); - } catch (e) { - favorites = []; - } -} else { - favorites = []; -} - -/** - * State handler. - * - * 1. `handlers` is an object of events that when emitted to the scene will run the handler. - * - * 2. The handler function modifies the state. - * - * 3. Entities and components that are `bind`ed automatically update: - * `bind__=": some.item.in.state"` - */ -AFRAME.registerState({ - nonBindedStateKeys: ['genres'], - - initialState: { - activeHand: localStorage.getItem('hand') || 'right', - challenge: { // Actively playing challenge. - audio: '', // URL. - author: '', - difficulty: '', - beatmapCharacteristic: '', - id: AFRAME.utils.getUrlParameter('challenge'), // Will be empty string if not playing. - image: '', - isBeatsPreloaded: false, // Whether we have passed the negative time. - numBeats: undefined, - songDuration: 0, - songName: '', - songNameShort: '', - songSubName: '', - metadata: {}, - }, - colorPrimary: COLORS.schemes[colorScheme].primary, - colorScheme: colorScheme, - colorSecondary: COLORS.schemes[colorScheme].secondary, - colorSecondaryBright: COLORS.schemes[colorScheme].secondarybright, - colorTertiary: COLORS.schemes[colorScheme].tertiary, - controllerType: '', - damage: 0, - difficultyFilter: 'All', - difficultyFilterMenuOpen: false, - favorites: favorites, - gameMode: 'ride', - genre: '', - genres: require('../constants/genres'), - genreMenuOpen: false, - has3DOFVR: false, - has6DOFVR: false, - hasSongLoadError: false, - hasVR: AFRAME.utils.device.checkHeadsetConnected() || - AFRAME.utils.getUrlParameter('debugvr') === 'true', - introActive: !SKIP_INTRO, // Just started game, main menu not opened yet. - inVR: AFRAME.utils.getUrlParameter('debugvr') === 'true', - isIOS: AFRAME.utils.device.isIOS(), - isGameOver: false, // Game over screen. - isLoading: false, // Entire song loading process after selected (ZIP + process). - isMenuOpening: !SKIP_INTRO, - isPaused: false, // Playing, but paused. Not active during menu. - isPlaying: false, // Actively playing (slicing beats). - isSearching: false, // Whether search is open. - isSongProcessing: false, - isVictory: false, // Victory screen. - isZipFetching: false, - leaderboard: [], - leaderboardFetched: false, - leaderboardQualified: false, - leaderboardNames: '', - leaderboardScores: '', - mainMenuActive: false, - menuActive: SKIP_INTRO, // Main menu active. - menuDifficulties: [], - menuDifficultiesIds: [], - menuSelectedChallenge: { // Currently selected challenge in the main menu. - author: '', - difficulty: '', - beatmapCharacteristic: '', - downloads: '', - downloadsText: '', - genre: '', - id: '', - index: -1, - image: '', - isFavorited: false, - numBeats: undefined, - songDuration: 0, - songInfoText: '', - songLength: undefined, - numBeats: undefined, - songName: '', - songSubName: '', - version: '', - metadata: {}, - }, - optionsMenuOpen: false, - playlist: '', - playlists: require('../constants/playlists'), - playlistMenuOpen: false, - playlistTitle: '', - score: { - accuracy: 100, // Out of 100. - accuracyScore: 0, // Raw number. - accuracyInt: 100, // Out of 100. - activePanel: false, - beatsHit: 0, - beatsMissed: 0, - beatsText: '', - combo: 0, - finalAccuracy: 100, // Out of 100. - maxCombo: 0, - rank: '', // Grade (S to F). - score: 0 - }, - search: { - activePanel: true, - page: 0, - hasError: false, - hasNext: false, - hasPrev: false, - query: '', - queryText: '', - results: [], - songNameTexts: '', // All names in search results merged together. - songSubNameTexts: '', // All sub names in search results merged together. - // url and urlPage are used to load more results from the API when scrolling down - url: '', - urlPage: 0, - }, - searchResultsPage: [], - speed: 10 - }, - - handlers: { - /** - * Swap left-handed or right-handed mode. - */ - activehandswap: state => { - state.activeHand = state.activeHand === 'right' ? 'left' : 'right'; - localStorage.setItem('activeHand', state.activeHand); - }, - - beathit: (state, payload) => { - if (state.damage > DAMAGE_DECAY) { - state.damage -= DAMAGE_DECAY; - } - - state.score.beatsHit++; - state.score.combo++; - if (state.score.combo > state.score.maxCombo) { - state.score.maxCombo = state.score.combo; - } - - payload.score = isNaN(payload.score) ? 100 : payload.score; - state.score.accuracyScore += payload.percent; - state.score.score += Math.floor(payload.score); - updateScoreAccuracy(state); - }, - - beatmiss: state => { - state.score.beatsMissed++; - takeDamage(state); - updateScoreAccuracy(state); - }, - - beatwrong: state => { - state.score.beatsMissed++; - takeDamage(state); - updateScoreAccuracy(state); - }, - - beatloaderpreloadfinish: state => { - if (state.menuActive) { return; } // Cancelled. - state.challenge.isBeatsPreloaded = true; - }, - - colorschemechange: (state, payload) => { - state.colorScheme = payload; - state.colorPrimary = COLORS.schemes[payload].primary; - state.colorSecondary = COLORS.schemes[payload].secondary; - state.colorSecondaryBright = COLORS.schemes[payload].secondarybright; - state.colorTertiary = COLORS.schemes[payload].tertiary; - localStorage.setItem('colorScheme', payload); - }, - - controllerconnected: (state, payload) => { - state.controllerType = payload.name; - state.has6DOFVR = [ - 'oculus-quest-controls', - 'oculus-touch-controls', - 'vive-controls', - 'windows-motion-controls', - 'generic-tracked-controller-controls' - ].indexOf(state.controllerType) !== -1; - - state.has3DOFVR = [ - 'oculus-go-controls', - 'daydream-controls' - ].indexOf(state.controllerType) !== -1; - }, - - debugbeatpositioning: state => { - state.gameMode = 'classic'; - state.introActive = false; - state.menuActive = false; - }, - - /** - * To work on game over page. - * - * ?debugstate=gameplay - */ - debuggameplay: state => { - resetScore(state); - - // Set challenge. `beat-generator` is listening. - Object.assign(state.challenge, state.menuSelectedChallenge); - - // Reset menu. - state.menuActive = false; - state.menuSelectedChallenge.id = ''; - - state.isSearching = false; - state.isLoading = false; - }, - - /** - * To work on game over page. - * - * ?debugstate=gameover - */ - debuggameover: state => { - state.isGameOver = true; - state.menuActive = false; - }, - - /** - * To work on victory page. - * - * ?debugstate=loading - */ - debugloading: state => { - DEBUG_CHALLENGE.id = '-1'; - Object.assign(state.menuSelectedChallenge, DEBUG_CHALLENGE); - Object.assign(state.challenge, DEBUG_CHALLENGE); - state.menuActive = false; - state.isSongProcessing = true; - }, - - /** - * To work on victory page. - * - * ?debugstate=victory - */ - debugvictory: state => { - Object.assign(state.menuSelectedChallenge, DEBUG_CHALLENGE); - Object.assign(state.challenge, DEBUG_CHALLENGE); - state.isVictory = true; - state.leaderboardQualified = true; - state.menuActive = false; - state.score.accuracy = 74.99; - state.score.beatsHit = 125; - state.score.beatsMissed = 125; - state.score.maxCombo = 123; - state.score.rank = 'A'; - state.score.score = 9001; - state.introActive = false; - computeBeatsText(state); - }, - - difficultyfilter: (state, difficulty) => { - state.difficultyFilter = difficulty; - state.difficultyFilterMenuOpen = false; - state.menuSelectedChallenge.id = ''; - }, - - difficultyfiltermenuclose: state => { - state.difficultyFilterMenuOpen = false; - }, - - difficultyfiltermenuopen: state => { - state.difficultyFilterMenuOpen = true; - }, - - displayconnected: state => { - state.hasVR = true; - if (HAS_LOGGED_VR) { return; } - try { - if ('getVRDisplays' in navigator) { - navigator.getVRDisplays().then(displays => { - if (!displays.length) { return; } - HAS_LOGGED_VR = true; - }); - } - } catch (e) { } - }, - - favoritetoggle: state => { - const id = state.menuSelectedChallenge.id; - const challenge = challengeDataStore[id]; - - if (!challenge) { return; } - - if (state.menuSelectedChallenge.isFavorited) { - // Unfavorite. - state.menuSelectedChallenge.isFavorited = false; - for (let i = 0; i < state.favorites.length; i++) { - if (state.favorites[i].id === id) { - state.favorites.splice(i, 1); - localStorage.setItem('favorites-v2', JSON.stringify(state.favorites)); - return; - } - } - } else { - // Favorite. - state.menuSelectedChallenge.isFavorited = true; - if (state.favorites.filter(favorite => favorite.id === id).length) { return; } - state.favorites.push(challenge) - localStorage.setItem('favorites-v2', JSON.stringify(state.favorites)); - } - }, - - gamemenuresume: state => { - state.isPaused = false; - }, - - gamemenurestart: state => { - resetScore(state); - state.challenge.isBeatsPreloaded = false; - state.isGameOver = false; - state.isPaused = false; - state.isLoading = true; - state.isVictory = false; - state.leaderboardQualified = false; - }, - - gamemenuexit: state => { - resetScore(state); - state.challenge.isBeatsPreloaded = false; - state.isGameOver = false; - state.isPaused = false; - state.isVictory = false; - state.menuActive = true; - state.menuSelectedChallenge.id = state.challenge.id; - state.menuSelectedChallenge.difficulty = state.challenge.difficulty; - state.menuSelectedChallenge.beatmapCharacteristic = state.challenge.beatmapCharacteristic; - state.menuSelectedChallenge.difficultyId = state.challenge.difficultyId; - state.challenge.id = ''; - state.leaderboardQualified = false; - }, - - gamemode: (state, mode) => { - state.gameMode = mode; - }, - - genreclear: state => { - state.genre = ''; - state.menuSelectedChallenge.id = ''; - }, - - genreselect: (state, genre) => { - state.genre = genre; - state.genreMenuOpen = false; - state.menuSelectedChallenge.id = ''; - state.playlist = ''; - state.search.query = ''; - }, - - genremenuclose: state => { - state.genreMenuOpen = false; - }, - - genremenuopen: state => { - state.genreMenuOpen = true; - }, - - keyboardclose: state => { - state.isSearching = false; - }, - - keyboardopen: state => { - state.isSearching = true; - state.menuSelectedChallenge.id = ''; - }, - - /** - * High scores. - */ - leaderboard: (state, payload) => { - state.leaderboard.length = 0; - state.leaderboardFetched = true; - state.leaderboardNames = ''; - state.leaderboardScores = ''; - for (let i = 0; i < payload.scores.length; i++) { - let score = payload.scores[i]; - state.leaderboard.push(score); - state.leaderboardNames += `#${i + 1} ${truncate(score.username, 18)} (${Math.round(score.accuracy || 0)}%)\n`; - state.leaderboardScores += `${score.score}\n`; - } - state.leaderboardLoading = false; - }, - - leaderboardqualify: state => { - if (!state.has6DOFVR) { return; } - state.leaderboardQualified = true; - }, - - /** - * Insert new score into leaderboard locally. - */ - leaderboardscoreadded: (state, payload) => { - // Insert. - for (let i = 0; i < state.leaderboard.length; i++) { - if (payload.scoreData.score >= state.leaderboard[i].score || - i >= state.leaderboard.length - 1) { - state.leaderboard.splice(i, 0, payload.scoreData); - break; - } - } - - state.leaderboardNames = ''; - state.leaderboardScores = ''; - for (let i = 0; i < state.leaderboard.length; i++) { - let score = state.leaderboard[i]; - state.leaderboardNames += `${score.username} (${score.accuracy || 0}%)\n`; - state.leaderboardScores += `${score.score}\n`; - } - }, - - leaderboardsubmit: state => { - state.leaderboardQualified = false; - }, - - menuback: state => { - state.difficultyFilterMenuOpen = false; - state.genreMenuOpen = false; - state.isSearching = false; - state.optionsMenuOpen = false; - state.playlistMenuOpen = false; - }, - - /** - * Song clicked from menu. - */ - menuchallengeselect: (state, id) => { - // Copy from challenge store populated from search results. - let challenge = challengeDataStore[id]; - if (!challenge) { return; } - Object.assign(state.menuSelectedChallenge, challenge); - state.menuSelectedChallenge.songName = truncate(challenge.metadata.songName, 24); - - // Populate difficulty options. - state.menuDifficulties.length = 0; - state.menuDifficultiesIds.length = 0; - - const characteristics = JSON.parse(challenge.metadata.characteristics); - for (const characteristic of Object.keys(characteristics)) { - - if (['90Degree', '360Degree'].includes(characteristic)) continue; - - for (const difficulty of Object.keys(characteristics[characteristic])) { - - if (characteristics[characteristic][difficulty] === null) continue; - - let difficultyName = difficultyMap[difficulty]; - let renderName = difficultyName; - - if (characteristic !== 'Standard') { - renderName = characteristic + '\n' + renderName; - } - state.menuDifficulties.unshift({ - 'id': characteristic + '-' + difficulty, - 'filename': /* fileDifficultyMap[ */difficulty/* ] */ + characteristic, - 'difficultyName': difficultyName, - 'renderName': renderName, - 'beatmapCharacteristic': characteristic, - 'difficulty': difficulty, - }) - - } - } - - state.menuDifficulties.sort(difficultyComparator); - - for (const d of state.menuDifficulties) { - state.menuDifficultiesIds.push(d.id); - } - - const selectedDifficulty = state.menuDifficulties[0]; - - state.menuSelectedChallenge.difficulty = selectedDifficulty.difficulty; - state.menuSelectedChallenge.beatmapCharacteristic = selectedDifficulty.beatmapCharacteristic; - state.menuSelectedChallenge.difficultyId = selectedDifficulty.id; - - state.menuSelectedChallenge.image = state.menuSelectedChallenge.coverURL; - updateMenuSongInfo(state, challenge); - - // Reset audio if it was able to prefetched by zip-loader before. - state.challenge.audio = ''; - - computeMenuSelectedChallengeIndex(state); - state.isSearching = false; - - // Favorited. - const isFavorited = !!state.favorites.filter(favorite => favorite.id === id).length; - state.menuSelectedChallenge.isFavorited = isFavorited; - - // Clear leaderboard. - clearLeaderboard(state); - state.leaderboardLoading = true; - - state.hasSongLoadError = false; - if (badSongs[id]) { - state.hasSongLoadError = true; - } - }, - - menuchallengeunselect: state => { - state.menuSelectedChallenge.id = ''; - state.menuSelectedChallenge.difficultyId = ''; - state.menuSelectedChallenge.difficulty = ''; - state.menuSelectedChallenge.beatmapCharacteristic = ''; - clearLeaderboard(state); - }, - - menudifficultyselect: (state, difficultyId) => { - let difficulty; - for (const d of state.menuDifficulties) { - if (d.id === difficultyId) { - difficulty = d; - break; - } - } - state.menuSelectedChallenge.difficultyId = difficultyId; - state.menuSelectedChallenge.difficulty = difficulty.difficulty; - state.menuSelectedChallenge.beatmapCharacteristic = difficulty.beatmapCharacteristic; - updateMenuSongInfo(state, state.menuSelectedChallenge); - - clearLeaderboard(state); - state.leaderboardLoading = true; - }, - - menuopeningend: state => { - state.isMenuOpening = false; - }, - - minehit: state => { - takeDamage(state); - }, - - optionsmenuopen: state => { - state.optionsMenuOpen = true; - }, - - pausegame: state => { - if (!state.isPlaying) { return; } - state.isPaused = true; - }, - - /** - * Start challenge. - * Transfer staged challenge to the active challenge. - */ - playbuttonclick: state => { - if (state.menuSelectedChallenge.id === '') { return; } - if (badSongs[state.menuSelectedChallenge.id]) { return; } - - let source = 'frontpage'; - if (state.playlist) { source = 'playlist'; } - if (state.search.query) { source = 'search'; } - if (state.genre) { source = 'genre'; } - gtag('event', 'songsource', { event_label: source }); - - resetScore(state); - - // Set challenge. - Object.assign(state.challenge, state.menuSelectedChallenge); - - gtag('event', 'difficulty', { event_label: state.challenge.difficulty }); - - // Reset menu. - state.menuActive = false; - state.menuSelectedChallenge.id = ''; - state.menuSelectedChallenge.difficulty = ''; - state.menuSelectedChallenge.beatmapCharacteristic = ''; - - state.isSearching = false; - state.isLoading = true; - state.loadingText = 'Loading...' - - gtag('event', 'colorscheme', { event_label: state.colorScheme }); - }, - - playlistclear: (state, playlist) => { - state.menuSelectedChallenge.id = ''; - state.playlist = ''; - }, - - playlistselect: (state, playlist) => { - state.genre = ''; - state.menuSelectedChallenge.id = ''; - state.playlist = playlist.id; - state.playlistTitle = playlist.title; - state.playlistMenuOpen = false; - state.search.query = ''; - }, - - playlistmenuclose: state => { - state.playlistMenuOpen = false; - }, - - playlistmenuopen: state => { - state.playlistMenuOpen = true; - }, - - searcherror: (state, payload) => { - state.search.hasError = true; - }, - - searchprevpage: state => { - if (state.search.page === 0) { return; } - state.search.page--; - computeSearchPagination(state); - }, - - searchnextpage: state => { - if (state.search.page > Math.floor(state.search.results.length / SEARCH_PER_PAGE)) { - return; - } - state.search.page++; - computeSearchPagination(state); - - if (state.search.url === undefined) { - return; - } - - if ((state.search.page + 3) > Math.floor(state.search.results.length / SEARCH_PER_PAGE)) { - - state.search.urlPage = state.search.urlPage + 1; - - fetch(state.search.url.replaceAll('CURRENT_PAGE_INDEX', state.search.urlPage)) - .then(r => { return r.json() }) - .then(res => { - var hits = (res['docs'] || res['maps']).map(convertBeatmap) - - state.search.results.push(...hits); - - for (i = 0; i < hits.length; i++) { - let result = hits[i]; - challengeDataStore[result.id] = result; - } - }) - } - }, - - /** - * Update search results. Will automatically render using `bind-for` (menu.html). - */ - searchresults: (state, payload) => { - var i; - state.search.hasError = false; - state.search.page = 0; - state.search.url = payload.url; - state.search.urlPage = payload.urlPage; - state.search.query = payload.query; - state.search.queryText = truncate(payload.query, 10); - state.search.results = payload.results; - for (i = 0; i < payload.results.length; i++) { - let result = payload.results[i]; - // result.songSubName = result.songSubName || 'Unknown Artist'; - // result.shortSongName = truncate(result.songName, SONG_NAME_TRUNCATE).toUpperCase(); - // result.shortSongSubName = truncate(result.songSubName, SONG_SUB_NAME_RESULT_TRUNCATE); - challengeDataStore[result.id] = result; - } - computeSearchPagination(state); - state.menuSelectedChallenge.id = ''; // Clear any selected on new results. - if (state.isSearching) { - state.genre = ''; - state.playlist = ''; - } - }, - - songcomplete: state => { - gtag('event', 'songcomplete', { event_label: state.gameMode }); - - // Move back to menu in Ride or Viewer Mode. - if (state.gameMode === 'ride' || !state.inVR) { - state.challenge.isBeatsPreloaded = false; - state.isVictory = false; - state.menuActive = true; - state.challenge.id = ''; - return; - } - - state.isVictory = true; - - state.score.score = isNaN(state.score.score) ? 0 : state.score.score; - updateScoreAccuracy(state); - state.score.finalAccuracy = state.score.accuracy; - - const accuracy = parseFloat(state.score.accuracy); - if (accuracy >= 97) { - state.score.rank = 'S'; - } else if (accuracy >= 90) { - state.score.rank = 'A'; - } else if (accuracy >= 80) { - state.score.rank = 'B'; - } else if (accuracy >= 70) { - state.score.rank = 'C'; - } else if (accuracy >= 60) { - state.score.rank = 'D'; - } else { - state.score.rank = 'F'; - } - - computeBeatsText(state); - }, - - songloadcancel: state => { - state.challenge.isBeatsPreloaded = false; - // Unset selected challenge. - state.challenge.audio = ''; - state.challenge.id = ''; - state.challenge.version = ''; - - state.isZipFetching = false; - state.isLoading = false; - state.isSongProcessing = false; - state.menuActive = true; - }, - - songloaderror: state => { - badSongs[state.menuSelectedChallenge.id || state.challenge.id] = true; - - state.hasSongLoadError = true; - state.loadingText = 'Sorry! There was an error loading this song.\nPlease select another song.'; - - state.challenge.id = ''; - state.challenge.isBeatsPreloaded = false; - state.isSongProcessing = false; - state.isZipFetching = false; - }, - - songprocessfinish: state => { - state.isSongProcessing = false; - state.isLoading = false; // Done loading after final step! - }, - - songprocessstart: state => { - state.isSongProcessing = true; - state.loadingText = 'Wrapping up...'; - }, - - 'enter-vr': state => { - state.inVR = AFRAME.utils.device.checkHeadsetConnected(); - if (!AFRAME.utils.device.isMobile()) { - gtag('event', 'entervr', {}); - if (AFRAME.utils.device.isOculusBrowser()) { - gtag('event', 'oculusbrowser', {}); - } - } - }, - - 'exit-vr': state => { - state.inVR = false; - if (state.isPlaying) { - state.isPaused = true; - } - }, - - startgame: state => { - state.introActive = false; - state.menuActive = true; - }, - - victoryfake: state => { - state.score.accuracy = '74.99'; - state.score.rank = 'C'; - }, - - wallhitstart: state => { - takeDamage(state); - }, - - ziploaderend: (state, payload) => { - state.challenge.audio = payload.audio; - state.hasSongLoadError = false; - state.menuSelectedChallenge.version = ''; - state.isZipFetching = false; - }, - - ziploaderstart: state => { - state.challenge.isBeatsPreloaded = false; - state.isZipFetching = true; - } - }, - - /** - * Post-process the state after each action. - */ - computeState: state => { - state.isPlaying = - !state.menuActive && !state.isLoading && !state.isPaused && !state.isVictory && - !state.isGameOver && !state.isZipFetching && !state.isSongProcessing && - !!state.challenge.id && !state.introActive; - - const anyMenuOpen = state.menuActive || state.isPaused || state.isVictory || - state.isGameOver || state.isLoading || state.introActive; - state.leftRaycasterActive = anyMenuOpen && state.activeHand === 'left' && state.inVR; - state.rightRaycasterActive = anyMenuOpen && state.activeHand === 'right' && state.inVR; - - state.mainMenuActive = - state.menuActive && - !state.genreMenuOpen && - !state.difficultyFilterMenuOpen && - !state.playlistMenuOpen && - !state.optionsMenuOpen && - !state.isSearching; - - state.score.active = - state.gameMode !== 'ride' && - state.inVR && - (state.isPlaying || state.isPaused); - } -}); - -function computeSearchPagination(state) { - let numPages = Math.ceil(state.search.results.length / SEARCH_PER_PAGE); - state.search.hasPrev = state.search.page > 0; - state.search.hasNext = state.search.page < numPages - 1; - - state.search.songNameTexts = ''; - state.search.songSubNameTexts = ''; - - state.searchResultsPage.length = 0; - state.searchResultsPage.__dirty = true; - for (let i = state.search.page * SEARCH_PER_PAGE; - i < state.search.page * SEARCH_PER_PAGE + SEARCH_PER_PAGE; i++) { - const result = state.search.results[i]; - if (!result) { break; } - state.searchResultsPage.push(result); - - state.search.songNameTexts += - truncate(result.metadata.songName, SONG_NAME_TRUNCATE).toUpperCase() + '\n'; - state.search.songSubNameTexts += - truncate((result.metadata.songSubName || result.metadata.songAuthorName || 'Unknown Artist'), - SONG_SUB_NAME_RESULT_TRUNCATE) + '\n'; - } - - for (let i = 0; i < state.searchResultsPage.length; i++) { - state.searchResultsPage[i].index = i; - } - - computeMenuSelectedChallengeIndex(state); -} - -function truncate(str, length) { - if (!str) { return ''; } - if (str.length >= length) { - return str.substring(0, length - 3) + '...'; - } - return str; -} - -const DIFFICULTIES = ['easy', 'normal', 'hard', 'expert', 'expertPlus']; -const CHARACTERISTICS = ['Standard']; -function difficultyComparator(a, b) { - const aIndex = DIFFICULTIES.indexOf(a.difficulty); - const bIndex = DIFFICULTIES.indexOf(b.difficulty); - if (aIndex < bIndex) { return -1; } - if (aIndex > bIndex) { return 1; } - - const aIndex2 = CHARACTERISTICS.indexOf(a.beatmapCharacteristic); - const bIndex2 = CHARACTERISTICS.indexOf(b.beatmapCharacteristic); - if (aIndex2 > bIndex2) { return -1; } - if (aIndex2 < bIndex2) { return 1; } - return 0; -} - -function takeDamage(state) { - if (!state.isPlaying || !state.inVR) { return; } - state.score.combo = 0; - // No damage for now. - // state.damage++; - // if (AFRAME.utils.getUrlParameter('godmode')) { return; } - // checkGameOver(state); -} - -function checkGameOver(state) { - if (state.damage >= DAMAGE_MAX) { - state.damage = 0; - state.isGameOver = true; - } -} - -function resetScore(state) { - state.damage = 0; - state.score.accuracy = 100; - state.score.accuracyInt = 100; - state.score.accuracyScore = 0; - state.score.beatsHit = 0; - state.score.beatsMissed = 0; - state.score.finalAccuracy = 100; - state.score.combo = 0; - state.score.maxCombo = 0; - state.score.score = 0; -} - -function computeMenuSelectedChallengeIndex(state) { - state.menuSelectedChallenge.index = -1; - for (let i = 0; i < state.searchResultsPage.length; i++) { - if (state.searchResultsPage[i].id === state.menuSelectedChallenge.id) { - state.menuSelectedChallenge.index = i; - break; - } - } -} - -function formatSongLength(songLength) { - songLength /= 60; - const minutes = `${Math.floor(songLength)}`; - var seconds = Math.round((songLength - minutes) * 60); - if (seconds < 10) seconds = '0' + seconds; - return `${minutes}:${seconds}`; -} - -function computeBeatsText(state) { - state.score.beatsText = - `${state.score.beatsHit} / ${state.score.beatsMissed + state.score.beatsHit} BEATS`; -} - -function clearLeaderboard(state) { - state.leaderboard.length = 0; - state.leaderboard.__dirty = true; - state.leaderboardNames = ''; - state.leaderboardScores = ''; - state.leaderboardFetched = false; -} - -function updateMenuSongInfo(state, challenge) { - let info = JSON.parse(challenge.metadata.characteristics)[state.menuSelectedChallenge.beatmapCharacteristic][state.menuSelectedChallenge.difficulty]; - - state.menuSelectedChallenge.songInfoText = `Mapped by ${truncate(challenge.metadata.levelAuthorName, SONG_SUB_NAME_DETAIL_TRUNCATE)}\n${challenge.genre && challenge.genre !== 'Uncategorized' ? challenge.genre + '\n' : ''}${formatSongLength(challenge.metadata.duration)} / ${info.notes} notes\n${info.bombs} bombs | ${info.obstacles} obstacles\nNJS: ${info.njs}`; -} - -function updateScoreAccuracy(state) { - // Update live accuracy. - const currentNumBeats = state.score.beatsHit + state.score.beatsMissed; - state.score.accuracy = (state.score.accuracyScore / (currentNumBeats * 100)) * 100; - state.score.accuracy = state.score.accuracy.toFixed(2); - state.score.accuracyInt = parseInt(state.score.accuracy); -} diff --git a/src/templates/difficultyMenu.html b/src/templates/difficultyMenu.html deleted file mode 100644 index 2a72e4f07..000000000 --- a/src/templates/difficultyMenu.html +++ /dev/null @@ -1,50 +0,0 @@ -{% macro difficultyOption (value) %} - - - - -{% endmacro %} - -{% set options = [ - 'All', - 'Easy', - 'Normal', - 'Hard', - 'Expert', - 'Expertplus' -] %} - - - {% for option in options %} - {{ difficultyOption(option) }} - {% endfor %} - diff --git a/src/templates/gameMenu.html b/src/templates/gameMenu.html deleted file mode 100644 index 9637035fc..000000000 --- a/src/templates/gameMenu.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/templates/genreMenu.html b/src/templates/genreMenu.html deleted file mode 100644 index 5e503cba8..000000000 --- a/src/templates/genreMenu.html +++ /dev/null @@ -1,40 +0,0 @@ - - - diff --git a/src/templates/intro.html b/src/templates/intro.html deleted file mode 100644 index 3da0bf4dc..000000000 --- a/src/templates/intro.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - diff --git a/src/templates/leaderboard.html b/src/templates/leaderboard.html deleted file mode 100644 index bf484f1aa..000000000 --- a/src/templates/leaderboard.html +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/templates/loading.html b/src/templates/loading.html deleted file mode 100644 index 7ee24cc2f..000000000 --- a/src/templates/loading.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/templates/menu.html b/src/templates/menu.html deleted file mode 100644 index b78aeb507..000000000 --- a/src/templates/menu.html +++ /dev/null @@ -1,356 +0,0 @@ - -{% macro searchResults () %} - - - - - - - - - - - - - - - - - - - - - -{% endmacro %} - -{% raw %} - -{% endraw %} - - - - - - - - - - {{ searchResults() }} - - - - - - - - {% raw %} - - {% endraw %} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/templates/modes.html b/src/templates/modes.html deleted file mode 100644 index 805d94a93..000000000 --- a/src/templates/modes.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - - -{% macro mode (index, name, mode, image, description, forVR) %} -{% set id = name + (forVR and 'vr' or '2d') %} - - - - - - -{% endmacro %} - - - - - - - {{ mode(0, 'ride', 'ride', '#modeRideImg', 'Relax and enjoy the ride.', false) }} - {{ mode(1, 'viewer', 'classic', '#modeViewerImg', 'View the beat map.\n\nConnect a VR headset\nwith controllers\nto experience\nmore modes!', false) }} - - - - {{ mode(0, 'punch', 'punch', '#modePunchImg', 'Punch the beats, mind\ncolor.\n\nAvoid all things yellow.\n\nPunch harder\n for better score.', true) }} - {{ mode(1, 'ride', 'ride', '#modeRideImg', 'Relax and enjoy the ride.\n\nTake a quick breather.\n\nNo score!', true) }} - {{ mode(2, 'classic', 'classic', '#modeClassicImg', 'Cut the beats, mind\ncolor and direction.\n\nAvoid all things yellow.\n\nSwing fast and accurate\nfor better score.', true) }} - - - - - - - - - diff --git a/src/templates/news.html b/src/templates/news.html deleted file mode 100644 index e86696006..000000000 --- a/src/templates/news.html +++ /dev/null @@ -1,53 +0,0 @@ -{% set text = 'Moon Rider (v2.9)\n\n' %} -{% set text = text + 'Open source demonstration codebase of a VR app built in HTML and JavaScript running on the Web.\n\n' %} -{% set text = text + 'A side project built by two people in a few months as a resource for A-Frame developers. ' %} -{% set text = text + 'Not meant to be an official, paid, nor fully released product.\n\n' %} -{% set text = text + 'Song maps sourced from beatsaver.com. Supports most browsers and headsets (including Quest).\n\n' %} -{% set text = text + 'This game was meant to serve as an example of a VR app running inside a webpage to help progress the open WebXR initiative (bsaber.com/moonrider).\n\n' %} -{% set text = text + 'Chat with us on moonrider.xyz/discord' %} - - - - - - - - - - - - - - - - diff --git a/src/templates/optionsMenu.html b/src/templates/optionsMenu.html deleted file mode 100644 index 46877d5b3..000000000 --- a/src/templates/optionsMenu.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - {% for color in COLORS.options %} - - - {% endfor %} - - - - - diff --git a/src/templates/playlistMenu.html b/src/templates/playlistMenu.html deleted file mode 100644 index 6c51172e4..000000000 --- a/src/templates/playlistMenu.html +++ /dev/null @@ -1,43 +0,0 @@ - - - diff --git a/src/templates/score.html b/src/templates/score.html deleted file mode 100644 index 984330ad8..000000000 --- a/src/templates/score.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - diff --git a/src/templates/stage.html b/src/templates/stage.html deleted file mode 100644 index 39c892d9e..000000000 --- a/src/templates/stage.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/src/templates/stageFollow.html b/src/templates/stageFollow.html deleted file mode 100644 index f5b78df58..000000000 --- a/src/templates/stageFollow.html +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - -{% if DEBUG_LOG %} - -{% endif %} diff --git a/src/templates/victory.html b/src/templates/victory.html deleted file mode 100644 index 42238b629..000000000 --- a/src/templates/victory.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/utils.js b/src/utils.js deleted file mode 100644 index 91f5d0a36..000000000 --- a/src/utils.js +++ /dev/null @@ -1,48 +0,0 @@ -const BASE_URL = 'https://previews.moonrider.xyz'; - -function getS3FileUrl (id, name) { - return `${BASE_URL}/${id}-${name}?v=2`; -} -module.exports.getS3FileUrl = getS3FileUrl; - -/** - * Helper to visualize lines. - */ -console.line = (function () { - var els = {}; - return function (vec1, vec2, name, color) { - name = name || 'default'; - color = color || '#FFF'; - if (!els[name]) { - els[name] = document.createElement('a-entity'); - els[name].setAttribute('line', 'color', color || '#FFF'); - els[name].setAttribute('id', name); - AFRAME.scenes[0].appendChild(els[name]); - } - els[name].setAttribute('line', 'start', vec1.clone()); - els[name].setAttribute('line', 'end', vec2.clone()); - }; -})(); - -/** - * Helper to visualize vectors. - */ -console.vec3 = (function () { - const els = {}; - const geo = {primitive: 'box', width: 0.05, height: 0.05, depth: 0.05}; - const mat = {shader: 'flat'}; - return function (vec3, name, color) { - name = name || 'default'; - color = color || '#FFF'; - if (!els[name]) { - els[name] = document.createElement('a-entity'); - mat.color = color || '#FFF'; - els[name].setAttribute('geometry', geo); - els[name].setAttribute('material', mat); - els[name].setAttribute('id', name); - els[name].setAttribute('text', {align: 'center', value: name, side: 'double'}); - AFRAME.scenes[0].appendChild(els[name]); - } - els[name].object3D.position.copy(vec3); - }; -})(); diff --git a/src/workers/zip.js b/src/workers/zip.js deleted file mode 100644 index 272686989..000000000 --- a/src/workers/zip.js +++ /dev/null @@ -1,106 +0,0 @@ -var window = self; - -var unzip = require('unzip-js') - -const difficulties = []; - -const xhrs = {}; - -// Fetch and unzip. -addEventListener('message', function (evt) { - const difficulties = JSON.parse(evt.data.difficulties); - const version = evt.data.version; - const hash = evt.data.hash; - - const [short] = version.split('-'); - - - - unzip(evt.data.directDownload, function (err, zipFile) { - if (err) { - return console.error(err) - } - - zipFile.readEntries(function (err, entries) { - if (err) { - return console.error(err) - } - - const data = { - audio: undefined, - beats: {} - }; - - const beatFiles = {}; - - entries.forEach(function (entry) { - - const chunks = []; - - zipFile.readEntryData(entry, false, function (err, readStream) { - if (err) { - return console.error(err) - } - - readStream.on('data', function (chunk) { chunks.push(chunk) }) - - readStream.on('end', function () { - - if (entry.name.endsWith('.egg') || entry.name.endsWith('.ogg')) { - var blob = new Blob(chunks, /* { type: 'application/octet-binary' } */); - var url = URL.createObjectURL(blob); - - data.audio = url; - } else { - - var filename = entry.name; - if (!filename.toLowerCase().endsWith('.dat')) return; - - var string = Buffer.concat(chunks).toString('utf8') - var value = JSON.parse(string); - - if (filename.toLowerCase() === 'info.dat') { - data.info = value; - } else { - value._beatsPerMinute = evt.data.bpm; - beatFiles[filename] = value; - } - } - - if (data.audio === undefined) { - return; - } - if (data.info === undefined) { - return; - } - - for (const difficultyBeatmapSet of data.info._difficultyBeatmapSets) { - const beatmapCharacteristicName = difficultyBeatmapSet._beatmapCharacteristicName; - - for (const difficultyBeatmap of difficultyBeatmapSet._difficultyBeatmaps) { - const difficulty = difficultyBeatmap._difficulty; - const beatmapFilename = difficultyBeatmap._beatmapFilename; - if (beatFiles[beatmapFilename] === undefined) { - return; - } - - const id = beatmapCharacteristicName + '-' + difficulty; - if (data.beats[id] === undefined) { - data.beats[id] = beatFiles[beatmapFilename]; - } - } - } - - postMessage({ message: 'load', data: data, version: version, hash: hash }); - }) - }) - }) - }) - }) - return; - - - -}); - -// data: {audio url, beats { difficulty JSONs }, diff --git a/webpack.config.js b/webpack.config.js deleted file mode 100644 index 20de96159..000000000 --- a/webpack.config.js +++ /dev/null @@ -1,95 +0,0 @@ -var fs = require('fs'); -var ip = require('ip'); -var path = require('path'); -var webpack = require('webpack'); -const COLORS = require('./src/constants/colors.js'); - -PLUGINS = [ - new webpack.EnvironmentPlugin(['DEBUG_LOG', 'NODE_ENV']), - new webpack.HotModuleReplacementPlugin(), - // @firebase/polyfill not loading, stub it with some random module. - new webpack.NormalModuleReplacementPlugin( - /firebase\/polyfill/, - '../../../../src/constants/colors.js' - ) -]; - -module.exports = { - optimization: { - minimize: process.env.NODE_ENV === 'production' - }, - devServer: { - disableHostCheck: true, - hotOnly: true - }, - entry: { - build: './src/index.js', - zip: './src/workers/zip.js' - }, - output: { - globalObject: 'this', - path: __dirname, - filename: 'build/[name].js' - }, - plugins: PLUGINS, - module: { - rules: [ - { - test: /\.js/, - exclude: /(node_modules)/, - use: ['babel-loader', 'aframe-super-hot-loader'] - }, - { - test: /\.json/, - exclude: /(node_modules)/, - type: 'javascript/auto', - loader: ['json-loader'] - }, - { - test: /\.html/, - exclude: /(node_modules)/, - use: [ - 'aframe-super-hot-html-loader', - { - loader: 'super-nunjucks-loader', - options: { - globals: { - DEBUG_AFRAME: !!process.env.DEBUG_AFRAME, - DEBUG_LOG: !!process.env.DEBUG_LOG, - DEBUG_KEYBOARD: !!process.env.DEBUG_KEYBOARD, - DEBUG_INSPECTOR: !!process.env.DEBUG_INSPECTOR, - HOST: ip.address(), - IS_PRODUCTION: process.env.NODE_ENV === 'production', - COLORS: COLORS - }, - path: path.resolve(__dirname, 'src') - } - }, - { - loader: 'html-require-loader', - options: { - root: path.resolve(__dirname, 'src') - } - } - ] - }, - { - test: /\.glsl/, - exclude: /(node_modules)/, - loader: 'webpack-glsl-loader' - }, - { - test: /\.css$/, - exclude: /(node_modules)/, - use: ['style-loader', 'css-loader'] - }, - { - test: /\.(png|jpg)/, - loader: 'url-loader' - } - ] - }, - resolve: { - modules: [path.join(__dirname, 'node_modules')] - } -};