diff --git a/.DS_Store b/.DS_Store index d804f52..b985e1d 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..e3863a6 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,4 @@ +[submodule "ext/splitflap"] + path = ext/splitflap + url = https://github.com/scottbez1/splitflap.git + branch = dev/chainlinkBaseUpdates diff --git a/README.md b/README.md index d715e8b..6b81fb3 100644 --- a/README.md +++ b/README.md @@ -5,3 +5,15 @@ to run node as a sudo user: to run npm as a sudo user: `sudo "$(which npm)" install -g angular-cli` + +`to pull submodule ` +git submodule update --init --recursive + +`install typescript globally (as root)` +npm install -g typescript + +`scott note` +had to add this in the splitflapjs folder: npm i --save-dev @types/node +working with Node: + +v12.22.5 diff --git a/arduino/RFIDTEST/RFIDTEST.ino b/arduino/RFIDTEST/RFIDTEST.ino index 1935eff..6a9fada 100644 --- a/arduino/RFIDTEST/RFIDTEST.ino +++ b/arduino/RFIDTEST/RFIDTEST.ino @@ -19,6 +19,7 @@ void setup() Serial.begin(9600); // Initiate a serial communication SPI.begin(); // Initiate SPI bus mfrc522.PCD_Init(); // Initiate MFRC522 + pinMode(7, OUTPUT); // Set the board pin to blink Serial.println("Approximate your card to the reader..."); Serial.println(); @@ -58,7 +59,9 @@ void loop() else { Serial.println(" Access denied"); + digitalWrite (7, HIGH); delay(3000); + digitalWrite (7, LOW); } } diff --git a/arduino/readme.md b/arduino/readme.md new file mode 100644 index 0000000..00fe108 --- /dev/null +++ b/arduino/readme.md @@ -0,0 +1,3 @@ +https://randomnerdtutorials.com/security-access-using-mfrc522-rfid-reader-with-arduino/ + +https://github.com/miguelbalboa/rfid/ \ No newline at end of file diff --git a/arduino/rfid-master.zip b/arduino/rfid-master.zip new file mode 100644 index 0000000..a3a5ef0 Binary files /dev/null and b/arduino/rfid-master.zip differ diff --git a/codeart_backend/.DS_Store b/codeart_backend/.DS_Store index e2918d7..a255618 100644 Binary files a/codeart_backend/.DS_Store and b/codeart_backend/.DS_Store differ diff --git a/codeart_backend/README.md b/codeart_backend/README.md index 971b624..56039a9 100644 --- a/codeart_backend/README.md +++ b/codeart_backend/README.md @@ -28,4 +28,10 @@ for sysdevpath in $(find /sys/bus/usb/devices/usb*/ -name dev); do [[ -z "$ID_SERIAL" ]] && exit echo "/dev/$devname - $ID_SERIAL" ) -done \ No newline at end of file +done + + +take off raspi-io for non raspi development + + + "splitflapjs": "file:../ext/splitflap/software/js/splitflapjs" \ No newline at end of file diff --git a/codeart_backend/animations.js b/codeart_backend/animations.js new file mode 100644 index 0000000..1e5ff2c --- /dev/null +++ b/codeart_backend/animations.js @@ -0,0 +1,359 @@ + +const flaps = [ + ' ', // BLACK + 'J', // 1 + 'B', // 2 + 'M', // 3 + 'R', // 4 + '$', // 5 + 'V', // 6 + 'K', // 7 + 'A', // 8 + 'E', // 9 + 'N', // 10 + 'O', // 11 + 'y', // YELLOW + '*', // 13 + 'g', // GREEN + 'G', // 15 + 'I', // 16 + '%', // 17 + 'D', // 18 + 'L', // 19 + '&', // 20 + '@', // 21 + 'C', // 22 + 'W', // 23 + 'H', // 24 + 'Y', // 25 + 'w', // WHITE + 'Q', // 27 + 'p', // PINK + 'o', // ORANGE + '!', // 30 + 'T', // 31 + 'Z', // 32 + 'P', // 33 + 'F', // 34 + '?', // 35 + 'S', // 36 + '#', // 37 + 'U', // 38 + 'X', // 39 +] + +const welcome = [ + [6000, [ + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ]], + [300, [ + 'p ', + ' WELCOME TO p ', + ' y ', + ' CODE ART w', + ' g g ', + 'p w y', + ]], + [200, [ + 'p ', + ' WELCOME TO p ', + ' y ', + ' CODE ART w', + ' g g ', + 'p w y', + ], [ + ' 1 ', + ' 1', + ' 1 ', + ' ', + ' ', + ' 1 ', + ]], + [200, [ + 'p ', + ' WELCOME TO p ', + ' y ', + ' CODE ART w', + ' g g ', + 'p w y', + ], [ + ' 1 ', + ' ', + ' 1 1 ', + ' ', + ' 1 ', + ' 1 1 ', + ]], + [200, [ + 'p ', + ' WELCOME TO p ', + ' y ', + ' CODE ART w', + ' g g ', + 'p w y', + ], [ + ' 1 ', + ' ', + ' 1 1 ', + ' 1 ', + ' 1 ', + '1 1 ', + ]], + [6000, [ + 'p ', + ' WELCOME TO p ', + ' y ', + ' CODE ART w', + ' g g ', + 'p w y', + ]], +] +exports.welcome = welcome + +function* randomFill(color1, color2, before, after) { + const state = [ + new Array(18).fill(color1), + new Array(18).fill(color1), + new Array(18).fill(color1), + new Array(18).fill(color1), + new Array(18).fill(color1), + new Array(18).fill(color1), + ] + yield [before, state] + + const toFlip = [] + for (let i = 0; i < 108; i++) { + toFlip.push(i) + } + + const colors = ['w', 'y', 'o', 'g', 'p'] + + while (toFlip.length > 0) { + const i = Math.floor(Math.random() * toFlip.length) + const [index] = toFlip.splice(i, 1) + const row = Math.floor(index/18) + const col = index % 18 + state[row][col] = color2 == 'random' ? colors[Math.floor(Math.random()*colors.length)] : color2 + const mask = [ + new Array(18).fill(false), + new Array(18).fill(false), + new Array(18).fill(false), + new Array(18).fill(false), + new Array(18).fill(false), + new Array(18).fill(false), + ] + mask[row][col] = true + yield [100, state, mask] + } + yield [after, state] +} + +exports.randomFill = randomFill + + +function* spiral(color1, color2, before, after) { + const state = [ + new Array(18).fill(color1), + new Array(18).fill(color1), + new Array(18).fill(color1), + new Array(18).fill(color1), + new Array(18).fill(color1), + new Array(18).fill(color1), + ] + yield [before, state] + + let xTravel = 18 + let yTravel = 5 + let dir = 0 + let x = -1 + let y = 0 + + while (xTravel > -1 && yTravel > -1) { + if (dir == 0 || dir == 2) { + for (let i = 0; i < xTravel; i++) { + if (dir == 0) { + x++ + } else { + x-- + } + state[y][x] = color2 + yield [50, state] + } + xTravel-- + } else { + for (let i = 0; i < yTravel; i++) { + if (dir == 1) { + y++ + } else { + y-- + } + state[y][x] = color2 + yield [50, state] + } + yTravel-- + } + dir = (dir + 1) % 4 + } + yield [after, state] +} +exports.spiral = spiral + + +function* rain(color1, color2, before, after) { + const state = [ + new Array(18).fill(color1), + new Array(18).fill(color1), + new Array(18).fill(color1), + new Array(18).fill(color1), + new Array(18).fill(color1), + new Array(18).fill(color1), + ] + yield [before, state] + + const toStart = [] + for (let i = 0; i < 18; i++) { + toStart.push(i) + } + + const framesPerStart = 5 + + let i = 0 + while (1) { + + // Move everything down a row + state[5] = state[4] + state[4] = state[3] + state[3] = state[2] + state[2] = state[1] + state[1] = state[0].slice(0) + if (i >= framesPerStart) { + i = 0; + const x = Math.floor(Math.random() * toStart.length) + const [index] = toStart.splice(x, 1) + state[0][index] = color2 + } + + if (state[5].every((c) => c === color2)) { + break; + } + yield [100, state] + + i++ + } + + yield [after, state] +} +exports.rain = rain + +function* testAll() { + const state = [ + new Array(18).fill(' '), + new Array(18).fill(' '), + new Array(18).fill(' '), + new Array(18).fill(' '), + new Array(18).fill(' '), + new Array(18).fill(' '), + ] + yield [5000, state] + for (let i = 0; i < 40; i++) { + const state = [ + new Array(18).fill(flaps[i]), + new Array(18).fill(flaps[i]), + new Array(18).fill(flaps[i]), + new Array(18).fill(flaps[i]), + new Array(18).fill(flaps[i]), + new Array(18).fill(flaps[i]), + ] + yield [1500, state] + } + yield [5000, state] +} +exports.testAll = testAll + +function* sequence1() { + for (const d of welcome) { + yield d + } + yield [5000, [ + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ]] + for (const d of randomFill('b', 'y', 4000, 1000)) { + yield d + } + for (const d of spiral('y', 'p', 1000, 1000)) { + yield d + } + for (const d of rain('p', 'g', 1000, 6000)) { + yield d + } +} +exports.sequence1 = sequence1 + +function* wheelOfFortune(category, solution) { + const state = [ + ' gggggggggggg ', + ' gggggggggggggg ', + ' gggggggggggggg ', + ' gggggggggggg ', + ' ', + ' ', + ] + yield [6000, state] + + state[5] = (' '.repeat(Math.floor((18 - category.length) / 2)) + category).padEnd(18) + + yield [4000, state] + + for (let row = 0; row < solution.length; row++) { + state[row] = state[row].split('').map((v, i) => { + const scol = i - 2 + if (scol < 0 || scol >= solution[row].length) { + return v + } + return solution[row].split('')[scol] === ' ' ? v : 'w' + }).join('') + yield [1000, state] + } + + yield [3000, state] + + const letters = {} + for (const row of solution) { + for (const letter of row.split('')) { + letters[letter] = true + } + } + delete letters[' '] + + const lettersToGuess = [...Object.keys(letters)] + while (lettersToGuess.length > 0) { + console.log(lettersToGuess) + const letter = lettersToGuess.splice(Math.floor(Math.random() * lettersToGuess.length), 1)[0] + let empty = 0 + for (let row = 0; row < solution.length; row++) { + state[row] = state[row].split('').map((v, i) => { + const scol = i - 2 + if (scol < 0 || scol >= solution[row].length) { + return v + } + const solutionRow = solution[row].split('') + return solutionRow[scol] === letter ? letter : v + }).join('') + empty += state[row].split('w').length - 1 + } + yield [empty > 10 ? 8000 : 5000, state] + } + yield [5000, state] +} +exports.wheelOfFortune = wheelOfFortune + diff --git a/codeart_backend/app.js b/codeart_backend/app.js index a12116a..d2887d3 100644 --- a/codeart_backend/app.js +++ b/codeart_backend/app.js @@ -4,6 +4,10 @@ const express = require('express'); const socketIO = require('socket.io'); const bodyParser = require("body-parser"); const cors = require('cors'); +const SerialPort = require('serialport') +const {Splitflap, Util} = require('splitflapjs') +const {PB} = require('splitflapjs-proto') +const {welcome, randomFill, spiral, rain, testAll, sequence1, wheelOfFortune} = require('./animations') /// INITIALIZE SERVICE VARIABLES /// const app = express(); @@ -34,25 +38,305 @@ app.use(bodyParser.json()); app.use(bodyParser.urlencoded({extended: false})); // app.use(cors(corsOptions)); app.use(cors()); +app.use(express.static(__dirname + "/public")); - +console.log('this is dir', __dirname) /// PUBLIC API ENDPOINTS /// -app.get('/bentest', function (req, res) { - res.send('helloooooo') +app.get("/debug", (req, res) => { + res.sendFile(`${__dirname}/public/index.html`, (err) => { + if (err) { + console.log(err); + res.end(err.message); + } + }); }); -app.route('/game/:gameNumber/on/:buttonNumber') - .post(buttonController.handleKeyOn); -app.route('/game/:gameNumber/off/:buttonNumber') - .post(buttonController.handleKeyOff); +app.post('/game',(req, res) => { + megaController.setGameNumber(req.body.game) + res.send('ok') +}) + +// app.route('/game/:gameNumber') +// .post(buttonController.handleKeyOn); -app.route('/game/:gameNumber/getkeyquantity') - .get(buttonController.getKeyQuantity); +// app.route('/game/:gameNumber/off/:buttonNumber') +// .post(buttonController.handleKeyOff); + +// app.route('/game/:gameNumber/getkeyquantity') +// .get(buttonController.getKeyQuantity); /// ARDUINO STUFF /// -megaController.initializeMega(io); +const findPort = (ports, description, infoList) => { + const matchingPorts = ports.filter((portInfo) => { + return infoList.some(([vendorId, productId, serialNumber]) => { + return portInfo.vendorId === vendorId && portInfo.productId === productId && portInfo.serialNumber === serialNumber + }) + }) + + if (matchingPorts.length < 1) { + console.warn(`No matching ${description} usb serial port found (vendorId=${infoList}! Available ports: ${JSON.stringify(ports, undefined, 4)}`) + return null + } else if (matchingPorts.length > 1) { + console.warn(`Multiple ${description} usb serial ports found: ${JSON.stringify(matchingPorts, undefined, 4)}`) + return null + } + console.info(`Found ${description} port at ${matchingPorts[0].path}`) + return matchingPorts[0] +} + +let splitflapLatestState = null + +const splitflapStateForFrontend = (splitflapStatePb) => { + const remappedTo2d = Util.convert1dChainlinkTo2dDualRowZigZag(splitflapStatePb.modules, 18, true) + const singleRow = [].concat(...remappedTo2d); + return { + modules: singleRow, + } +} + +let splitflapConfig2d = [ + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], +] +let animationFrame2d = [] + + +let animationTimeout = null +let currentAnimation = null + +const flaps = [ + ' ', // BLACK + 'J', // 1 + 'B', // 2 + 'M', // 3 + 'R', // 4 + '$', // 5 + 'V', // 6 + 'K', // 7 + 'A', // 8 + 'E', // 9 + 'N', // 10 + 'O', // 11 + 'y', // YELLOW + '*', // 13 + 'g', // GREEN + 'G', // 15 + 'I', // 16 + '%', // 17 + 'D', // 18 + 'L', // 19 + '&', // 20 + '@', // 21 + 'C', // 22 + 'W', // 23 + 'H', // 24 + 'Y', // 25 + 'w', // WHITE + 'Q', // 27 + 'p', // PINK + 'o', // ORANGE + '!', // 30 + 'T', // 31 + 'Z', // 32 + 'P', // 33 + 'F', // 34 + '?', // 35 + 'S', // 36 + '#', // 37 + 'U', // 38 + 'X', // 39 +] + +const charToFlapIndex = (c) => { + const i = flaps.indexOf(c) + if (i >= 0) { + return i + } else { + return null + } +} + +const stringToFlapIndexArray = (str) => { + return str.split('').map(charToFlapIndex) +} + +const stringToMovementMask = (str) => { + return str.split('').map((c) => c === '1') +} + +const initializeHardware = async () => { + const ports = (await SerialPort.list()).filter((portInfo) => portInfo.vendorId !== undefined) + + const splitflapPortInfo = findPort(ports, 'splitflap', [ + ['10c4', 'ea60', '022809A3'], // real + ['10c4', 'ea60', '02280A9E'], // development + ]) + + const splitflap = new Splitflap(splitflapPortInfo !== null ? splitflapPortInfo.path : null, (message) => { + if (message.payload === 'log') { + console.log(`SPLITFLAP LOG: ${message.log.msg}`) + } else if (message.payload === 'splitflapState' && message.splitflapState && message.splitflapState.modules) { + splitflapLatestState = PB.SplitflapState.toObject(message.splitflapState, {defaults: true}) + + io.sockets.emit('splitflap_state', splitflapStateForFrontend(splitflapLatestState)) + } else if (message.payload === 'supervisorState' && message.supervisorState) { + io.sockets.emit('splitflap_supervisor_state', PB.SupervisorState.toObject(message.supervisorState)) + } + }, 108) + + + const sendSplitflapConfig = () => { + splitflap.setFlaps(Util.convert2dDualRowZigZagTo1dChainlink(currentAnimation !== null ? animationFrame2d : splitflapConfig2d, true)) + } + + // Periodically sync splitflap config, e.g. in case MCU gets restarted + sendSplitflapConfig() + setInterval(sendSplitflapConfig, 5000) + + const animationFrame = () => { + const current = currentAnimation.next() + if (!current.done) { + const frameData = current.value + console.log(frameData) + if (typeof frameData[1][0] === 'string') { + animationFrame2d = frameData[1].map(stringToFlapIndexArray) + } else { + animationFrame2d = frameData[1].map((a) => a.map(charToFlapIndex)) + } + let movementMask + if (frameData[2]) { + let mask + if (typeof frameData[2][0] === 'string') { + mask = frameData[2].map(stringToMovementMask) + } else { + mask = frameData[2] + } + movementMask = Util.convert2dDualRowZigZagTo1dChainlink(mask, true) + } + splitflap.setFlaps(Util.convert2dDualRowZigZagTo1dChainlink(animationFrame2d, true), movementMask) + const frameTime = frameData[0] + animationTimeout = setTimeout(animationFrame, frameTime) + } else { + stopAnimation() + } + } + + const startAnimation = (animation) => { + stopAnimation() + currentAnimation = animation + animationFrame() + } + + const stopAnimation = () => { + if (animationTimeout) { + clearTimeout(animationTimeout) + animationTimeout = null + } + currentAnimation = null + sendSplitflapConfig() + } + + + app.post('/splitflap/hard_reset', async (req, res) => { + await splitflap.hardReset() + res.send('ok') + }) + app.post('/splitflap/reset_module', async (req, res) => { + console.log(req.body) + const resetMap = [] + for (let row = 0; row < 6; row++) { + resetMap.push(new Array(18).fill(false)) + } + resetMap[req.body.y][req.body.x] = true + splitflap.resetModules(Util.convert2dDualRowZigZagTo1dChainlink(resetMap, true)) + res.send('ok') + }) + app.get('/splitflap/state', async (req, res) => { + res.json(splitflapLatestState === null ? null : PB.SplitflapState.toObject(splitflapLatestState, { + defaults: true, + })) + }) + app.post('/splitflap/set_flaps', async (req, res) => { + const newLayout = [] + for (let i = 0; i < 6; i++) { + newLayout.push(new Array(18).fill(0)) + } + let row = 0; + let col = 0; + console.log(req.body) + for (let i = 0; i < req.body.text.length && row < 6; i++) { + const char = req.body.text[i] + if (char === '\n') { + col = 0 + row++ + continue + } + + const flapIndex = flaps.indexOf(char) + newLayout[row][col] = flapIndex == -1 ? 0 : flapIndex + col++ + if (col >= 18) { + row++ + col = 0 + } + } + console.log(newLayout) + splitflapConfig2d = newLayout + sendSplitflapConfig() + res.send('ok') + }) + app.post('/splitflap/start_animation', async (req, res) => { + const wofGames = [ + ['EVENT', [ + '', + ' CODE ART', + ' PALO ALTO', + ]], + ['SONG LYRICS', [ + ' NEVER', + ' GONNA GIVE', + ' YOU UP', + '' + ]], + ] + const wof = wofGames[Math.floor(Math.random() * wofGames.length)] + const animations = { + 'welcome': welcome.values(), + 'rain': rain('w', 'g', 6000, 6000), + 'spiral': spiral('o', 'y', 6000, 6000), + 'testAll': testAll(), + 'randomFill': randomFill(' ', 'random', 6000, 6000), + 'sequence1': sequence1(), + 'wheelOfFortune': wheelOfFortune(wof[0], wof[1]) + } + startAnimation(animations[req.body.animation]) + res.send('ok') + }) + app.post('/splitflap/stop_animation', async (req, res) => { + stopAnimation() + res.send('ok') + }) + + + const megaPortInfo = findPort(ports, 'mega', [ + ['2341', '0010', '6493833393235110A1A0'], // real + ['2341', '0042', '5543830343935160C121'], // scott's + ]) + if (megaPortInfo !== null) { + megaController.initializeMega(io, megaPortInfo.path, (flaps2d) => { + splitflapConfig2d = flaps2d + sendSplitflapConfig() + }) + } +} + +initializeHardware() /// WEB SOCKET STUFF /// @@ -61,15 +345,19 @@ io.on('connection', socket => { /// On connect, console log on server, and then send number of users to client io.sockets.emit('connected users', {numberOfUsers: io.engine.clientsCount}); + if (splitflapLatestState !== null) { + io.to(socket.id).emit('splitflap_state', splitflapStateForFrontend(splitflapLatestState)) + } + /// get mega button state when connecting and send to newly connected user if (megaController.getMegaButtonState().length > 0){ megaController.getMegaButtonState().forEach(button =>{ - io.to(socket.id).emit('button down', button) + io.to(socket.id).emit('button down', {buttons: button, flaps: megaController.getFlapState()}) }); - - //send updated board state here! } + else {io.to(socket.id).emit('button down', {buttons: null , flaps: megaController.getFlapState()})} + /// When a user disconnects, console log and then update the clients with the user count socket.on('disconnect', () => { console.log('user disconnected') diff --git a/codeart_backend/controllers/gameController.js b/codeart_backend/controllers/gameController.js index cbf99ff..bf639d3 100644 --- a/codeart_backend/controllers/gameController.js +++ b/codeart_backend/controllers/gameController.js @@ -1,14 +1,144 @@ -const boardLength = 108; +const flaps = [ + 0, // BLACK + 'J', // 1 + 'B', // 2 + 'M', // 3 + 'R', // 4 + '$', // 5 + 'V', // 6 + 'K', // 7 + 'A', // 8 + 'E', // 9 + 'N', // 10 + 'O', // 11 + 12, // YELLOW + '*', // 13 + 14, // GREEN + 'G', // 15 + 'I', // 16 + '%', // 17 + 'D', // 18 + 'L', // 19 + '&', // 20 + '@', // 21 + 'C', // 22 + 'W', // 23 + 'H', // 24 + 'Y', // 25 + 26, // WHITE + 'Q', // 27 + 28, // PINK + 29, // ORANGE + '!', // 30 + 'T', // 31 + 'Z', // 32 + 'P', // 33 + 'F', // 34 + '?', // 35 + 'S', // 36 + '#', // 37 + 'U', // 38 + 'X' // 39 +] + + +// BEN NOTES // +//I converted random and correct letters to their IDs in the array, I'm keeping [0] (black) out of this for now as it's a special condition + +const generateAllLetters = (array) =>{ + let filteredArray = array; + for(var i = randomWrong.length -1; i>=0; i--){ + filteredArray.splice(randomWrong[i], 1); + } + return filteredArray; +} + +const numberOfFlapsPerModule = Array.from(Array(40).keys()); // 0-39 ids of all flap positions +// const randomWrong = [0, 5, 12, 13, 14, 17, 20, 21]; // "incorrect" values //need something special for 0 ('black') or else the code breaks on startup +const randomWrong = [0, 1 , 2, 3 ,4 ,5, 6, 7, 8, 9, 10]; // "incorrect" values //need something special for 0 ('black') +let allLetters = generateAllLetters(numberOfFlapsPerModule); // cull incorrect values from all ids +let flapBoardState = Array(108).fill(0); + const games = [ - { gameNumber: 0, winningButtons: [ 1, 2, 3, 4] }, - { gameNumber: 1, winningButtons: [ 5, 6, 7, 8] }, - { gameNumber: 2, winningButtons: [ 9, 10, 11, 12 ] }, + { gameNumber: 0, + winningButtons: [ 1, 2, 3, 4, 5, 6 ], + winningValue: 'X' + }, + { gameNumber: 1, winningButtons: [ 46, 47, 48, 49, 50 ], winningValue: 'Y' }, + { gameNumber: 2, winningButtons: [ 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 ], winningValue: 'Z' }, ] +exports.handleButtonOn = (buttonID, gameNumber, currentFlapBoardState) => { + + const correctButtonPressed = games[gameNumber].winningButtons.includes(buttonID); + const correctButtons = games[gameNumber].winningButtons; + // const searchValue = games[gameNumber].winningValue; + const searchValue = allLetters; + // const numberOfResults = (currentFlapBoardState.length / correctButtons.length); // this needs to map to the correct puzzle + const numberOfResults = 5; // this needs to map to the correct puzzle -function getRandomInputResponses (){ + + function getRandomInputResponses (){ + const takenIndexes = []; + let outputBoardArray = currentFlapBoardState.slice(); + + //loop through initial board array and identify which winning values are taken and send to an array// + for (i = 0; i < currentFlapBoardState.length; i++){ + if (searchValue.includes(currentFlapBoardState[i])){ + takenIndexes.push(i); + } + } + + //loop for the number of new winning values to be added, identify random indices, check that they are unique + // and then add them the array of taken indices, if not unique, generate a new number and try again + for (i = 0; i < numberOfResults; i++){ + let randomIndex = Math.floor(Math.random() * currentFlapBoardState.length); + + findUnique(randomIndex); + + function findUnique(randomValue){ + // console.log(searchValue) + // console.log(randomValue) + // console.log(searchValue.includes(randomValue)) + // console.log(outputBoardArray[randomValue]) + console.log(searchValue[Math.floor(Math.random() * searchValue.length)] ); + if (!searchValue.includes(outputBoardArray[randomValue])){ + + (correctButtonPressed) ? outputBoardArray[randomValue] = searchValue[Math.floor(Math.random() * searchValue.length)] : + outputBoardArray[randomValue] = randomWrong[Math.floor(Math.random() * randomWrong.length)]; // the needs to NOT be in the searchValue array!!! + } + else{ + let otherRandomIndex = Math.floor(Math.random() * currentFlapBoardState.length); + findUnique(otherRandomIndex); + } + } + + } + return outputBoardArray; + } + + return getRandomInputResponses() +}; + + +console.log(this.handleButtonOn(1, 0, flapBoardState)) + + + +exports.handleButtonOff = (buttonID) => { + + const buttonInt = parseInt(req.params.buttonNumber); + const gameInt = parseInt(req.params.gameNumber); + const requestBoardArray = req.body.boardArray.data; + const magicButtonPressed = games[gameInt].winningKeys.includes(buttonInt); + const magicButtons = games[gameInt].winningKeys; + const searchValue = games[gameInt].winningValue; + const numberOfResults = (requestBoardArray.length / magicButtons.length); + + + function getRandomInputResponses (){ if (!magicButtonPressed){ return requestBoardArray @@ -47,5 +177,8 @@ function getRandomInputResponses (){ } return outputBoardArray; } - }; - + } + + res.json({'data': getRandomInputResponses()}); +}; + diff --git a/codeart_backend/controllers/megaController.js b/codeart_backend/controllers/megaController.js index cb4660a..e60d96d 100644 --- a/codeart_backend/controllers/megaController.js +++ b/codeart_backend/controllers/megaController.js @@ -1,111 +1,151 @@ +const { buttonDown , buttonUp, convertToState, gamesList, shuffleFlapMapping, initialGameStateObject } = require( "./splitFlapController"); +const {Util} = require('splitflapjs') + const buttonMap = { //this maps the arduino mega pins with a 0-XX number - /// GREEN WIRES /// - '54': 0, - '55': 1, - '56': 2, - '57': 3, - '58': 4, - '59': 5, - '60': 6, - '61': 7, - '62': 8, - '63': 9, - - /// BLUE WIRES /// - '2': 10, - '3': 11, - '4': 12, - '5': 13, - '6': 14, - '7': 15, - '8': 16, - '9': 17, - '10': 18, - '11': 19, - - /// YELLOW WIRES /// - '51': 20, - '50': 21, - '49': 22, - '48': 23, - '47': 24, - '46': 25, - '45': 26, - '44': 27, - '43': 28, - '42': 29, - - /// PURPLE WIRES /// - '41': 30, - '40': 31, - '39': 32, - '38': 33, - '37': 34, - '36': 35, - '35': 36, - '34': 37, - '33': 38, - '32': 39, - - /// ORANGE WIRES /// - '31': 40, - '30': 41, - '29': 42, - '28': 43, - '27': 44, - '26': 45, - '25': 46, - '24': 47, - '23': 48, - '22': 49 -}; + ///STRING ON LEFT IS ARDUINO PIN NUMBERS + /// NUMBER ON RIGHT IS PIN ID FOR HUMAN CONSUMPTION + // BOX 1 // + '16': 0, + '17': 1, -const activeButtons = []; // array of boxes that are turned on + // BOX 2 // + '2': 2, + '3': 3, + + // BOX 3 // + '4': 5, + '5': 4, + + // BOX 4 // + '6': 7, + '7': 6, + + // BOX 5 // + '8': 9, + '9': 8, + + // BOX 6 // + '10': 10, + '11': 11, + + // BOX 7 // + '12': 13, + '13': 12, + + // BOX 8 // + '14': 15, + '15': 14, + + // BOX 9 // + '52': 16, + '53': 17, + + // BOX 10 // + '50': 18, + '51': 19, + + // BOX 11 // + '48': 21, + '49': 20, + + // BOX 12 // + '46': 22, + '47': 23, -let currentGame = 1; // number of current game + // BOX 13 // + '44': 25, + '45': 24, -const gameWinningGameCondition = [ - [1 ,2, 3, 4], - [5, 6, 7, 8], - [9, 10, 11, 12], - [13, 14, 15, 16, 17], - [18, 19, 20, 21, 22] -] + // BOX 14 // + '42': 27, + '43': 26, -exports.updateGameBoardState = (currentGame, activeButtons) => { + // BOX 15 // + '40': 28, + '41': 29, - //first check how many active buttons are mapped to the gameWinningCondition + // BOX 16 // + '38': 30, + '39': 31, - //for every button that isn't in the winning condition, do something else + // BOX 17 // + '36': 32, + '37': 33, -return 'this is gameboard state'; + // BOX 18 // + '34': 34, + '35': 35, + + // BOX 19 // + '32': 36, + '33': 37, + + // BOX 20 // + '30': 38, + '31': 39, + + // BOX 21 // + '28': 41, + '29': 40, + + // BOX 22 // + '26': 43, + '27': 42, + + // BOX 23 // + '24': 45, + '25': 44, + + // BOX 24 // + '22': 46, + '23': 47, + +}; + +const activeButtons = []; // array of boxes that are turned on +let gameState = convertToState(gamesList[0]) ; +shuffleFlapMapping(gameState) + +exports.getFlapState = () => { + return gameState.forScott +}; + +exports.setGameNumber= (number) =>{ + gameState = convertToState(gamesList[number]) + shuffleFlapMapping(gameState) + console.log('set to game', number) } exports.getMegaButtonState = () =>{ //returns active button state return activeButtons; } -exports.initializeMega = (io) => { +exports.initializeMega = (io, port, setFlaps) => { + + const updateSplitflap = (allIndexes) => { + const newSplitflapState = [] + for (let i = 0; i < 6; i++) { + newSplitflapState.push(allIndexes.slice(i*18, (i+1)*18)) + } + setFlaps(newSplitflapState) + } const five = require("johnny-five"); // board = new five.Board({ port: "/dev/ttyACM0" }); //use this when utilizing multiple boards, see readme for board designation - board = new five.Board(); + board = new five.Board({port}); board.on("ready", function() { - buttons = new five.Buttons({ - - ////ADD THE PINS!!! pins: [ - /// GREEN PINS /// - 'A0', 'A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9', - /// BLUE PINS /// - '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', - /// YELLOW PINS /// - '51', '50', '49', '48', '47', '46', '45', '44', '43', '42', - /// PURPLE PINS /// + /// ANALOG ROW /// + // 'A0', 'A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9', 'A10', 'A11', 'A12', 'A13', 'A14', 'A15', + /// DIGITAL BLOCK /// + '53', '52', '51', '50', '49', '48', '47', '46', '45', '44', '43', '42', '41', '40', '39', '38', '37', '36', '35', '34', '33', '32', - // ORANGE PINS /// - '31', '30', '29', '28', '27', '26', '25', '24', '23', '22' + '31', '30', '29', '28', '27', '26', '25', '24', '23', '22', + /// COMM ROW /// + // '21', '20', + /// TX/RX ROW // + '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17' ], // holdtime: 2000, isPullup: true @@ -114,48 +154,26 @@ exports.initializeMega = (io) => { }); buttons.on("down", function(button) { - - - //handle if button triggers a game - switch (button.pin) { - case '2': //this is the button pin value (pins), typ. - currentGame = 2; - console.log('game 2 enabled') - break; - case '3': - currentGame = 3; - console.log('game 3 enabled') - break; - case '4': - currentGame = 4; - console.log('game 4 enabled') - break; - case '5': //this is the button pin value (pins), typ. - currentGame = 5; - console.log('game 5 enabled') - break; - case '6': - currentGame = 6; - console.log('game 6 enabled') - break; - - default: - console.log('No Game Selected!'); - } - - - - console.log(`button ${button.pin} is down`); + console.log('button map pin is down', buttonMap[button.pin]); + //update gamestate based on button going down + gameState = buttonDown(gameState, buttonMap[button.pin]); // broadcast which button was pushed - io.sockets.emit('button down', buttonMap[button.pin]); + io.sockets.emit('button down', {buttons: buttonMap[button.pin], flaps: gameState.forScott}); + + updateSplitflap(gameState.forScott) // add button to running list of active buttons (state) activeButtons.push(buttonMap[button.pin]); }); buttons.on("up", function(button) { - console.log(`button ${button.pin} is up`); + console.log('button map pin is up', buttonMap[button.pin]) + // update gamestate based on button going up + gameState = buttonUp(gameState, buttonMap[button.pin]); // broadcast which button was pushed - io.sockets.emit('button up', buttonMap[button.pin]) + io.sockets.emit('button up', {buttons: buttonMap[button.pin], flaps: gameState.forScott}) + + updateSplitflap(gameState.forScott) + // find the index of the button released in the active buttons array const upIndex = activeButtons.indexOf(buttonMap[button.pin]); // splice out the button that was released @@ -164,4 +182,42 @@ exports.initializeMega = (io) => { } }); }); -} \ No newline at end of file +} + + + + +///// ANALOG BUTTONS REFERENCE //// + + + // // BOX 1 // + // '54': 0, // A0 + // '55': 1, // A1 + + // // BOX 2 // + // '56': 2, // A2 + // '57': 3, // A3 + + // // BOX 3 // + // '58': 4, // A4 + // '59': 5, // A5 + + // // BOX 4 // + // '60': 6, // A6 + // '61': 7, // A7 + + // // BOX 5 // + // '62': 8, // A8 + // '63': 9, // A9 + + // // BOX 6 // + // '64': 10, // A10 + // '65': 11, // A11 + + // // BOX 7 // + // '66': 12, // A12 + // '67': 13, // A13 + + // // BOX 8 // + // '68': 14, // A14 + // '69': 15, // A15 diff --git a/codeart_backend/controllers/splitFlapController.js b/codeart_backend/controllers/splitFlapController.js index 50a6751..d438d9d 100644 --- a/codeart_backend/controllers/splitFlapController.js +++ b/codeart_backend/controllers/splitFlapController.js @@ -1,121 +1,387 @@ -var XLSX = require('xlsx'); -const fs = require('fs'); +const randomWrong = ['~', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '+', '{', '}', '|', '[', ']', '\\', '/', ',', '.', '<', '>', '?', '`', ':', '"', '_']; +const allLetters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',"$","*","%","&","@","!","?","#"]; +const benFlapsMap = {"0":0,"2":12,"4":14,"6":26,"8":28,"9":29,"j":1,"b":2,"m":3,"r":4,"$":5,"v":6,"k":7,"a":8,"e":9,"n":10,"o":11,"*":13,"g":15,"i":16,"%":17,"d":18,"l":19,"&":20,"@":21,"c":22,"w":23,"h":24,"y":25,"q":27,"!":30,"t":31,"z":32,"p":33,"f":34,"?":35,"s":36,"#":37,"u":38,"x":39}; +const benRandomWrong = ["2","4","6","8","9"]; +const benButtonMap = {"20":48,"21":47,"22":45,"23":46,"24":44,"25":45,"26":42,"27":43,"28":40,"29":41,"30":38,"31":39,"32":36,"33":37,"34":34,"35":35,"36":32,"37":33,"38":30,"39":31,"40":28,"41":29,"42":26,"43":27,"44":24,"45":25,"46":22,"47":23,"48":20,"49":21,"50":18,"51":19,"52":16,"53":17,"54":0,"55":1,"56":2,"57":3,"58":4,"59":5,"60":6,"61":7,"62":8,"63":9,"64":10,"65":11,"66":12,"67":13,"68":14,"69":15}; +const levelEditorGameObject = {"buttons":["a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a"],"flaps":[null,"y","a","y",null,"i","t",null,"w","o","r","k","s",null,null,null,null,null,null,"t","h","a","n","k","s",null,"e","v","e","r","y","o","n","e",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"f","o","r",null,"a","l","l",null,"t","h","e",null,"h","a","r","d",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"w","o","r","k",null,null,null,null,null,null,null]} +const gamesList = [ + /// FOUR COLORS | The first bud of spring sings the other seeds into joining her uprising + {"buttons":["a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","b","b","a","a","a","b"],"flaps":[null,null,"t","h","e",null,"f","i","r","s","t",null,"b","u","d",null,null,null,null,null,null,null,null,"o","f",null,null,"s","p","r","i","n","g",null,null,null,null,null,"s","i","n","g","s",null,"t","h","e",null,"o","t","h","e","r",null,null,null,"s","e","e","d","s",null,"i","n","t","o",null,null,null,null,null,null,null,null,"j","o","i","n","i","n","g",null,"h","e","r",null,null,null,null,null,null,null,"u","p","r","i","s","i","n","g",null,null,null,null,null,null,null,null]}, -///SETUP XLSX READER -var buffer = fs.readFileSync("../code_art.xlsx"); -var workbook = XLSX.read(buffer, {type:'buffer'}); + // & | technology is a useful servant but a dangerous master + {"buttons":["off","off","b","off","off","off","b","off","off","off","off","b","off","off","off","b","b","off","off","off","b","off","off","off"],"flaps":["t","e","c","h","n","o","l","o","g","y",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"i","s",null,null,null,"a",null,"u","s","e","f","u","l",null,"s","e","r","v","a","n","t",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"b","u","t",null,null,"a",null,"d","a","n","g","e","r","o","u","s",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"m","a","s","t","e","r"]}, + // ! | the future is here its just not widely distributed yet + {"buttons":["off","b","off","off","off","b","off","off","off","off","b","off","off","off","b","off","off","off","off","a","off","off","off","a"],"flaps":[null,"t","h","e",null,"f","u","t","u","r","e",null,"i","s",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"h","e","r","e",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"i","t","s",null,"j","u","s","t",null,"n","o","t",null,null,null,null,null,"w","i","d","e","l","y",null,null,null,null,null,null,null,null,null,null,null,null,null,"d","i","s","t","r","i","b","u","t","e","d",null,"y","e","t",null,null]}, + // $ | if you can control the meaning of words you can control the people who must use them + {"buttons":["a","off","off","off","a","off","off","off","off","a","off","off","off","a","off","off","off","off","b","off","off","off","a","off"],"flaps":["i","f",null,"y","o","u",null,"c","a","n",null,"c","o","n","t","r","o","l","t","h","e",null,"m","e","a","n","i","n","g",null,"o","f",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"w","o","r","d","s","y","o","u",null,"c","a","n",null,"c","o","n","t","r","o","l",null,null,null,"t","h","e",null,"p","e","o","p","l","e",null,"w","h","o",null,null,null,null,null,null,null,null,null,"m","u","s","t",null,"u","s","e",null,"t","h","e","m"]}, -var keys = Object.keys(workbook.Sheets['game_2']);//GETS KEY VALUES OF EACH SHEET [A1, G4, E6]...etc -// console.log(keys) + // GREEN | when you want to know how things really work study them when theyre coming apart + {"buttons":["off","off","b","off","off","off","a","a","off","b","off","off","off","b","a","a","off","off","a","off","off","off","a","b"],"flaps":["w","h","e","n",null,"y","o","u",null,"w","a","n","t",null,"t","o",null,null,"k","n","o","w",null,"h","o","w",null,"t","h","i","n","g","s",null,null,null,"r","e","a","l","l","y",null,"w","o","r","k",null,null,null,null,null,null,null,null,null,null,"s","t","u","d","y",null,"t","h","e","m",null,"w","h","e","n",null,null,null,"t","h","e","y","r","e",null,"c","o","m","i","n","g",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"a","p","a","r","t"]}, -keys.forEach((key) => { - console.log(workbook.Sheets['game_2'][key].v) ///GETS VALUES ASSOCIATED WITH EACH KEY [B, E, N]...etc -}) + // @ | through the machineries of greed pettiness and the abuse of power love occurs + {"buttons":["off","off","a","off","off","off","a","off","off","off","off","a","off","off","off","a","a","off","off","off","a","off","off","off"],"flaps":[null,"t","h","r","o","u","g","h",null,"t","h","e",null,null,null,null,null,null,"m","a","c","h","i","n","e","r","i","e","s",null,"o","f",null,null,null,null,null,null,"g","r","e","e","d",null,"p","e","t","t","i","n","e","s","s",null,null,null,"a","n","d",null,"t","h","e",null,"a","b","u","s","e",null,null,null,null,null,"o","f",null,"p","o","w","e","r",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"l","o","v","e",null,"o","c","c","u","r","s"]}, - - -// B2 - S2 -// B3 - S3 -// B4 - S4 -// B5 - S5 -// B6 - S6 -// B7 - S7 - - -const splitFlapModules = { + // * | the norms and notions of what just is isnt always justice + {"buttons":["b","off","off","off","b","off","off","off","off","b","off","off","off","b","off","off","off","off","a","off","off","off","b","off"],"flaps":[null,"t","h","e",null,null,"n","o","r","m","s",null,"a","n","d",null,null,null,null,null,null,null,null,null,"n","o","t","i","o","n","s",null,null,null,null,null,null,"o","f",null,null,null,"w","h","a","t",null,"j","u","s","t",null,"i","s",null,"i","s","n","t",null,"a","l","w","a","y","s",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"j","u","s","t","i","c","e"]}, - 'B2': 1, 'C2': 2, 'D2': 3, 'E2': 0, 'F2': 0, 'G2': 0, 'H2': 0, 'I2': 0, 'J2': 0, 'K2': 0, 'L2': 0, 'M2': 0, 'N2': 0, 'O2': 0, 'P2': 0, 'Q2': 4, 'R2': 5, 'S2': 6, - - - -}; + // % | language is to the mind more than light is to the eye + {"buttons":["off","a","off","off","off","a","off","off","off","off","a","off","off","off","a","off","off","off","off","b","off","off","off","b"],"flaps":[null,"l","a","n","g","u","a","g","e",null,"i","s",null,"t","o",null,null,null,null,null,null,"t","h","e",null,"m","i","n","d",null,"m","o","r","e",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"t","h","a","n",null,"l","i","g","h","t",null,"i","s",null,null,null,null,null,null,null,null,null,"t","o",null,"t","h","e",null,"e","y","e",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]}, -console.log(splitFlapModules['G2'], 'hello') - -let benTest = []; - -for (const value in splitFlapModules) { - - benTest.push(splitFlapModules[value]) - } - - console.log(benTest) - -const flaps = [ - 0, //BLACK - 'J', - 'B', - 'M', - 'R', - '$', - 'V', - 'K', - 'A', - 'E', - 'N', - 'O', - 12, // yellow - '*', - 14, // green - 'G', - 'I', - '%', - 'D', - 'L', - '&', - '@', - 'C', - 'W', - 'H', - 'Y', - 26, // white - 'Q', - 28, // red - 29, // orange - '!', - 'T', - 'Z', - 'P', - 'F', - '?', - 'S', - '#', - 'U', - 'X' + // ? | you can tune a guitar but you cant tuna fish unless you play bass + {"buttons":["off","off","off","b","off","off","off","b","b","off","off","off","b","off","off","off","off","b","off","off","off","a","off","off"],"flaps":["y","o","u",null,null,"c","a","n",null,null,"t","u","n","e",null,null,"a",null,null,"g","u","i","t","a","r",null,"b","u","t",null,"y","o","u",null,null,null,"c","a","n","t",null,"t","u","n","a",null,"f","i","s","h",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"u","n","l","e","s","s",null,"o","f",null,"c","o","u","r","s","e",null,null,null,null,null,"y","o","u",null,null,"p","l","a","y",null,"b","a","s","s"]}, + + // ORANGE | of all the sad words of tongue or pen the saddest are these it might have been + {"buttons":["off","b","off","off","a","a","off","off","off","off","b","off","a","a","b","off","off","b","off","off","a","a","off","off"],"flaps":["o","f",null,"a","l","l",null,"t","h","e",null,"s","a","d",null,null,null,null,null,"w","o","r","d","s",null,"o","f",null,"t","o","n","g","u","e",null,null,"o","r",null,"p","e","n",null,"t","h","e",null,"s","a","d","d","e","s","t",null,null,null,null,null,"a","r","e",null,"t","h","e","s","e",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"i","t",null,"m","i","g","h","t",null,"h","a","v","e",null,"b","e","e","n"]} ] +const sampleAction = { + id: 1, // id + state: 'a' // what the user settled on, which should update the game +}; +const sampleBtn = { + id: 5, // id + currentState: 'a', // what it currently is + desiredState: 'c' // what we want it to be to win +}; +const sampleFlap = { + id: 4, // id + value: 'F', // value to show + randomVal: null, + matters: true, // it's a + isRevealed: false // is being shown +}; -///SPLIT FLAP FUNCTION - -//ACCEPTS AN ARRAY (ON BOXES) & TESTS IF GAME WINNING CONDITIONS ARE MET - - - - - -// var firstSheet = workbook.SheetNames[0]; - -// console.log(firstSheet) /// outputs sheet name - -// console.log(workbook.Sheets['game_1']) - - -// var first_sheet_name = workbook.SheetNames[0]; -// var address_of_cell = 'A1'; - -// /* Get worksheet */ -// var worksheet = workbook.Sheets[first_sheet_name]; - -// /* Find desired cell */ -// var desired_cell = worksheet[address_of_cell]; +/** + * Takes flapStates and randomly reveals the specified numToReveal + */ +const randomGood = (flapStates, numToReveal) => { + // don't touch these + const dontMatterFlaps = flapStates.filter(fs => !fs.matters); + const mattersFlaps = flapStates.filter(fs => fs.matters); -// /* Get the value */ -// var desired_value = (desired_cell ? desired_cell.v : undefined); \ No newline at end of file + // don't touch these either + const mattersRevealed = mattersFlaps.filter(fs => fs.isRevealed); + + // our pool of revealable flaps + const mattersToReveal = mattersFlaps.filter(fs => !fs.isRevealed); + + const toReveal = mattersToReveal.filter(fs => !fs.isRevealed); + const toRevealShuff = shuffle(toReveal); + const toUpdate = toRevealShuff.slice(0, numToReveal); + const toLeave = toRevealShuff.slice(numToReveal); + const updated = toUpdate.map(fs => { + return { + ...fs, + isRevealed: true, + randomVal: randomLetter() + }; + }); + + const reassembled = dontMatterFlaps + .concat(mattersRevealed) + .concat(toLeave) + .concat(updated) + const reassembledSorted = sortFlaps(reassembled); + + return reassembledSorted; +} + +const removeRandomGood = (flapStates, numToReveal) => { + const unrevealed = flapStates.filter(fs => !fs.isRevealed); + const revealed = flapStates.filter(fs => fs.isRevealed); + const revealedShuffled = shuffle(revealed); + const revealedUnchanged = revealedShuffled.slice(numToReveal); + const revealedToRandom = revealedShuffled.slice(0, numToReveal) + .map(fs => { + return { + ...fs, + isRevealed: false, + randomVal: randomWrongValue() + }; + }); + + const reassembled = unrevealed + .concat(revealedUnchanged) + .concat(revealedToRandom); + + const reassembledSorted = sortFlaps(reassembled); + + return reassembledSorted; +} + +const newRandomEvil = (flapStates, numToReveal) => { + // don't touch these + const dontMatterFlaps = flapStates.filter(fs => !fs.matters); + const mattersFlaps = flapStates.filter(fs => fs.matters); + + // don't touch these either + const mattersRevealed = mattersFlaps.filter(fs => fs.isRevealed); + + // our pool of revealable flaps + const mattersToReveal = mattersFlaps.filter(fs => !fs.isRevealed) + + // If there's nothing left to reveal, but the game isn't won + // we must need to randomize something that's already been revealed + // and correct. They must have all the correct buttons in position + // AND also some additional wrong ones + if (!mattersToReveal.length) { + return removeRandomGood(flapStates, numToReveal); + } + + const toRevealShuff = shuffle(mattersToReveal); + const toUpdate = toRevealShuff.slice(0, numToReveal); + const toLeave = toRevealShuff.slice(numToReveal); + const updated = toUpdate.map(fs => { + return { + ...fs, + randomVal: randomWrongValue() + }; + }); + + const reassembled = dontMatterFlaps + .concat(mattersRevealed) + .concat(toLeave) + .concat(updated) + const reassembledSorted = sortFlaps(reassembled); + + return reassembledSorted; +} + +const shuffleFlapMapping = (game) => { + const mapping = new Array(108) + for (let i = 0; i < mapping.length; i++) { + const buttonForFlap = Math.floor(Math.random() * 24) + mapping[i] = buttonForFlap + } + game.flapToButtonMapping = mapping +} + +const hasWon = btnStates => { + const hasWon = !btnStates.find(btnState => btnState.currentState !== btnState.desiredState); + console.log('was the game won?', hasWon); + return hasWon +} + +const hasReset = btnStates => !btnStates.find(bs => bs.currentState !== 'off'); + +// Takes the "generated game" from the level editor and converts it to +// the live "gameState" object we'll use to track state +const convertToState = game => { + const btnStates = game.buttons + .map((state, id) => { + return { id, currentState: 'off', desiredState: state }; + }); + const flapStates = game.flaps + .map((val, id) => { + return { id, val, matters: val !== null, isRevealed: false, pos: 0 } + }); + + const forScott = flapStates.map(fs => 0); + + return { + ...game, + btnStates, + flapStates, + forScott, + }; +} + +const sortFlaps = flapStates => { + flapStates.sort((a, b) => a.id - b.id); + return flapStates; +} + +const getNumToReveal = (flapStates, btnStates) => { + const numOfBtns = countOfBtns(btnStates); + return Math.floor(countOfMatters(flapStates) / numOfBtns); +} + +const countOfCorrectBtns = (btnStates) => btnStates.filter(bs.currentState === bs.desiredState).length; + +const countOfMatters = flapStates => { + return flapStates.filter(flapState => flapState.matters).length; +} + +const countOfRevealed = flapStates => { + return flapStates.filter(flapState => flapState.isRevealed && flapState.matters).length; +} + +const countOfUnrevealed = flapStates => { + return countOfMatters(flapStates) - countOfRevealed(flapStates); +} + +const countOfBtns = btnStates => { + return btnStates.filter(btnState => btnState.desiredState !== 'off').length; +} + +const shuffle = arr => arr + .map((item) => ({ item, sort: Math.random() })) + .sort((a, b) => a.sort - b.sort) + .map(({ item }) => item); + +const randomItemsFromArray = (arr, numberOfItems) => { + return shuffle(arr).slice(0, numberOfItems); +} + +const randFromOneToMax = max => Math.floor(Math.random() * max) + 1; + +const randomWrongValue = () => { + // return randomItemsFromArray(randomWrong, 1)[0]; + return randomItemsFromArray(benRandomWrong, 1)[0]; +} + +const randomLetter = () => { + return randomItemsFromArray(allLetters, 1)[0]; +} + +const convertToWon = gameState => { + const updatedBtns = gameState.btnStates.map(btnState => { + return { + ...btnState, + currentState: btnState.desiredState + }; + }); + + const updatedFlaps = gameState.flapStates.map(flapState => { + return { + ...flapState, + val: flapState.matters ? flapState.val : null, + isRevealed: flapState.matters, + randomVal: null + }; + }); + + const forScott = gameState.flaps.map(flapLetter => { + return flapLetter === null ? 0 : benFlapsMap[flapLetter] + }); + + return { + ...gameState, + btnStates: updatedBtns, + flapStates: updatedFlaps, + forScott + }; +} + +/** + * This function does "it all" (lol) meaning it takes the entire current state + * (before user's action is applied) and then applies the user's action, updates + * the entire state obj accordingly and returns it. + */ +const doItAll = (gameState, action) => { + // Apply the user's action to the state obj + gameState.btnStates[action.id].currentState = action.state; + + // Short-circuit if it's been reset + if (hasReset(gameState.btnStates)) { + return convertToState(gameState); + } + + // Short-circuit if it's solved + if (hasWon(gameState.btnStates)) { + return convertToWon(gameState); + } + + // See if it was right or wrong + const alreadyTriggered = gameState.btnStates[action.id].triggered === true; + const currentMatchesDesired = gameState.btnStates[action.id].currentState === gameState.btnStates[action.id].desiredState; + const isTurningOff = action.state === 'off'; + const isCorrect = currentMatchesDesired && !isTurningOff; + + console.log('is this correct?', isCorrect) + + // // Determine how many random things will happen + // // (currenlty it's the same whther good or bad. you can change this) + // const numToReveal = getNumToReveal(gameState.flapStates, gameState.btnStates); + + // if (isTurningOff) { + // if (currentMatchesDesired) { + // // Turned off correct -- remove random correct + // gameState.flapStates = removeRandomGood(gameState.flapStates, numToReveal); + // } else { + // // Turned off incorrect - remove random bad + // gameState.flapStates = removeRandomBad(gameState.flapStates, numToReveal); + // } + // } else { + // if (currentMatchesDesired) { + // // Turned on correct -- add random good + // gameState.flapStates = randomGood(gameState.flapStates, numToReveal); + // } else { + // // Turned on incorrect -- add random bad + // gameState.flapStates = newRandomEvil(gameState.flapStates, numToReveal); + // } + // } + gameState.flapStates = gameState.flapStates.map((fs) => { + const buttonState = gameState.btnStates[gameState.flapToButtonMapping[fs.id]] + + if (buttonState.currentState === 'off') { + // Button off - show blank + return { + ...fs, + isRevealed: false, + randomVal: null, + } + } else if (buttonState.currentState == buttonState.desiredState) { + // Button on and right - show good value + return { + ...fs, + isRevealed: true, + randomVal: allLetters.indexOf(fs.randomVal) > -1 ? fs.randomVal : randomLetter(), + } + } else { + // Button on and wrong - show bad value + return { + ...fs, + isRevealed: true, + randomVal: benRandomWrong.indexOf(fs.randomVal) > -1 ? fs.randomVal : randomWrongValue(), + } + } + }) + + const forScott = gameState.flapStates.map(fs => { + const lookupVal = fs.randomVal || (fs.isRevealed && fs.val) || 0; + return benFlapsMap[lookupVal]; + }); + + const newGameState = { + ...gameState, + forScott + }; + + // console.log('returning game state', newGameState); /// JIM STUFF + + return newGameState; +} + +const buttonDown = (gameState, btnPin) => { + // Convert Ben's "btnPin" (0-48) to Jim's "boxId" (0-24) + const boxId = Math.floor(btnPin / 2); + const isEven = btnPin % 2 === 0; + const newState = isEven ? 'a' : 'b'; + + const jimAction = { id: boxId, state: newState }; + console.log(`btnPin ${btnPin} DOWN converted to: ${JSON.stringify(jimAction)}`) + + return doItAll(gameState, jimAction); +} +const buttonUp = (gameState, btnPin) => { + // Convert Ben's "btnPin" (0-48) to Jim's "boxId" (0-24) + const boxId = Math.floor(btnPin / 2); + + const jimAction = { id: boxId, state: 'off' }; + // console.log(`btnPin ${btnPin} UP converted to: ${JSON.stringify(jimAction)}`) + + return doItAll(gameState, jimAction); +} + +const initialGameStateObject = convertToState(levelEditorGameObject); + +module.exports = {buttonUp, buttonDown, convertToState, gamesList, initialGameStateObject, shuffleFlapMapping} \ No newline at end of file diff --git a/codeart_backend/package-lock.json b/codeart_backend/package-lock.json index 1eb948b..7f1100d 100644 --- a/codeart_backend/package-lock.json +++ b/codeart_backend/package-lock.json @@ -11,23 +11,6 @@ "optional": true, "requires": { "debug": "^4.1.1" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "optional": true, - "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==", - "optional": true - } } }, "@serialport/binding-mock": { @@ -41,12 +24,12 @@ }, "dependencies": { "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "optional": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, "ms": { @@ -58,9 +41,9 @@ } }, "@serialport/bindings": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/@serialport/bindings/-/bindings-8.0.7.tgz", - "integrity": "sha512-IqudDL8ne2Y2S0W5fKA6wdgHCIA2e2OIaPVYhGy6duE6legNHFY+05CLicHAyAeTocXmHU7rVNxzVQrOG5tM4g==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@serialport/bindings/-/bindings-8.0.8.tgz", + "integrity": "sha512-xMJHr7CyOPq+wwC/S2RNI+tY+WZW4gXY3tE8QUOIRp0K7lSyLYOzKdyGUtk2uI0ohDMV3OcB+TEhhffT2S2DHQ==", "optional": true, "requires": { "@serialport/binding-abstract": "^8.0.6", @@ -69,23 +52,6 @@ "debug": "^4.1.1", "nan": "^2.14.0", "prebuild-install": "^5.3.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "optional": true, - "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==", - "optional": true - } } }, "@serialport/parser-byte-length": { @@ -134,23 +100,6 @@ "optional": true, "requires": { "debug": "^4.1.1" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "optional": true, - "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==", - "optional": true - } } }, "accepts": { @@ -162,15 +111,6 @@ "negotiator": "0.6.2" } }, - "adler-32": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.2.0.tgz", - "integrity": "sha1-aj5r8KY5ALoVZSgIyxXGgT0aXyU=", - "requires": { - "exit-on-epipe": "~1.0.1", - "printj": "~1.1.0" - } - }, "after": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", @@ -207,9 +147,9 @@ "optional": true }, "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", "optional": true, "requires": { "delegates": "^1.0.0", @@ -226,25 +166,20 @@ "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" }, - "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==" - }, "backo2": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" }, "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", + "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=" }, "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==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "optional": true }, "base64id": { @@ -252,14 +187,6 @@ "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" }, - "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" - } - }, "bindings": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", @@ -269,9 +196,9 @@ } }, "bl": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.2.tgz", - "integrity": "sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "optional": true, "requires": { "buffer": "^5.5.0", @@ -279,12 +206,6 @@ "readable-stream": "^3.4.0" }, "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "optional": true - }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -318,16 +239,37 @@ "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } } }, + "browser-serialport": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/browser-serialport/-/browser-serialport-2.1.0.tgz", + "integrity": "sha1-+4QHfoS5u7uEk1quH8rJzmEF3H8=", + "optional": true + }, "buffer": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.5.0.tgz", - "integrity": "sha512-9FTEDjLjwoAkEwyMGDjYJQN2gfRgOKBKRfiglhvibGbpeeU/pQn1bJxQqm32OD/AIeEuHxU9roxXxg34Byp/Ww==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "optional": true, "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, "bytes": { @@ -335,21 +277,6 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" - }, - "cfb": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.0.tgz", - "integrity": "sha512-sXMvHsKCICVR3Naq+J556K+ExBo9n50iKl6LGarlnvuA2035uMlGA/qVrc0wQtow5P1vJEw9UyrKLCbtIKz+TQ==", - "requires": { - "adler-32": "~1.2.0", - "crc-32": "~1.2.0", - "printj": "~1.1.2" - } - }, "chalk": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", @@ -372,11 +299,6 @@ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "optional": true }, - "codepage": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", - "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==" - }, "color-convert": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.2.2.tgz", @@ -387,20 +309,15 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" - }, "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.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + "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", @@ -437,9 +354,9 @@ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, "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=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "optional": true }, "cors": { @@ -451,29 +368,13 @@ "vary": "^1" } }, - "crc-32": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", - "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", - "requires": { - "exit-on-epipe": "~1.0.1", - "printj": "~1.1.0" - } - }, - "csv-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/csv-parser/-/csv-parser-3.0.0.tgz", - "integrity": "sha512-s6OYSXAK3IdKqYO33y09jhypG/bSDHPuyCme/IdEHfWpLf/jKcpitVFyOC6UemgGk8v7Q5u2XE0vvwmanxhGlQ==", - "requires": { - "minimist": "^1.2.0" - } - }, "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "optional": true, "requires": { - "ms": "2.0.0" + "ms": "2.1.2" } }, "decompress-response": { @@ -533,22 +434,22 @@ } }, "engine.io": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.4.0.tgz", - "integrity": "sha512-XCyYVWzcHnK5cMz7G4VTu2W7zJS7SM1QkcelghyIk/FmobWBtXE7fwhBusEKvCSqc3bMh8fNFMlUkCKTFRxH2w==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz", + "integrity": "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==", "requires": { "accepts": "~1.3.4", "base64id": "2.0.0", - "cookie": "0.3.1", + "cookie": "~0.4.1", "debug": "~4.1.0", "engine.io-parser": "~2.2.0", - "ws": "^7.1.2" + "ws": "~7.4.2" }, "dependencies": { "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" }, "debug": { "version": "4.1.1", @@ -557,63 +458,50 @@ "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==" } } }, "engine.io-client": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.4.0.tgz", - "integrity": "sha512-a4J5QO2k99CM2a0b12IznnyQndoEvtA4UAldhGzKqnHf42I3Qs2W5SPnDvatZRcMaNZs4IevVicBPayxYt6FwA==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.2.tgz", + "integrity": "sha512-QEqIp+gJ/kMHeUun7f5Vv3bteRHppHH/FMBQX/esFj/fuYfjyUKWGMo3VCvIP/V8bE9KcjHmRZrhIz2Z9oNsDA==", "requires": { - "component-emitter": "1.2.1", + "component-emitter": "~1.3.0", "component-inherit": "0.0.3", - "debug": "~4.1.0", + "debug": "~3.1.0", "engine.io-parser": "~2.2.0", "has-cors": "1.1.0", "indexof": "0.0.1", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "~6.1.0", - "xmlhttprequest-ssl": "~1.5.4", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "ws": "~7.4.2", + "xmlhttprequest-ssl": "~1.6.2", "yeast": "0.1.2" }, "dependencies": { "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "requires": { - "ms": "^2.1.1" + "ms": "2.0.0" } }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "ws": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", - "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", - "requires": { - "async-limiter": "~1.0.0" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, "engine.io-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.0.tgz", - "integrity": "sha512-6I3qD9iUxotsC5HEMuuGsKA0cXerGz+4uGcXQEkfBidgKf0amsjrrtwcbwK/nzpZBxclXlV7gGl9dgWvu4LF6w==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz", + "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==", "requires": { "after": "0.8.2", "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.5", + "base64-arraybuffer": "0.1.4", "blob": "0.0.5", "has-binary2": "~1.0.2" } @@ -642,11 +530,6 @@ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, - "exit-on-epipe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", - "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==" - }, "expand-template": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", @@ -688,13 +571,23 @@ "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" + }, + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } } }, - "fflate": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.3.11.tgz", - "integrity": "sha512-Rr5QlUeGN1mbOHlaqcSYMKVpPbgLy0AWT/W0EHxA6NGI12yO1jpoui2zBBvU2G824ltM6Ut8BFgfHSBGfkmS0A==" - }, "file-uri-to-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", @@ -712,33 +605,43 @@ "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } } }, "firmata": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/firmata/-/firmata-2.2.0.tgz", - "integrity": "sha512-/Q8oSwAQVPfnAtiJj9VQb5HBDYvonN/a843MQq+7VjS74Pi2KWYTW2XZajUHH3u47lo0kahaycZpgOp4aidqlA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/firmata/-/firmata-2.3.0.tgz", + "integrity": "sha512-6zl27bHtIlRFM2n5GnU7YeTM5qhRTHQDJ0Zgs8/O/KrbLz3BXIsJFs5Ek2QD6gMG3wgPPQGNaegbTZcj+mo84A==", "optional": true, "requires": { - "firmata-io": "^2.2.0", + "firmata-io": "^2.3.0", "serialport": "^8.0.5" } }, "firmata-io": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/firmata-io/-/firmata-io-2.2.0.tgz", - "integrity": "sha512-K4WTkHWhptQ6OM/SGLz/+jyO4wBcIigEj15gxdJBJ+NErSHaG4Mg8lra0kDNB049NYXMfZYgy27C3mU8+0bybQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/firmata-io/-/firmata-io-2.3.0.tgz", + "integrity": "sha512-OQ1Q0TInQ23ogI61kVwf3WJUD+viPbDI6uLN99yGLe6GioN3EbRSDSZVn1gEXyQLNjD2ZFVKnTbpiQ2t3VoecA==", "optional": true }, "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "frac": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", - "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==" + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" }, "fresh": { "version": "0.5.2", @@ -767,11 +670,6 @@ "wide-align": "^1.1.0" } }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" - }, "github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", @@ -784,6 +682,13 @@ "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", "requires": { "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + } } }, "has-cors": { @@ -812,6 +717,13 @@ "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=" + } } }, "iconv-lite": { @@ -823,9 +735,9 @@ } }, "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "optional": true }, "indexof": { @@ -834,20 +746,21 @@ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" }, "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "optional": true }, "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "optional": true }, "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==" + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, "is-fullwidth-code-point": { "version": "1.0.0", @@ -859,14 +772,15 @@ } }, "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "optional": true }, "johnny-five": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/johnny-five/-/johnny-five-1.4.0.tgz", - "integrity": "sha512-Zqk/HnVueqg9QUcfMtl3cN56E8Mh9FxS8vkvsP+FXLrP1wH6q6pdp1ejht7JTgMJ9J9UI1Z/lI4x1AudCrrYiw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/johnny-five/-/johnny-five-1.5.0.tgz", + "integrity": "sha512-5Br2oLSsItB5dfslE2TXTc5cZ61wAX46kD2yJO1pu57nVRnCIdJZxV4EAiY5VEzH6MVW2vL57NSnZqNxMMMfLg==", "requires": { "browser-serialport": "^2.1.0", "chalk": "2.1.0", @@ -877,19 +791,6 @@ "nanotimer": "0.3.10", "serialport": "^8.0.5", "temporal": "^0.7.1" - }, - "dependencies": { - "browser-serialport": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/browser-serialport/-/browser-serialport-2.1.0.tgz", - "integrity": "sha1-+4QHfoS5u7uEk1quH8rJzmEF3H8=", - "optional": true - }, - "temporal": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/temporal/-/temporal-0.7.1.tgz", - "integrity": "sha512-6Xd3c2llgkjGP7kn2LXuiHZ8/cRiIX5EsPcvn8slkAcayWEzf7xuXxd7BcgUm2djmI1DPFUSMFeFwQcLVMLsOw==" - } } }, "lodash.clonedeep": { @@ -923,16 +824,16 @@ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" + "version": "1.50.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", + "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==" }, "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "version": "2.1.33", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", + "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", "requires": { - "mime-db": "1.40.0" + "mime-db": "1.50.0" } }, "mimic-response": { @@ -944,32 +845,24 @@ "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "optional": true, - "requires": { - "minimist": "^1.2.5" - } + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "optional": true }, "mkdirp-classic": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.2.tgz", - "integrity": "sha512-ejdnDQcR75gwknmMw/tx02AuRs8jCtqFoFqDZMjiNxsu85sRIJVXDKHuLYvUUPRBUtV2FpSZa9bL1BUa3BdR2g==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "optional": true }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==" }, "nanotimer": { "version": "0.3.10", @@ -982,25 +875,15 @@ "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", "optional": true }, - "neat-csv": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/neat-csv/-/neat-csv-6.0.1.tgz", - "integrity": "sha512-j87x1Rj2KiyZeOtFzedZXV8XN7Om/BcEcclPfj84I24yq9vfarNY8DrKKN8nfwN1FtQZgBvxTfQbwpugkV2MoA==", - "requires": { - "csv-parser": "^3.0.0", - "get-stream": "^6.0.0", - "to-readable-stream": "^2.1.0" - } - }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, "node-abi": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.15.0.tgz", - "integrity": "sha512-FeLpTS0F39U7hHZU1srAK4Vx+5AHNVOTP+hxBNQknR/54laTHSFIJkDWDqiquY1LeLUgTfPN7sLPhMubx0PLAg==", + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", + "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", "optional": true, "requires": { "semver": "^5.4.1" @@ -1035,11 +918,6 @@ "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=" - }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -1067,20 +945,14 @@ } }, "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" - } + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" }, "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" - } + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" }, "parseurl": { "version": "1.3.3", @@ -1093,16 +965,16 @@ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, "prebuild-install": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.3.tgz", - "integrity": "sha512-GV+nsUXuPW2p8Zy7SarF/2W/oiK8bFQgJcncoJ0d7kRpekEA0ftChjfEaF9/Y+QJEc/wFR7RAEa8lYByuUIe2g==", + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.6.tgz", + "integrity": "sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg==", "optional": true, "requires": { "detect-libc": "^1.0.3", "expand-template": "^2.0.3", "github-from-package": "0.0.0", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", "napi-build-utils": "^1.0.1", "node-abi": "^2.7.0", "noop-logger": "^0.1.1", @@ -1115,11 +987,6 @@ "which-pm-runs": "^1.0.0" } }, - "printj": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", - "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==" - }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -1127,12 +994,12 @@ "optional": true }, "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==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.0" + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" } }, "pump": { @@ -1191,14 +1058,6 @@ "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "optional": true - } } }, "safe-buffer": { @@ -1237,6 +1096,21 @@ "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", @@ -1245,13 +1119,13 @@ } }, "serialport": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/serialport/-/serialport-8.0.7.tgz", - "integrity": "sha512-R9bfNebs2dblYf5sD/Aaa7j8+siP4X7TGT02lqHM9DF5fyjlrPGXmsLw9+LKOz1AvjGjkxf2NzBVnDpqRX7clQ==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/serialport/-/serialport-8.0.8.tgz", + "integrity": "sha512-GEaMYbAk9chfGyxoVC27PHnKMUMOQOCAg+9umOhAgk88vH0H6DbQ9/Tj3lRwoj7lE+TLra75P/0l1RXMfX4yQg==", "optional": true, "requires": { "@serialport/binding-mock": "^8.0.6", - "@serialport/bindings": "^8.0.7", + "@serialport/bindings": "^8.0.8", "@serialport/parser-byte-length": "^8.0.6", "@serialport/parser-cctalk": "^8.0.6", "@serialport/parser-delimiter": "^8.0.6", @@ -1260,23 +1134,6 @@ "@serialport/parser-regex": "^8.0.6", "@serialport/stream": "^8.0.6", "debug": "^4.1.1" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "optional": true, - "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==", - "optional": true - } } }, "serve-static": { @@ -1302,15 +1159,15 @@ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" }, "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", + "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", "optional": true }, "simple-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", - "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", "optional": true }, "simple-get": { @@ -1325,15 +1182,15 @@ } }, "socket.io": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.3.0.tgz", - "integrity": "sha512-2A892lrj0GcgR/9Qk81EaY2gYhCBxurV0PfmmESO6p27QPrUK1J3zdns+5QPqvUYK2q657nSj0guoIil9+7eFg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.1.tgz", + "integrity": "sha512-Si18v0mMXGAqLqCVpTxBa8MGqriHGQh8ccEOhmsmNS3thNCGBwO8WGrwMibANsWtQQ5NStdZwHqZR3naJVFc3w==", "requires": { "debug": "~4.1.0", - "engine.io": "~3.4.0", + "engine.io": "~3.5.0", "has-binary2": "~1.0.2", "socket.io-adapter": "~1.1.0", - "socket.io-client": "2.3.0", + "socket.io-client": "2.4.0", "socket.io-parser": "~3.4.0" }, "dependencies": { @@ -1344,11 +1201,6 @@ "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==" } } }, @@ -1358,76 +1210,68 @@ "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==" }, "socket.io-client": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.3.0.tgz", - "integrity": "sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz", + "integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==", "requires": { "backo2": "1.0.2", - "base64-arraybuffer": "0.1.5", "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "~4.1.0", - "engine.io-client": "~3.4.0", + "component-emitter": "~1.3.0", + "debug": "~3.1.0", + "engine.io-client": "~3.5.0", "has-binary2": "~1.0.2", - "has-cors": "1.1.0", "indexof": "0.0.1", - "object-component": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", + "parseqs": "0.0.6", + "parseuri": "0.0.6", "socket.io-parser": "~3.3.0", "to-array": "0.1.4" }, "dependencies": { "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "requires": { - "ms": "^2.1.1" + "ms": "2.0.0" } }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "socket.io-parser": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz", - "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz", + "integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==", "requires": { - "component-emitter": "1.2.1", + "component-emitter": "~1.3.0", "debug": "~3.1.0", "isarray": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } } } } }, "socket.io-parser": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.0.tgz", - "integrity": "sha512-/G/VOI+3DBp0+DJKW4KesGnQkQPFmUCbA/oO2QGT6CWxU7hLGWqU3tyuzeSK/dqcyeHsQg1vTe9jiZI8GU9SCQ==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz", + "integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==", "requires": { "component-emitter": "1.2.1", "debug": "~4.1.0", "isarray": "2.0.1" }, "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": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", @@ -1436,20 +1280,678 @@ "ms": "^2.1.1" } }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + } + } + }, + "splitflapjs": { + "version": "file:../ext/splitflap/software/js/splitflapjs", + "requires": { + "cobs": "^0.2.1", + "crc-32": "^1.2.0", + "serialport": "^9.2.4" + }, + "dependencies": { + "@cspotcode/source-map-consumer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==" + }, + "@cspotcode/source-map-support": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.6.1.tgz", + "integrity": "sha512-DX3Z+T5dt1ockmPdobJS/FAsQPW4V4SrWEhD2iYQT2Cb2tQsiMnYxrcUH9By/Z3B+v0S5LMBkQtV/XOBbpLEOg==", + "requires": { + "@cspotcode/source-map-consumer": "0.8.0" + } + }, + "@serialport/binding-abstract": { + "version": "9.2.3", + "resolved": "https://registry.npmjs.org/@serialport/binding-abstract/-/binding-abstract-9.2.3.tgz", + "integrity": "sha512-cQs9tbIlG3P0IrOWyVirqlhWuJ7Ms2Zh9m2108z6Y5UW/iVj6wEOiW8EmK9QX9jmJXYllE7wgGgvVozP5oCj3w==", + "requires": { + "debug": "^4.3.2" + } + }, + "@serialport/binding-mock": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/binding-mock/-/binding-mock-9.2.4.tgz", + "integrity": "sha512-dpEhACCs44oQhh6ajJfJdvQdK38Vq0N4W6iD/gdplglDCK7qXRQCMUjJIeKdS/HSEiWkC3bwumUhUufdsOyT4g==", + "requires": { + "@serialport/binding-abstract": "9.2.3", + "debug": "^4.3.2" + } + }, + "@serialport/bindings": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/bindings/-/bindings-9.2.4.tgz", + "integrity": "sha512-l3IHtIL9aN42Xrqu9L8g/+jZcR0jfnXwRxHslDA8YRd7Jw9lo1qL/vqiIYkvC8NAW3Iz2JdWeM7Pr98l/rwjSQ==", + "requires": { + "@serialport/binding-abstract": "9.2.3", + "@serialport/parser-readline": "9.2.4", + "bindings": "^1.5.0", + "debug": "^4.3.2", + "nan": "^2.15.0", + "prebuild-install": "^6.1.4" + } + }, + "@serialport/parser-byte-length": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-byte-length/-/parser-byte-length-9.2.4.tgz", + "integrity": "sha512-sQD/iw4ZMU3xW9PLi0/GlvU6Y623jGeWecbMkO7izUo/6P7gtfv1c9ikd5h0kwL8AoAOpQA1lxdHIKox+umBUg==" + }, + "@serialport/parser-cctalk": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-cctalk/-/parser-cctalk-9.2.4.tgz", + "integrity": "sha512-T4TU5vQMwmo9AB3gQLFDWbfJXlW5jd9guEsB/nqKjFHTv0FXPdZ7DQ2TpSp8RnHWxU3GX6kYTaDO20BKzc8GPQ==" + }, + "@serialport/parser-delimiter": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-delimiter/-/parser-delimiter-9.2.4.tgz", + "integrity": "sha512-4nvTAoYAgkxFiXrkI+3CA49Yd43CODjeszh89EK+I9c8wOZ+etZduRCzINYPiy26g7zO+GRAb9FoPCsY+sYcbQ==" + }, + "@serialport/parser-inter-byte-timeout": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-inter-byte-timeout/-/parser-inter-byte-timeout-9.2.4.tgz", + "integrity": "sha512-SOAdvr0oBQIOCXX198hiTlxs4JTKg9j5piapw5tNq52fwDOWdbYrFneT/wN04UTMKaDrJuEvXq6T4rv4j7nJ5A==" + }, + "@serialport/parser-readline": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-readline/-/parser-readline-9.2.4.tgz", + "integrity": "sha512-Z1/qrZTQUVhNSJP1hd9YfDvq0o7d87rNwAjjRKbVpa7Qi51tG5BnKt43IV3NFMyBlVcRe0rnIb3tJu57E0SOwg==", + "requires": { + "@serialport/parser-delimiter": "9.2.4" + } + }, + "@serialport/parser-ready": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-ready/-/parser-ready-9.2.4.tgz", + "integrity": "sha512-Pyi94Itjl6qAURwIZr/gmZpMAyTmKXThm6vL5DoAWGQjcRHWB0gwv2TY2v7N+mQLJYUKU3cMnvnATXxHm7xjxw==" + }, + "@serialport/parser-regex": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-regex/-/parser-regex-9.2.4.tgz", + "integrity": "sha512-sI/cVvPOYz+Dbv4ZdnW16qAwvXiFf/1pGASQdbveRTlgJDdz7sRNlCBifzfTN2xljwvCTZYqiudKvDdC1TepRQ==" + }, + "@serialport/stream": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/stream/-/stream-9.2.4.tgz", + "integrity": "sha512-bLye8Ub4vUFQGmkh8qEqehr7SE7EJs2yDs0h9jzuL5oKi+F34CFmWkEErO8GAOQ8YNn7p6b3GxUgs+0BrHHDZQ==", + "requires": { + "debug": "^4.3.2" + } + }, + "@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==" + }, + "@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==" + }, + "@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==" + }, + "@tsconfig/node16": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==" + }, + "@types/node": { + "version": "16.10.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.2.tgz", + "integrity": "sha512-zCclL4/rx+W5SQTzFs9wyvvyCwoK9QtBpratqz2IYJ3O8Umrn0m3nsTv0wQBk9sRGpvUe9CwPDrQFB10f1FIjQ==" + }, + "acorn": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==" + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "cobs": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/cobs/-/cobs-0.2.1.tgz", + "integrity": "sha1-5uuPtTeSdMiNn2hR6qY9Cu4ROSA=" + }, + "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=" + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "crc-32": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", + "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", + "requires": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" + } + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "requires": { + "mimic-response": "^2.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + }, + "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" + } + }, + "exit-on-epipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==" + }, + "expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "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" + } + }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "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.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "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" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + }, + "mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==" + }, + "napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + }, + "node-abi": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", + "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", + "requires": { + "semver": "^5.4.1" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "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", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "prebuild-install": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz", + "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==", + "requires": { + "detect-libc": "^1.0.3", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^2.21.0", + "npmlog": "^4.0.1", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^3.0.3", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + } + }, + "printj": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", + "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==" + }, + "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==" + }, + "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" + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "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" + } + }, + "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==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "serialport": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/serialport/-/serialport-9.2.4.tgz", + "integrity": "sha512-QRn9/iYTK7qXfACskR+f2NIXwSZf/DwPQgFNRP89THFoX2sQVsMyNQZ9quB1XP5RujL7wYTRtZ/eSGSACI1d3A==", + "requires": { + "@serialport/binding-mock": "9.2.4", + "@serialport/bindings": "9.2.4", + "@serialport/parser-byte-length": "9.2.4", + "@serialport/parser-cctalk": "9.2.4", + "@serialport/parser-delimiter": "9.2.4", + "@serialport/parser-inter-byte-timeout": "9.2.4", + "@serialport/parser-readline": "9.2.4", + "@serialport/parser-ready": "9.2.4", + "@serialport/parser-regex": "9.2.4", + "@serialport/stream": "9.2.4", + "debug": "^4.3.2" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "signal-exit": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", + "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==" + }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + }, + "simple-get": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", + "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", + "requires": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^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" + } + }, + "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" + } + }, + "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-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "ts-node": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.2.1.tgz", + "integrity": "sha512-hCnyOyuGmD5wHleOQX6NIjJtYVIO8bPP8F2acWkB4W06wdlkgyvJtubO/I9NkI88hCFECbsEgoLc0VNkYmcSfw==", + "requires": { + "@cspotcode/source-map-support": "0.6.1", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "yn": "3.1.1" + } + }, + "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" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" } } }, - "ssf": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz", - "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", - "requires": { - "frac": "~1.1.2" - } + "splitflapjs-proto": { + "version": "file:../ext/splitflap/software/js/splitflapjs-proto" }, "statuses": { "version": "1.5.0", @@ -1500,24 +2002,24 @@ } }, "tar-fs": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz", - "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", "optional": true, "requires": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", - "tar-stream": "^2.0.0" + "tar-stream": "^2.1.4" } }, "tar-stream": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.2.tgz", - "integrity": "sha512-UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "optional": true, "requires": { - "bl": "^4.0.1", + "bl": "^4.0.3", "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", "inherits": "^2.0.3", @@ -1537,16 +2039,16 @@ } } }, + "temporal": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/temporal/-/temporal-0.7.1.tgz", + "integrity": "sha512-6Xd3c2llgkjGP7kn2LXuiHZ8/cRiIX5EsPcvn8slkAcayWEzf7xuXxd7BcgUm2djmI1DPFUSMFeFwQcLVMLsOw==" + }, "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-readable-stream": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-2.1.0.tgz", - "integrity": "sha512-o3Qa6DGg1CEXshSdvWNX2sN4QHqg03SPq7U6jPXRahlQdl5dK8oXjkU/2/sGrnOZKeGV1zLSO8qPwyKklPPE7w==" - }, "toidentifier": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", @@ -1606,16 +2108,6 @@ "string-width": "^1.0.2 || 2" } }, - "wmf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz", - "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==" - }, - "word": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz", - "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==" - }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -1623,31 +2115,14 @@ "optional": true }, "ws": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.3.tgz", - "integrity": "sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ==" - }, - "xlsx": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.17.1.tgz", - "integrity": "sha512-SrvK+kMEjiVIKYyJSjSIJwzm2cZn8nQWVh708g7O+pTsmgjoa+uYNLEUn7jmwQdMI/ffCHcY5yEvwBXssBwpRA==", - "requires": { - "adler-32": "~1.2.0", - "cfb": "^1.1.4", - "codepage": "~1.15.0", - "commander": "~2.17.1", - "crc-32": "~1.2.0", - "exit-on-epipe": "~1.0.1", - "fflate": "^0.3.8", - "ssf": "~0.11.2", - "wmf": "~1.0.1", - "word": "~0.3.0" - } + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" }, "xmlhttprequest-ssl": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", - "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz", + "integrity": "sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q==" }, "yeast": { "version": "0.1.2", diff --git a/codeart_backend/package.json b/codeart_backend/package.json index 06c67fd..d61354f 100644 --- a/codeart_backend/package.json +++ b/codeart_backend/package.json @@ -20,8 +20,8 @@ "express": "^4.17.1", "johnny-five": "^1.4.0", "onoff": "^5.0.1", - "raspi-io": "^11.0.0", "socket.io": "^2.3.0", - "xlsx": "^0.17.1" + "splitflapjs": "file:../ext/splitflap/software/js/splitflapjs", + "splitflapjs-proto": "file:../ext/splitflap/software/js/splitflapjs-proto" } } diff --git a/codeart_backend/public/.DS_Store b/codeart_backend/public/.DS_Store new file mode 100644 index 0000000..e69be22 Binary files /dev/null and b/codeart_backend/public/.DS_Store differ diff --git a/codeart_backend/public/asset-manifest.json b/codeart_backend/public/asset-manifest.json new file mode 100644 index 0000000..720d2a1 --- /dev/null +++ b/codeart_backend/public/asset-manifest.json @@ -0,0 +1,26 @@ +{ + "files": { + "main.css": "/static/css/main.800ad38d.chunk.css", + "main.js": "/static/js/main.c04284a1.chunk.js", + "main.js.map": "/static/js/main.c04284a1.chunk.js.map", + "runtime-main.js": "/static/js/runtime-main.95403422.js", + "runtime-main.js.map": "/static/js/runtime-main.95403422.js.map", + "static/css/2.9a44ea78.chunk.css": "/static/css/2.9a44ea78.chunk.css", + "static/js/2.f6b7336f.chunk.js": "/static/js/2.f6b7336f.chunk.js", + "static/js/2.f6b7336f.chunk.js.map": "/static/js/2.f6b7336f.chunk.js.map", + "index.html": "/index.html", + "precache-manifest.c435daf8b2e911eb4bb8e336fc112412.js": "/precache-manifest.c435daf8b2e911eb4bb8e336fc112412.js", + "service-worker.js": "/service-worker.js", + "static/css/2.9a44ea78.chunk.css.map": "/static/css/2.9a44ea78.chunk.css.map", + "static/css/main.800ad38d.chunk.css.map": "/static/css/main.800ad38d.chunk.css.map", + "static/js/2.f6b7336f.chunk.js.LICENSE.txt": "/static/js/2.f6b7336f.chunk.js.LICENSE.txt", + "static/media/index.css": "/static/media/libre-barcode-128-text-latin-400.c85cc554.woff" + }, + "entrypoints": [ + "static/js/runtime-main.95403422.js", + "static/css/2.9a44ea78.chunk.css", + "static/js/2.f6b7336f.chunk.js", + "static/css/main.800ad38d.chunk.css", + "static/js/main.c04284a1.chunk.js" + ] +} \ No newline at end of file diff --git a/codeart_backend/public/favicon.ico b/codeart_backend/public/favicon.ico new file mode 100644 index 0000000..7e2cafd Binary files /dev/null and b/codeart_backend/public/favicon.ico differ diff --git a/codeart_backend/public/images/logo192.png b/codeart_backend/public/images/logo192.png new file mode 100644 index 0000000..fc44b0a Binary files /dev/null and b/codeart_backend/public/images/logo192.png differ diff --git a/codeart_backend/public/images/logo512.png b/codeart_backend/public/images/logo512.png new file mode 100644 index 0000000..a4e47a6 Binary files /dev/null and b/codeart_backend/public/images/logo512.png differ diff --git a/codeart_backend/public/index.html b/codeart_backend/public/index.html new file mode 100644 index 0000000..64c2f1d --- /dev/null +++ b/codeart_backend/public/index.html @@ -0,0 +1 @@ +I/O
\ No newline at end of file diff --git a/codeart_backend/public/manifest.json b/codeart_backend/public/manifest.json new file mode 100644 index 0000000..080d6c7 --- /dev/null +++ b/codeart_backend/public/manifest.json @@ -0,0 +1,25 @@ +{ + "short_name": "React App", + "name": "Create React App Sample", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + }, + { + "src": "logo192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "logo512.png", + "type": "image/png", + "sizes": "512x512" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/codeart_backend/public/precache-manifest.c435daf8b2e911eb4bb8e336fc112412.js b/codeart_backend/public/precache-manifest.c435daf8b2e911eb4bb8e336fc112412.js new file mode 100644 index 0000000..07dfc33 --- /dev/null +++ b/codeart_backend/public/precache-manifest.c435daf8b2e911eb4bb8e336fc112412.js @@ -0,0 +1,42 @@ +self.__precacheManifest = (self.__precacheManifest || []).concat([ + { + "revision": "d79c6ccab7bdef96c02379adeb9ef4cf", + "url": "/index.html" + }, + { + "revision": "cf3daa539c6822fa7295", + "url": "/static/css/2.9a44ea78.chunk.css" + }, + { + "revision": "ef4c50688a349d645357", + "url": "/static/css/main.800ad38d.chunk.css" + }, + { + "revision": "cf3daa539c6822fa7295", + "url": "/static/js/2.f6b7336f.chunk.js" + }, + { + "revision": "b67bc97fd0dd67004287af4028afc1b1", + "url": "/static/js/2.f6b7336f.chunk.js.LICENSE.txt" + }, + { + "revision": "ef4c50688a349d645357", + "url": "/static/js/main.c04284a1.chunk.js" + }, + { + "revision": "c05c057e30e4bd6e6609", + "url": "/static/js/runtime-main.95403422.js" + }, + { + "revision": "15db01c5265adb04fd5e691e5ef26009", + "url": "/static/media/ZillaSlab-Regular.15db01c5.ttf" + }, + { + "revision": "7c75db4d69137d8618f1e129fb909d2f", + "url": "/static/media/libre-barcode-128-text-latin-400.7c75db4d.woff2" + }, + { + "revision": "c85cc554478b7dca4980d5c1adb01395", + "url": "/static/media/libre-barcode-128-text-latin-400.c85cc554.woff" + } +]); \ No newline at end of file diff --git a/codeart_backend/public/robots.txt b/codeart_backend/public/robots.txt new file mode 100644 index 0000000..e9e57dc --- /dev/null +++ b/codeart_backend/public/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/codeart_backend/public/service-worker.js b/codeart_backend/public/service-worker.js new file mode 100644 index 0000000..d7a0357 --- /dev/null +++ b/codeart_backend/public/service-worker.js @@ -0,0 +1,39 @@ +/** + * Welcome to your Workbox-powered service worker! + * + * You'll need to register this file in your web app and you should + * disable HTTP caching for this file too. + * See https://goo.gl/nhQhGp + * + * The rest of the code is auto-generated. Please don't update this file + * directly; instead, make changes to your Workbox build configuration + * and re-run your build process. + * See https://goo.gl/2aRDsh + */ + +importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js"); + +importScripts( + "/precache-manifest.c435daf8b2e911eb4bb8e336fc112412.js" +); + +self.addEventListener('message', (event) => { + if (event.data && event.data.type === 'SKIP_WAITING') { + self.skipWaiting(); + } +}); + +workbox.core.clientsClaim(); + +/** + * The workboxSW.precacheAndRoute() method efficiently caches and responds to + * requests for URLs in the manifest. + * See https://goo.gl/S9QRab + */ +self.__precacheManifest = [].concat(self.__precacheManifest || []); +workbox.precaching.precacheAndRoute(self.__precacheManifest, {}); + +workbox.routing.registerNavigationRoute(workbox.precaching.getCacheKeyForURL("/index.html"), { + + blacklist: [/^\/_/,/\/[^/?]+\.[^/]+$/], +}); diff --git a/codeart_backend/public/static/css/2.9a44ea78.chunk.css b/codeart_backend/public/static/css/2.9a44ea78.chunk.css new file mode 100644 index 0000000..e40e91e --- /dev/null +++ b/codeart_backend/public/static/css/2.9a44ea78.chunk.css @@ -0,0 +1,2 @@ +@font-face{font-family:"Libre Barcode 128 Text";font-style:normal;font-display:swap;font-weight:400;src:local("Libre Barcode 128 Text Regular "),local("Libre Barcode 128 Text-Regular"),url(/static/media/libre-barcode-128-text-latin-400.7c75db4d.woff2) format("woff2"),url(/static/media/libre-barcode-128-text-latin-400.c85cc554.woff) format("woff")} +/*# sourceMappingURL=2.9a44ea78.chunk.css.map */ \ No newline at end of file diff --git a/codeart_backend/public/static/css/2.9a44ea78.chunk.css.map b/codeart_backend/public/static/css/2.9a44ea78.chunk.css.map new file mode 100644 index 0000000..81c45aa --- /dev/null +++ b/codeart_backend/public/static/css/2.9a44ea78.chunk.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["index.css"],"names":[],"mappings":"AACA,WACE,oCAAqC,CACrC,iBAAkB,CAClB,iBAAkB,CAClB,eAAgB,CAChB,wPAKF","file":"2.9a44ea78.chunk.css","sourcesContent":["/* libre-barcode-128-text-400normal - latin */\n@font-face {\n font-family: 'Libre Barcode 128 Text';\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src:\n local('Libre Barcode 128 Text Regular '),\n local('Libre Barcode 128 Text-Regular'),\n url('./files/libre-barcode-128-text-latin-400.woff2') format('woff2'), /* Super Modern Browsers */\n url('./files/libre-barcode-128-text-latin-400.woff') format('woff'); /* Modern Browsers */\n}\n\n"]} \ No newline at end of file diff --git a/codeart_backend/public/static/css/main.800ad38d.chunk.css b/codeart_backend/public/static/css/main.800ad38d.chunk.css new file mode 100644 index 0000000..ecbbfac --- /dev/null +++ b/codeart_backend/public/static/css/main.800ad38d.chunk.css @@ -0,0 +1,2 @@ +body{margin:auto;width:900px;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='304' height='304'%3E%3Cpath fill='%235c5c5c' fill-opacity='.4' d='M44.1 224a5 5 0 110 2H0v-2h44.1zm160 48a5 5 0 110 2H82v-2h122.1zm57.8-46a5 5 0 110-2H304v2h-42.1zm0 16a5 5 0 110-2H304v2h-42.1zm6.2-114a5 5 0 110 2h-86.2a5 5 0 110-2h86.2zm-256-48a5 5 0 110 2H0v-2h12.1zm185.8 34a5 5 0 110-2h86.2a5 5 0 110 2h-86.2zM258 12.1a5 5 0 11-2 0V0h2v12.1zm-64 208a5 5 0 11-2 0v-54.2a5 5 0 112 0v54.2zm48-198.2V80h62v2h-64V21.9a5 5 0 112 0zm16 16V64h46v2h-48V37.9a5 5 0 112 0zm-128 96V208h16v12.1a5 5 0 11-2 0V210h-16v-76.1a5 5 0 112 0zm-5.9-21.9a5 5 0 110 2H114v48H85.9a5 5 0 110-2H112v-48h12.1zm-6.2 130a5 5 0 110-2H176v-74.1a5 5 0 112 0V242h-60.1zm-16-64a5 5 0 110-2H114v48h10.1a5 5 0 110 2H112v-48h-10.1zM66 284.1a5 5 0 11-2 0V274H50v30h-2v-32h18v12.1zM236.1 176a5 5 0 110 2H226v94h48v32h-2v-30h-48v-98h12.1zm25.8-30a5 5 0 110-2H274v44.1a5 5 0 11-2 0V146h-10.1zm-64 96a5 5 0 110-2H208v-80h16v-14h-42.1a5 5 0 110-2H226v18h-16v80h-12.1zm86.2-210a5 5 0 110 2H272V0h2v32h10.1zM98 101.9V146H53.9a5 5 0 110-2H96v-42.1a5 5 0 112 0zM53.9 34a5 5 0 110-2H80V0h2v34H53.9zm60.1 3.9V66H82v64H69.9a5 5 0 110-2H80V64h32V37.9a5 5 0 112 0zM101.9 82a5 5 0 110-2H128V37.9a5 5 0 112 0V82h-28.1zm16-64a5 5 0 110-2H146v44.1a5 5 0 11-2 0V18h-26.1zm102.2 270a5 5 0 110 2H98v14h-2v-16h124.1zM242 149.9V160h16v34h-16v62h48v48h-2v-46h-48v-66h16v-30h-16v-12.1a5 5 0 112 0zM53.9 18a5 5 0 110-2H64V2H48V0h18v18H53.9zm112 32a5 5 0 110-2H192V0h50v2h-48v48h-28.1zm-48-48a5 5 0 01-9.8-2h2.07a3 3 0 105.66 0H178v34h-18V21.9a5 5 0 112 0V32h14V2h-58.1zm0 96a5 5 0 110-2H137l32-32h39V21.9a5 5 0 112 0V66h-40.17l-32 32H117.9zm28.1 90.1a5 5 0 11-2 0v-76.51L175.59 80H224V21.9a5 5 0 112 0V82h-49.59L146 112.41v75.69zm16 32a5 5 0 11-2 0v-99.51L184.59 96H300.1a5 5 0 013.9-3.9v2.07a3 3 0 000 5.66v2.07a5 5 0 01-3.9-3.9H185.41L162 121.41v98.69zm-144-64a5 5 0 11-2 0v-3.51l48-48V48h32V0h2v50H66v55.41l-48 48v2.69zM50 53.9v43.51l-48 48V208h26.1a5 5 0 110 2H0v-65.41l48-48V53.9a5 5 0 112 0zm-16 16v19.51l-34 34v-2.82l32-32V69.9a5 5 0 112 0zM12.1 32a5 5 0 110 2H9.41L0 43.41V40.6L8.59 32h3.51zm265.8 18a5 5 0 110-2h18.69l7.41-7.41v2.82L297.41 50H277.9zm-16 160a5 5 0 110-2H288v-71.41l16-16v2.82l-14 14V210h-28.1zm-208 32a5 5 0 110-2H64v-22.59L40.59 194H21.9a5 5 0 110-2h19.51L66 216.59V242H53.9zm150.2 14a5 5 0 110 2H96v-56.6L56.6 162H37.9a5 5 0 110-2h19.5L98 200.6V256h106.1zm-150.2 2a5 5 0 110-2H80v-46.59L48.59 178H21.9a5 5 0 110-2h27.51L82 208.59V258H53.9zM34 39.8v1.61L9.41 66H0v-2h8.59L32 40.59V0h2v39.8zM2 300.1a5 5 0 013.9 3.9H3.83A3 3 0 000 302.17V256h18v48h-2v-46H2v42.1zM34 241v63h-2v-62H0v-2h34v1zM17 18H0v-2h16V0h2v18h-1zm273-2h14v2h-16V0h2v16zm-32 273v15h-2v-14h-14v14h-2v-16h18v1zM0 92.1A5.02 5.02 0 016 97a5 5 0 01-6 4.9v-2.07a3 3 0 100-5.66V92.1zM80 272h2v32h-2v-32zm37.9 32h-2.07a3 3 0 00-5.66 0h-2.07a5 5 0 019.8 0zM5.9 0A5.02 5.02 0 010 5.9V3.83A3 3 0 003.83 0H5.9zm294.2 0h2.07A3 3 0 00304 3.83V5.9a5 5 0 01-3.9-5.9zm3.9 300.1v2.07a3 3 0 00-1.83 1.83h-2.07a5 5 0 013.9-3.9zM97 100a3 3 0 100-6 3 3 0 000 6zm0-16a3 3 0 100-6 3 3 0 000 6zm16 16a3 3 0 100-6 3 3 0 000 6zm16 16a3 3 0 100-6 3 3 0 000 6zm0 16a3 3 0 100-6 3 3 0 000 6zm-48 32a3 3 0 100-6 3 3 0 000 6zm16 16a3 3 0 100-6 3 3 0 000 6zm32 48a3 3 0 100-6 3 3 0 000 6zm-16 16a3 3 0 100-6 3 3 0 000 6zm32-16a3 3 0 100-6 3 3 0 000 6zm0-32a3 3 0 100-6 3 3 0 000 6zm16 32a3 3 0 100-6 3 3 0 000 6zm32 16a3 3 0 100-6 3 3 0 000 6zm0-16a3 3 0 100-6 3 3 0 000 6zm-16-64a3 3 0 100-6 3 3 0 000 6zm16 0a3 3 0 100-6 3 3 0 000 6zm16 96a3 3 0 100-6 3 3 0 000 6zm0 16a3 3 0 100-6 3 3 0 000 6zm16 16a3 3 0 100-6 3 3 0 000 6zm16-144a3 3 0 100-6 3 3 0 000 6zm0 32a3 3 0 100-6 3 3 0 000 6zm16-32a3 3 0 100-6 3 3 0 000 6zm16-16a3 3 0 100-6 3 3 0 000 6zm-96 0a3 3 0 100-6 3 3 0 000 6zm0 16a3 3 0 100-6 3 3 0 000 6zm16-32a3 3 0 100-6 3 3 0 000 6zm96 0a3 3 0 100-6 3 3 0 000 6zm-16-64a3 3 0 100-6 3 3 0 000 6zm16-16a3 3 0 100-6 3 3 0 000 6zm-32 0a3 3 0 100-6 3 3 0 000 6zm0-16a3 3 0 100-6 3 3 0 000 6zm-16 0a3 3 0 100-6 3 3 0 000 6zm-16 0a3 3 0 100-6 3 3 0 000 6zm-16 0a3 3 0 100-6 3 3 0 000 6zM49 36a3 3 0 100-6 3 3 0 000 6zm-32 0a3 3 0 100-6 3 3 0 000 6zm32 16a3 3 0 100-6 3 3 0 000 6zM33 68a3 3 0 100-6 3 3 0 000 6zm16-48a3 3 0 100-6 3 3 0 000 6zm0 240a3 3 0 100-6 3 3 0 000 6zm16 32a3 3 0 100-6 3 3 0 000 6zm-16-64a3 3 0 100-6 3 3 0 000 6zm0 16a3 3 0 100-6 3 3 0 000 6zm-16-32a3 3 0 100-6 3 3 0 000 6zm80-176a3 3 0 100-6 3 3 0 000 6zm16 0a3 3 0 100-6 3 3 0 000 6zm-16-16a3 3 0 100-6 3 3 0 000 6zm32 48a3 3 0 100-6 3 3 0 000 6zm16-16a3 3 0 100-6 3 3 0 000 6zm0-32a3 3 0 100-6 3 3 0 000 6zm112 176a3 3 0 100-6 3 3 0 000 6zm-16 16a3 3 0 100-6 3 3 0 000 6zm0 16a3 3 0 100-6 3 3 0 000 6zm0 16a3 3 0 100-6 3 3 0 000 6zM17 180a3 3 0 100-6 3 3 0 000 6zm0 16a3 3 0 100-6 3 3 0 000 6zm0-32a3 3 0 100-6 3 3 0 000 6zm16 0a3 3 0 100-6 3 3 0 000 6zM17 84a3 3 0 100-6 3 3 0 000 6zm32 64a3 3 0 100-6 3 3 0 000 6zm16-16a3 3 0 100-6 3 3 0 000 6z'/%3E%3C/svg%3E")}#app-content,body{background-color:#000}#app-content{margin-top:30px;margin-bottom:60px;padding:15px 2% 30px}code{font-family:source-code-pro,Menlo,Monaco,Consolas,"Courier New",monospace}@font-face{font-family:"Zilla Slab";src:local("Zilla Slab"),url(/static/media/ZillaSlab-Regular.15db01c5.ttf) format("tff")}.header{font-family:"Libre Barcode 128 Text",cursive;font-size:35px;color:#cfcfcf}.input-board-container{margin-top:15px;width:100%;display:inline-block;background-color:#fff;z-index:5}.input-board-users{display:inline-block;width:98%;padding-left:2%;margin-top:1%;margin-bottom:1%}.input-board-game-select{z-index:999}.input-board{display:inline-block;width:96%;margin-bottom:5%;padding-left:2%;padding-right:2%}.column-symbol-layout-container,.row-symbol-layout-container{width:900px;position:fixed;margin:auto;left:0;right:0;z-index:1}.column-symbol-container{width:830px;margin:auto}.column-symbol{color:red;font-size:25px;text-align:center;display:inline-block;width:6%;margin-left:2%;margin-right:2%;margin-bottom:4.55%}.row-symbol-container{width:945px;margin:35px auto auto;padding-left:20px}.row-symbol{color:#00f;font-size:25px;text-align:center;display:inline-block;width:4%;margin-right:4.7%;margin-bottom:4%}.orange{color:orange}.purple{color:purple}.cyan{color:#0ff}.blue{color:#00f}.red{color:red}.yellow{color:#ff0}.green{color:green}.magenta{color:#f0f}.black{color:#000}.input-board-button-black,.input-board-button-green,.input-board-button-orange,.input-board-button-pink,.input-board-button-yellow{font-size:40px;text-align:center;display:inline-block;width:7.5%;margin-left:2.5%;margin-right:2.5%;margin-top:3.5%;padding-top:1%;padding-bottom:1%;z-index:10;position:relative}.input-board-button-black{background-color:#000;color:#fff}.input-board-button-pink{background-color:#f0c;color:#000}.input-board-button-orange{background-color:#f93;color:#000}.input-board-button-yellow{background-color:#ff6;color:#000}.input-board-button-green{background-color:#6f6;color:#000}.output-board-container{margin-top:60px;padding:5%;background-color:#fff}.output-board{border-collapse:separate;border-spacing:5px;table-layout:fixed}.split-flap-button{width:28px;text-align:center;font-size:25px;height:50px;overflow:hidden;border:4px solid transparent}.split-flap-warning{border:4px dotted grey}.split-flap-error{outline:4px solid red}.split-flap-button-black{background-color:#000;color:#fff}.split-flap-button-white{background-color:#fff;color:#fff}.split-flap-button-black-empty{background-color:#000;color:#000}.split-flap-button-green{background-color:#6f6;color:#6f6}.split-flap-button-yellow{background-color:#ff6;color:#ff6}.split-flap-button-pink{background-color:#f0c;color:#f0c}.split-flap-button-orange{background-color:#f93;color:#f93}.diagnostics{margin-top:60px;padding:5%;background-color:#fff}.power-channel{display:inline-block;background:#000;color:#fff;padding:5px;margin:0 5px}.power-channel .status{margin:0 auto;text-align:center}.power-channel .voltage{text-align:right;color:#9696fa}.power-channel .current{text-align:right;color:#78ff64}.power-channel .status-on-true{color:#fff}.power-channel .status-on-false{color:grey} +/*# sourceMappingURL=main.800ad38d.chunk.css.map */ \ No newline at end of file diff --git a/codeart_backend/public/static/css/main.800ad38d.chunk.css.map b/codeart_backend/public/static/css/main.800ad38d.chunk.css.map new file mode 100644 index 0000000..9900d39 --- /dev/null +++ b/codeart_backend/public/static/css/main.800ad38d.chunk.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["index.css","style.css"],"names":[],"mappings":"AAAA,KACE,WAAY,CACZ,WAAY,CAQZ,m1JACF,CAGA,kBALE,qBAaF,CARA,aACE,eAAgB,CAEhB,kBAAmB,CAGnB,oBAEF,CAIA,KACE,yEAEF,CAGA,WACE,wBAAyB,CACzB,uFACF,CCnCA,QAGE,4CAA8C,CAC9C,cAAe,CAEf,aAEF,CARA,uBACI,eAAgB,CAChB,UAAW,CACX,oBAAqB,CACrB,qBAAuB,CACvB,SACJ,CAGA,mBACI,oBAAqB,CACrB,SAAU,CACV,eAAgB,CAChB,aAAc,CACd,gBACJ,CAEA,yBACI,WACJ,CAEA,aACI,oBAAqB,CACrB,SAAU,CACV,gBAAiB,CACjB,eAAgB,CAChB,gBACJ,CAGA,6DACI,WAAY,CACZ,cAAe,CACf,WAAW,CACX,MAAO,CACP,OAAQ,CACR,SACJ,CAEA,yBACI,WAAY,CACZ,WACJ,CAEA,eACI,SAAU,CACV,cAAe,CACf,iBAAkB,CAClB,oBAAqB,CACrB,QAAS,CACT,cAAe,CACf,eAAgB,CAChB,mBACJ,CAGA,sBACI,WAAY,CAEZ,qBAAgB,CAChB,iBAEJ,CAEA,YACI,UAAW,CACX,cAAe,CACf,iBAAkB,CAClB,oBAAqB,CACrB,QAAS,CACT,iBAAkB,CAClB,gBACJ,CAEA,QACI,YACJ,CAEA,QACI,YACJ,CAEA,MACI,UACJ,CAEA,MACI,UACJ,CAEA,KACI,SACJ,CAEA,QACI,UACJ,CAEA,OACI,WACJ,CAEA,SACI,UACJ,CACA,OACI,UACJ,CA3GA,mIAEI,cAAe,CACf,iBAAkB,CAClB,oBAAqB,CACrB,UAAW,CACX,gBAAiB,CACjB,iBAAkB,CAClB,eAAgB,CAChB,cAAe,CACf,iBAAkB,CAClB,UAAW,CACX,iBAEJ,CAEA,0BACE,qBAAuB,CACvB,UACF,CAGA,yBACE,qBAAyB,CACzB,UACF,CAEA,2BACE,qBAAyB,CACzB,UACF,CAEA,2BACE,qBAAyB,CACzB,UACF,CAEA,0BACE,qBAAyB,CACzB,UACF,CAxCA,wBACI,eAAgB,CAIhB,UAAkB,CAClB,qBAEJ,CAEA,cACE,wBAAyB,CACzB,kBAAmB,CACnB,kBACF,CAdA,mBACI,UAAW,CACX,iBAAkB,CAClB,cAAe,CACf,WAAY,CACZ,eAAgB,CAChB,4BACJ,CAEA,oBACI,sBACJ,CAEA,kBACI,qBACJ,CAEA,yBACI,qBAAuB,CACvB,UACJ,CAEA,yBACI,qBAAuB,CACvB,UACJ,CAEA,+BACI,qBAAuB,CACvB,UACJ,CAEA,yBACI,qBAAyB,CACzB,UACJ,CAEA,0BACI,qBAAyB,CACzB,UACJ,CAEA,wBACI,qBAAyB,CACzB,UACJ,CAEA,0BACI,qBAAyB,CACzB,UACJ,CAlDA,aACI,eAAgB,CAIhB,UAAkB,CAClB,qBAEJ,CAEA,eACI,oBAAqB,CACrB,eAAiB,CACjB,UAAY,CACZ,WAAY,CACZ,YACJ,CAEA,uBACI,aAAc,CACd,iBACJ,CAEA,wBACI,gBAAiB,CACjB,aACJ,CAEA,wBACI,gBAAiB,CACjB,aACJ,CAEA,+BACI,UACJ,CAEA,gCACI,UACJ","file":"main.800ad38d.chunk.css","sourcesContent":["body {\n margin: auto;\n width: 900px;\n /* font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\n 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',\n sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale; */\n /*Free Sprinkles SVG provided by SVGeez.com - CC 4.0 License - © 2019 Megan Young */\n background-color: #000000;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 304 304' width='304' height='304'%3E%3Cpath fill='%235c5c5c' fill-opacity='0.4' d='M44.1 224a5 5 0 1 1 0 2H0v-2h44.1zm160 48a5 5 0 1 1 0 2H82v-2h122.1zm57.8-46a5 5 0 1 1 0-2H304v2h-42.1zm0 16a5 5 0 1 1 0-2H304v2h-42.1zm6.2-114a5 5 0 1 1 0 2h-86.2a5 5 0 1 1 0-2h86.2zm-256-48a5 5 0 1 1 0 2H0v-2h12.1zm185.8 34a5 5 0 1 1 0-2h86.2a5 5 0 1 1 0 2h-86.2zM258 12.1a5 5 0 1 1-2 0V0h2v12.1zm-64 208a5 5 0 1 1-2 0v-54.2a5 5 0 1 1 2 0v54.2zm48-198.2V80h62v2h-64V21.9a5 5 0 1 1 2 0zm16 16V64h46v2h-48V37.9a5 5 0 1 1 2 0zm-128 96V208h16v12.1a5 5 0 1 1-2 0V210h-16v-76.1a5 5 0 1 1 2 0zm-5.9-21.9a5 5 0 1 1 0 2H114v48H85.9a5 5 0 1 1 0-2H112v-48h12.1zm-6.2 130a5 5 0 1 1 0-2H176v-74.1a5 5 0 1 1 2 0V242h-60.1zm-16-64a5 5 0 1 1 0-2H114v48h10.1a5 5 0 1 1 0 2H112v-48h-10.1zM66 284.1a5 5 0 1 1-2 0V274H50v30h-2v-32h18v12.1zM236.1 176a5 5 0 1 1 0 2H226v94h48v32h-2v-30h-48v-98h12.1zm25.8-30a5 5 0 1 1 0-2H274v44.1a5 5 0 1 1-2 0V146h-10.1zm-64 96a5 5 0 1 1 0-2H208v-80h16v-14h-42.1a5 5 0 1 1 0-2H226v18h-16v80h-12.1zm86.2-210a5 5 0 1 1 0 2H272V0h2v32h10.1zM98 101.9V146H53.9a5 5 0 1 1 0-2H96v-42.1a5 5 0 1 1 2 0zM53.9 34a5 5 0 1 1 0-2H80V0h2v34H53.9zm60.1 3.9V66H82v64H69.9a5 5 0 1 1 0-2H80V64h32V37.9a5 5 0 1 1 2 0zM101.9 82a5 5 0 1 1 0-2H128V37.9a5 5 0 1 1 2 0V82h-28.1zm16-64a5 5 0 1 1 0-2H146v44.1a5 5 0 1 1-2 0V18h-26.1zm102.2 270a5 5 0 1 1 0 2H98v14h-2v-16h124.1zM242 149.9V160h16v34h-16v62h48v48h-2v-46h-48v-66h16v-30h-16v-12.1a5 5 0 1 1 2 0zM53.9 18a5 5 0 1 1 0-2H64V2H48V0h18v18H53.9zm112 32a5 5 0 1 1 0-2H192V0h50v2h-48v48h-28.1zm-48-48a5 5 0 0 1-9.8-2h2.07a3 3 0 1 0 5.66 0H178v34h-18V21.9a5 5 0 1 1 2 0V32h14V2h-58.1zm0 96a5 5 0 1 1 0-2H137l32-32h39V21.9a5 5 0 1 1 2 0V66h-40.17l-32 32H117.9zm28.1 90.1a5 5 0 1 1-2 0v-76.51L175.59 80H224V21.9a5 5 0 1 1 2 0V82h-49.59L146 112.41v75.69zm16 32a5 5 0 1 1-2 0v-99.51L184.59 96H300.1a5 5 0 0 1 3.9-3.9v2.07a3 3 0 0 0 0 5.66v2.07a5 5 0 0 1-3.9-3.9H185.41L162 121.41v98.69zm-144-64a5 5 0 1 1-2 0v-3.51l48-48V48h32V0h2v50H66v55.41l-48 48v2.69zM50 53.9v43.51l-48 48V208h26.1a5 5 0 1 1 0 2H0v-65.41l48-48V53.9a5 5 0 1 1 2 0zm-16 16V89.41l-34 34v-2.82l32-32V69.9a5 5 0 1 1 2 0zM12.1 32a5 5 0 1 1 0 2H9.41L0 43.41V40.6L8.59 32h3.51zm265.8 18a5 5 0 1 1 0-2h18.69l7.41-7.41v2.82L297.41 50H277.9zm-16 160a5 5 0 1 1 0-2H288v-71.41l16-16v2.82l-14 14V210h-28.1zm-208 32a5 5 0 1 1 0-2H64v-22.59L40.59 194H21.9a5 5 0 1 1 0-2H41.41L66 216.59V242H53.9zm150.2 14a5 5 0 1 1 0 2H96v-56.6L56.6 162H37.9a5 5 0 1 1 0-2h19.5L98 200.6V256h106.1zm-150.2 2a5 5 0 1 1 0-2H80v-46.59L48.59 178H21.9a5 5 0 1 1 0-2H49.41L82 208.59V258H53.9zM34 39.8v1.61L9.41 66H0v-2h8.59L32 40.59V0h2v39.8zM2 300.1a5 5 0 0 1 3.9 3.9H3.83A3 3 0 0 0 0 302.17V256h18v48h-2v-46H2v42.1zM34 241v63h-2v-62H0v-2h34v1zM17 18H0v-2h16V0h2v18h-1zm273-2h14v2h-16V0h2v16zm-32 273v15h-2v-14h-14v14h-2v-16h18v1zM0 92.1A5.02 5.02 0 0 1 6 97a5 5 0 0 1-6 4.9v-2.07a3 3 0 1 0 0-5.66V92.1zM80 272h2v32h-2v-32zm37.9 32h-2.07a3 3 0 0 0-5.66 0h-2.07a5 5 0 0 1 9.8 0zM5.9 0A5.02 5.02 0 0 1 0 5.9V3.83A3 3 0 0 0 3.83 0H5.9zm294.2 0h2.07A3 3 0 0 0 304 3.83V5.9a5 5 0 0 1-3.9-5.9zm3.9 300.1v2.07a3 3 0 0 0-1.83 1.83h-2.07a5 5 0 0 1 3.9-3.9zM97 100a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-48 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 96a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-144a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-96 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm96 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-32 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM49 36a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-32 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM33 68a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 240a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm80-176a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm112 176a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM17 180a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM17 84a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6z'%3E%3C/path%3E%3C/svg%3E\");\n}\n\n\n#app-content{\n margin-top: 30px;\n padding-bottom: 30px;\n margin-bottom: 60px;\n padding-top: 15px;\n padding-left: 2%;\n padding-right: 2%;\n background-color: black;\n}\n\n\n\ncode {\n font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',\n monospace;\n}\n\n\n@font-face {\n font-family: 'Zilla Slab';\n src: local('Zilla Slab'), url(./fonts/Zilla_Slab/ZillaSlab-Regular.ttf) format('tff');\n}\n\n/* @font-face {\n font-family: 'IBM Plex Sans';\n src: local('IBM Plex Sans'), url(./fonts/IBM_Plex_Sans/IBMPlexSans-Regular.ttf) format('tff');\n}\n\n\n@font-face {\n font-family: 'IBM Plex Serif';\n src: local('IBM Plex Serif'), url(./fonts/IBM_Plex_Serif/IBMPlexSerif-Light.ttf) format('tff');\n} */\n\n\n",".diagnostics{\n margin-top: 60px;\n padding-left: 5%;\n padding-right: 5%;\n padding-top: 5%;\n padding-bottom: 5%;\n background-color: white;\n /* min-height: 400px; */\n}\n\n.power-channel {\n display: inline-block;\n background: black;\n color: white;\n padding: 5px;\n margin: 0 5px;\n}\n\n.power-channel .status {\n margin: 0 auto;\n text-align: center;\n}\n\n.power-channel .voltage {\n text-align: right;\n color: rgb(150, 150, 250);\n}\n\n.power-channel .current {\n text-align: right;\n color: rgb(120, 255, 100);\n}\n\n.power-channel .status-on-true {\n color: white;\n}\n\n.power-channel .status-on-false {\n color: gray;\n}"]} \ No newline at end of file diff --git a/codeart_backend/public/static/js/2.f6b7336f.chunk.js b/codeart_backend/public/static/js/2.f6b7336f.chunk.js new file mode 100644 index 0000000..d7e303a --- /dev/null +++ b/codeart_backend/public/static/js/2.f6b7336f.chunk.js @@ -0,0 +1,3 @@ +/*! For license information please see 2.f6b7336f.chunk.js.LICENSE.txt */ +(this.webpackJsonpraspi_frontend=this.webpackJsonpraspi_frontend||[]).push([[2],[function(e,t,n){"use strict";e.exports=n(46)},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";function r(e,t){for(var n=0;n=31||"undefined"!==typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)},t.storage=function(){try{return localStorage}catch(e){}}(),t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],e.exports=n(91)(t),e.exports.formatters.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}}}).call(this,n(27))},function(e,t,n){"use strict";(function(e){var r=t;function o(e,t,n){for(var r=Object.keys(t),o=0;o0)},r.Buffer=function(){try{var e=r.inquire("buffer").Buffer;return e.prototype.utf8Write?e:null}catch(t){return null}}(),r._Buffer_from=null,r._Buffer_allocUnsafe=null,r.newBuffer=function(e){return"number"===typeof e?r.Buffer?r._Buffer_allocUnsafe(e):new r.Array(e):r.Buffer?r._Buffer_from(e):"undefined"===typeof Uint8Array?e:new Uint8Array(e)},r.Array="undefined"!==typeof Uint8Array?Uint8Array:Array,r.Long=r.global.dcodeIO&&r.global.dcodeIO.Long||r.global.Long||r.inquire("long"),r.key2Re=/^true|false|0|1$/,r.key32Re=/^-?(?:0|[1-9][0-9]*)$/,r.key64Re=/^(?:[\\x00-\\xff]{8}|-?(?:0|[1-9][0-9]*))$/,r.longToHash=function(e){return e?r.LongBits.from(e).toHash():r.LongBits.zeroHash},r.longFromHash=function(e,t){var n=r.LongBits.fromHash(e);return r.Long?r.Long.fromBits(n.lo,n.hi,t):n.toNumber(Boolean(t))},r.merge=o,r.lcFirst=function(e){return e.charAt(0).toLowerCase()+e.substring(1)},r.newError=i,r.ProtocolError=i("ProtocolError"),r.oneOfGetter=function(e){for(var t={},n=0;n-1;--n)if(1===t[e[n]]&&void 0!==this[e[n]]&&null!==this[e[n]])return e[n]}},r.oneOfSetter=function(e){return function(t){for(var n=0;n1?{type:d[o],data:e.substring(1)}:{type:d[o]}:h}o=new Uint8Array(e)[0];var i=a(e,1);return m&&"blob"===n&&(i=new m([i])),{type:d[o],data:i}},t.decodeBase64Packet=function(e,t){var n=d[e.charAt(0)];if(!r)return{type:n,data:{base64:!0,data:e.substr(1)}};var o=r.decode(e.substr(1));return"blob"===t&&m&&(o=new m([o])),{type:n,data:o}},t.encodePayload=function(e,n,r){"function"===typeof n&&(r=n,n=null);var o=i(e);if(n&&o)return m&&!f?t.encodePayloadAsBlob(e,r):t.encodePayloadAsArrayBuffer(e,r);if(!e.length)return r("0:");y(e,(function(e,r){t.encodePacket(e,!!o&&n,!1,(function(e){r(null,function(e){return e.length+":"+e}(e))}))}),(function(e,t){return r(t.join(""))}))},t.decodePayload=function(e,n,r){if("string"!==typeof e)return t.decodePayloadAsBinary(e,n,r);var o;if("function"===typeof n&&(r=n,n=null),""===e)return r(h,0,1);for(var i,a,s="",u=0,l=e.length;u0;){for(var s=new Uint8Array(o),u=0===s[0],l="",c=1;255!==s[c];c++){if(l.length>310)return r(h,0,1);l+=s[c]}o=a(o,2+l.length),l=parseInt(l);var f=a(o,0,l);if(u)try{f=String.fromCharCode.apply(null,new Uint8Array(f))}catch(m){var p=new Uint8Array(f);f="";for(c=0;c=a())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a().toString(16)+" bytes");return 0|e}function h(e,t){if(u.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 U(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 U(e).length;t=(""+t).toLowerCase(),r=!0}}function m(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 P(this,t,n);case"utf8":case"utf-8":return T(this,t,n);case"ascii":return O(this,t,n);case"latin1":case"binary":return _(this,t,n);case"base64":return S(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return A(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function y(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function g(e,t,n,r,o){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=o?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(o)return-1;n=e.length-1}else if(n<0){if(!o)return-1;n=0}if("string"===typeof t&&(t=u.from(t,r)),u.isBuffer(t))return 0===t.length?-1:v(e,t,n,r,o);if("number"===typeof t)return t&=255,u.TYPED_ARRAY_SUPPORT&&"function"===typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):v(e,[t],n,r,o);throw new TypeError("val must be string, number or Buffer")}function v(e,t,n,r,o){var i,a=1,s=e.length,u=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,u/=2,n/=2}function l(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(o){var c=-1;for(i=n;is&&(n=s-u),i=n;i>=0;i--){for(var f=!0,p=0;po&&(r=o):r=o;var i=t.length;if(i%2!==0)throw new TypeError("Invalid hex string");r>i/2&&(r=i/2);for(var a=0;a>8,o=n%256,i.push(o),i.push(r);return i}(t,e.length-n),e,n,r)}function S(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=[],o=t;o239?4:l>223?3:l>191?2:1;if(o+f<=n)switch(f){case 1:l<128&&(c=l);break;case 2:128===(192&(i=e[o+1]))&&(u=(31&l)<<6|63&i)>127&&(c=u);break;case 3:i=e[o+1],a=e[o+2],128===(192&i)&&128===(192&a)&&(u=(15&l)<<12|(63&i)<<6|63&a)>2047&&(u<55296||u>57343)&&(c=u);break;case 4:i=e[o+1],a=e[o+2],s=e[o+3],128===(192&i)&&128===(192&a)&&128===(192&s)&&(u=(15&l)<<18|(63&i)<<12|(63&a)<<6|63&s)>65535&&u<1114112&&(c=u)}null===c?(c=65533,f=1):c>65535&&(c-=65536,r.push(c>>>10&1023|55296),c=56320|1023&c),r.push(c),o+=f}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+=" ... ")),""},u.prototype.compare=function(e,t,n,r,o){if(!u.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===o&&(o=this.length),t<0||n>e.length||r<0||o>this.length)throw new RangeError("out of range index");if(r>=o&&t>=n)return 0;if(r>=o)return-1;if(t>=n)return 1;if(this===e)return 0;for(var i=(o>>>=0)-(r>>>=0),a=(n>>>=0)-(t>>>=0),s=Math.min(i,a),l=this.slice(r,o),c=e.slice(t,n),f=0;fo)&&(n=o),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var i=!1;;)switch(r){case"hex":return b(this,e,t,n);case"utf8":case"utf-8":return w(this,e,t,n);case"ascii":return x(this,e,t,n);case"latin1":case"binary":return k(this,e,t,n);case"base64":return C(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return E(this,e,t,n);default:if(i)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),i=!0}},u.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function O(e,t,n){var r="";n=Math.min(e.length,n);for(var o=t;or)&&(n=r);for(var o="",i=t;in)throw new RangeError("Trying to access beyond buffer length")}function M(e,t,n,r,o,i){if(!u.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>o||te.length)throw new RangeError("Index out of range")}function N(e,t,n,r){t<0&&(t=65535+t+1);for(var o=0,i=Math.min(e.length-n,2);o>>8*(r?o:1-o)}function F(e,t,n,r){t<0&&(t=4294967295+t+1);for(var o=0,i=Math.min(e.length-n,4);o>>8*(r?o:3-o)&255}function I(e,t,n,r,o,i){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function L(e,t,n,r,i){return i||I(e,0,n,4),o.write(e,t,n,r,23,4),n+4}function D(e,t,n,r,i){return i||I(e,0,n,8),o.write(e,t,n,r,52,8),n+8}u.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&&(o*=256);)r+=this[e+--t]*o;return r},u.prototype.readUInt8=function(e,t){return t||R(e,1,this.length),this[e]},u.prototype.readUInt16LE=function(e,t){return t||R(e,2,this.length),this[e]|this[e+1]<<8},u.prototype.readUInt16BE=function(e,t){return t||R(e,2,this.length),this[e]<<8|this[e+1]},u.prototype.readUInt32LE=function(e,t){return t||R(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},u.prototype.readUInt32BE=function(e,t){return t||R(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},u.prototype.readIntLE=function(e,t,n){e|=0,t|=0,n||R(e,t,this.length);for(var r=this[e],o=1,i=0;++i=(o*=128)&&(r-=Math.pow(2,8*t)),r},u.prototype.readIntBE=function(e,t,n){e|=0,t|=0,n||R(e,t,this.length);for(var r=t,o=1,i=this[e+--r];r>0&&(o*=256);)i+=this[e+--r]*o;return i>=(o*=128)&&(i-=Math.pow(2,8*t)),i},u.prototype.readInt8=function(e,t){return t||R(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},u.prototype.readInt16LE=function(e,t){t||R(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},u.prototype.readInt16BE=function(e,t){t||R(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},u.prototype.readInt32LE=function(e,t){return t||R(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},u.prototype.readInt32BE=function(e,t){return t||R(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},u.prototype.readFloatLE=function(e,t){return t||R(e,4,this.length),o.read(this,e,!0,23,4)},u.prototype.readFloatBE=function(e,t){return t||R(e,4,this.length),o.read(this,e,!1,23,4)},u.prototype.readDoubleLE=function(e,t){return t||R(e,8,this.length),o.read(this,e,!0,52,8)},u.prototype.readDoubleBE=function(e,t){return t||R(e,8,this.length),o.read(this,e,!1,52,8)},u.prototype.writeUIntLE=function(e,t,n,r){(e=+e,t|=0,n|=0,r)||M(this,e,t,n,Math.pow(2,8*n)-1,0);var o=1,i=0;for(this[t]=255&e;++i=0&&(i*=256);)this[t+o]=e/i&255;return t+n},u.prototype.writeUInt8=function(e,t,n){return e=+e,t|=0,n||M(this,e,t,1,255,0),u.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},u.prototype.writeUInt16LE=function(e,t,n){return e=+e,t|=0,n||M(this,e,t,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):N(this,e,t,!0),t+2},u.prototype.writeUInt16BE=function(e,t,n){return e=+e,t|=0,n||M(this,e,t,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):N(this,e,t,!1),t+2},u.prototype.writeUInt32LE=function(e,t,n){return e=+e,t|=0,n||M(this,e,t,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):F(this,e,t,!0),t+4},u.prototype.writeUInt32BE=function(e,t,n){return e=+e,t|=0,n||M(this,e,t,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):F(this,e,t,!1),t+4},u.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t|=0,!r){var o=Math.pow(2,8*n-1);M(this,e,t,n,o-1,-o)}var i=0,a=1,s=0;for(this[t]=255&e;++i>0)-s&255;return t+n},u.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t|=0,!r){var o=Math.pow(2,8*n-1);M(this,e,t,n,o-1,-o)}var i=n-1,a=1,s=0;for(this[t+i]=255&e;--i>=0&&(a*=256);)e<0&&0===s&&0!==this[t+i+1]&&(s=1),this[t+i]=(e/a>>0)-s&255;return t+n},u.prototype.writeInt8=function(e,t,n){return e=+e,t|=0,n||M(this,e,t,1,127,-128),u.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},u.prototype.writeInt16LE=function(e,t,n){return e=+e,t|=0,n||M(this,e,t,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):N(this,e,t,!0),t+2},u.prototype.writeInt16BE=function(e,t,n){return e=+e,t|=0,n||M(this,e,t,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):N(this,e,t,!1),t+2},u.prototype.writeInt32LE=function(e,t,n){return e=+e,t|=0,n||M(this,e,t,4,2147483647,-2147483648),u.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):F(this,e,t,!0),t+4},u.prototype.writeInt32BE=function(e,t,n){return e=+e,t|=0,n||M(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),u.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):F(this,e,t,!1),t+4},u.prototype.writeFloatLE=function(e,t,n){return L(this,e,t,!0,n)},u.prototype.writeFloatBE=function(e,t,n){return L(this,e,t,!1,n)},u.prototype.writeDoubleLE=function(e,t,n){return D(this,e,t,!0,n)},u.prototype.writeDoubleBE=function(e,t,n){return D(this,e,t,!1,n)},u.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;--o)e[o+t]=this[o+n];else if(i<1e3||!u.TYPED_ARRAY_SUPPORT)for(o=0;o>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"===typeof e)for(i=t;i55295&&n<57344){if(!o){if(n>56319){(t-=3)>-1&&i.push(239,191,189);continue}if(a+1===r){(t-=3)>-1&&i.push(239,191,189);continue}o=n;continue}if(n<56320){(t-=3)>-1&&i.push(239,191,189),o=n;continue}n=65536+(o-55296<<10|n-56320)}else o&&(t-=3)>-1&&i.push(239,191,189);if(o=null,n<128){if((t-=1)<0)break;i.push(n)}else if(n<2048){if((t-=2)<0)break;i.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;i.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;i.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return i}function z(e){return r.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(B,"")).length<2)return"";for(;e.length%4!==0;)e+="=";return e}(e))}function V(e,t,n,r){for(var o=0;o=t.length||o>=e.length);++o)t[o+n]=e[o];return o}}).call(this,n(14))},function(e,t,n){var r=n(108);e.exports=function(e){var t=e.xdomain,n=e.xscheme,o=e.enablesXDR;try{if("undefined"!==typeof XMLHttpRequest&&(!t||r))return new XMLHttpRequest}catch(i){}try{if("undefined"!==typeof XDomainRequest&&!n&&o)return new XDomainRequest}catch(i){}if(!t)try{return new(self[["Active"].concat("Object").join("X")])("Microsoft.XMLHTTP")}catch(i){}}},function(e,t,n){var r=n(9),o=n(19);function i(e){this.path=e.path,this.hostname=e.hostname,this.port=e.port,this.secure=e.secure,this.query=e.query,this.timestampParam=e.timestampParam,this.timestampRequests=e.timestampRequests,this.readyState="",this.agent=e.agent||!1,this.socket=e.socket,this.enablesXDR=e.enablesXDR,this.withCredentials=e.withCredentials,this.pfx=e.pfx,this.key=e.key,this.passphrase=e.passphrase,this.cert=e.cert,this.ca=e.ca,this.ciphers=e.ciphers,this.rejectUnauthorized=e.rejectUnauthorized,this.forceNode=e.forceNode,this.isReactNative=e.isReactNative,this.extraHeaders=e.extraHeaders,this.localAddress=e.localAddress}e.exports=i,o(i.prototype),i.prototype.onError=function(e,t){var n=new Error(e);return n.type="TransportError",n.description=t,this.emit("error",n),this},i.prototype.open=function(){return"closed"!==this.readyState&&""!==this.readyState||(this.readyState="opening",this.doOpen()),this},i.prototype.close=function(){return"opening"!==this.readyState&&"open"!==this.readyState||(this.doClose(),this.onClose()),this},i.prototype.send=function(e){if("open"!==this.readyState)throw new Error("Transport not open");this.write(e)},i.prototype.onOpen=function(){this.readyState="open",this.writable=!0,this.emit("open")},i.prototype.onData=function(e){var t=r.decodePacket(e,this.socket.binaryType);this.onPacket(t)},i.prototype.onPacket=function(e){this.emit("packet",e)},i.prototype.onClose=function(){this.readyState="closed",this.emit("close")}},function(e,t,n){function r(e){if(e)return function(e){for(var t in r.prototype)e[t]=r.prototype[t];return e}(e)}e.exports=r,r.prototype.on=r.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks["$"+e]=this._callbacks["$"+e]||[]).push(t),this},r.prototype.once=function(e,t){function n(){this.off(e,n),t.apply(this,arguments)}return n.fn=t,this.on(e,n),this},r.prototype.off=r.prototype.removeListener=r.prototype.removeAllListeners=r.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var n,r=this._callbacks["$"+e];if(!r)return this;if(1==arguments.length)return delete this._callbacks["$"+e],this;for(var o=0;oe.length)&&(t=e.length);for(var n=0,r=new Array(t);n>>7|e.hi<<25)>>>0,e.hi>>>=7;for(;e.lo>127;)t[n++]=127&e.lo|128,e.lo=e.lo>>>7;t[n++]=e.lo}function y(e,t,n){t[n]=255&e,t[n+1]=e>>>8&255,t[n+2]=e>>>16&255,t[n+3]=e>>>24}f.create=p(),f.alloc=function(e){return new o.Array(e)},o.Array!==Array&&(f.alloc=o.pool(f.alloc,o.Array.prototype.subarray)),f.prototype._push=function(e,t,n){return this.tail=this.tail.next=new u(e,t,n),this.len+=t,this},h.prototype=Object.create(u.prototype),h.prototype.fn=function(e,t,n){for(;e>127;)t[n++]=127&e|128,e>>>=7;t[n]=e},f.prototype.uint32=function(e){return this.len+=(this.tail=this.tail.next=new h((e>>>=0)<128?1:e<16384?2:e<2097152?3:e<268435456?4:5,e)).len,this},f.prototype.int32=function(e){return e<0?this._push(m,10,i.fromNumber(e)):this.uint32(e)},f.prototype.sint32=function(e){return this.uint32((e<<1^e>>31)>>>0)},f.prototype.uint64=function(e){var t=i.from(e);return this._push(m,t.length(),t)},f.prototype.int64=f.prototype.uint64,f.prototype.sint64=function(e){var t=i.from(e).zzEncode();return this._push(m,t.length(),t)},f.prototype.bool=function(e){return this._push(d,1,e?1:0)},f.prototype.fixed32=function(e){return this._push(y,4,e>>>0)},f.prototype.sfixed32=f.prototype.fixed32,f.prototype.fixed64=function(e){var t=i.from(e);return this._push(y,4,t.lo)._push(y,4,t.hi)},f.prototype.sfixed64=f.prototype.fixed64,f.prototype.float=function(e){return this._push(o.float.writeFloatLE,4,e)},f.prototype.double=function(e){return this._push(o.float.writeDoubleLE,8,e)};var g=o.Array.prototype.set?function(e,t,n){t.set(e,n)}:function(e,t,n){for(var r=0;r>>0;if(!t)return this._push(d,1,0);if(o.isString(e)){var n=f.alloc(t=a.length(e));a.decode(e,n,0),e=n}return this.uint32(t)._push(g,t,e)},f.prototype.string=function(e){var t=s.length(e);return t?this.uint32(t)._push(s.write,t,e):this._push(d,1,0)},f.prototype.fork=function(){return this.states=new c(this),this.head=this.tail=new u(l,0,0),this.len=0,this},f.prototype.reset=function(){return this.states?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new u(l,0,0),this.len=0),this},f.prototype.ldelim=function(){var e=this.head,t=this.tail,n=this.len;return this.reset().uint32(n),n&&(this.tail.next=e.next,this.tail=t,this.len+=n),this},f.prototype.finish=function(){for(var e=this.head.next,t=this.constructor.alloc(this.len),n=0;e;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t},f._configure=function(e){r=e,f.create=p(),r._configure()}},function(e,t,n){"use strict";e.exports=u;var r,o=n(8),i=o.LongBits,a=o.utf8;function s(e,t){return RangeError("index out of range: "+e.pos+" + "+(t||1)+" > "+e.len)}function u(e){this.buf=e,this.pos=0,this.len=e.length}var l="undefined"!==typeof Uint8Array?function(e){if(e instanceof Uint8Array||Array.isArray(e))return new u(e);throw Error("illegal buffer")}:function(e){if(Array.isArray(e))return new u(e);throw Error("illegal buffer")},c=function(){return o.Buffer?function(e){return(u.create=function(e){return o.Buffer.isBuffer(e)?new r(e):l(e)})(e)}:l};function f(){var e=new i(0,0),t=0;if(!(this.len-this.pos>4)){for(;t<3;++t){if(this.pos>=this.len)throw s(this);if(e.lo=(e.lo|(127&this.buf[this.pos])<<7*t)>>>0,this.buf[this.pos++]<128)return e}return e.lo=(e.lo|(127&this.buf[this.pos++])<<7*t)>>>0,e}for(;t<4;++t)if(e.lo=(e.lo|(127&this.buf[this.pos])<<7*t)>>>0,this.buf[this.pos++]<128)return e;if(e.lo=(e.lo|(127&this.buf[this.pos])<<28)>>>0,e.hi=(e.hi|(127&this.buf[this.pos])>>4)>>>0,this.buf[this.pos++]<128)return e;if(t=0,this.len-this.pos>4){for(;t<5;++t)if(e.hi=(e.hi|(127&this.buf[this.pos])<<7*t+3)>>>0,this.buf[this.pos++]<128)return e}else for(;t<5;++t){if(this.pos>=this.len)throw s(this);if(e.hi=(e.hi|(127&this.buf[this.pos])<<7*t+3)>>>0,this.buf[this.pos++]<128)return e}throw Error("invalid varint encoding")}function p(e,t){return(e[t-4]|e[t-3]<<8|e[t-2]<<16|e[t-1]<<24)>>>0}function d(){if(this.pos+8>this.len)throw s(this,8);return new i(p(this.buf,this.pos+=4),p(this.buf,this.pos+=4))}u.create=c(),u.prototype._slice=o.Array.prototype.subarray||o.Array.prototype.slice,u.prototype.uint32=function(){var e=4294967295;return function(){if(e=(127&this.buf[this.pos])>>>0,this.buf[this.pos++]<128)return e;if(e=(e|(127&this.buf[this.pos])<<7)>>>0,this.buf[this.pos++]<128)return e;if(e=(e|(127&this.buf[this.pos])<<14)>>>0,this.buf[this.pos++]<128)return e;if(e=(e|(127&this.buf[this.pos])<<21)>>>0,this.buf[this.pos++]<128)return e;if(e=(e|(15&this.buf[this.pos])<<28)>>>0,this.buf[this.pos++]<128)return e;if((this.pos+=5)>this.len)throw this.pos=this.len,s(this,10);return e}}(),u.prototype.int32=function(){return 0|this.uint32()},u.prototype.sint32=function(){var e=this.uint32();return e>>>1^-(1&e)|0},u.prototype.bool=function(){return 0!==this.uint32()},u.prototype.fixed32=function(){if(this.pos+4>this.len)throw s(this,4);return p(this.buf,this.pos+=4)},u.prototype.sfixed32=function(){if(this.pos+4>this.len)throw s(this,4);return 0|p(this.buf,this.pos+=4)},u.prototype.float=function(){if(this.pos+4>this.len)throw s(this,4);var e=o.float.readFloatLE(this.buf,this.pos);return this.pos+=4,e},u.prototype.double=function(){if(this.pos+8>this.len)throw s(this,4);var e=o.float.readDoubleLE(this.buf,this.pos);return this.pos+=8,e},u.prototype.bytes=function(){var e=this.uint32(),t=this.pos,n=this.pos+e;if(n>this.len)throw s(this,e);return this.pos+=e,Array.isArray(this.buf)?this.buf.slice(t,n):t===n?new this.buf.constructor(0):this._slice.call(this.buf,t,n)},u.prototype.string=function(){var e=this.bytes();return a.read(e,0,e.length)},u.prototype.skip=function(e){if("number"===typeof e){if(this.pos+e>this.len)throw s(this,e);this.pos+=e}else do{if(this.pos>=this.len)throw s(this)}while(128&this.buf[this.pos++]);return this},u.prototype.skipType=function(e){switch(e){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;4!==(e=7&this.uint32());)this.skipType(e);break;case 5:this.skip(4);break;default:throw Error("invalid wire type "+e+" at offset "+this.pos)}return this},u._configure=function(e){r=e,u.create=c(),r._configure();var t=o.Long?"toLong":"toNumber";o.merge(u.prototype,{int64:function(){return f.call(this)[t](!1)},uint64:function(){return f.call(this)[t](!0)},sint64:function(){return f.call(this).zzDecode()[t](!1)},fixed64:function(){return d.call(this)[t](!0)},sfixed64:function(){return d.call(this)[t](!1)}})}},function(e,t){var n=/^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,r=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];e.exports=function(e){var t=e,o=e.indexOf("["),i=e.indexOf("]");-1!=o&&-1!=i&&(e=e.substring(0,o)+e.substring(o,i).replace(/:/g,";")+e.substring(i,e.length));for(var a=n.exec(e||""),s={},u=14;u--;)s[r[u]]=a[u]||"";return-1!=o&&-1!=i&&(s.source=t,s.host=s.host.substring(1,s.host.length-1).replace(/;/g,":"),s.authority=s.authority.replace("[","").replace("]","").replace(/;/g,":"),s.ipv6uri=!0),s}},function(e,t){var n,r,o=e.exports={};function i(){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===i||!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:i}catch(e){n=i}try{r="function"===typeof clearTimeout?clearTimeout:a}catch(e){r=a}}();var u,l=[],c=!1,f=-1;function p(){c&&u&&(c=!1,u.length?l=u.concat(l):f=-1,l.length&&d())}function d(){if(!c){var e=s(p);c=!0;for(var t=l.length;t;){for(u=l,l=[];++f1)for(var n=1;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&!this.encoding){var e=this.packetBuffer.shift();this.packet(e)}},d.prototype.cleanup=function(){l("cleanup");for(var e=this.subs.length,t=0;t=this._reconnectionAttempts)l("reconnect failed"),this.backoff.reset(),this.emitAll("reconnect_failed"),this.reconnecting=!1;else{var t=this.backoff.duration();l("will wait %dms before reconnect attempt",t),this.reconnecting=!0;var n=setTimeout((function(){e.skipReconnect||(l("attempting reconnect"),e.emitAll("reconnect_attempt",e.backoff.attempts),e.emitAll("reconnecting",e.backoff.attempts),e.skipReconnect||e.open((function(t){t?(l("reconnect attempt error"),e.reconnecting=!1,e.reconnect(),e.emitAll("reconnect_error",t.data)):(l("reconnect success"),e.onreconnect())})))}),t);this.subs.push({destroy:function(){clearTimeout(n)}})}},d.prototype.onreconnect=function(){var e=this.backoff.attempts;this.reconnecting=!1,this.backoff.reset(),this.updateSocketIds(),this.emitAll("reconnect",e)}},function(e,t,n){var r=n(17),o=n(109),i=n(117),a=n(118);t.polling=function(e){var t=!1,n=!1,a=!1!==e.jsonp;if("undefined"!==typeof location){var s="https:"===location.protocol,u=location.port;u||(u=s?443:80),t=e.hostname!==location.hostname||u!==e.port,n=e.secure!==s}if(e.xdomain=t,e.xscheme=n,"open"in new r(e)&&!e.forceJSONP)return new o(e);if(!a)throw new Error("JSONP disabled");return new i(e)},t.websocket=a},function(e,t,n){var r=n(18),o=n(12),i=n(9),a=n(13),s=n(35),u=n(7)("engine.io-client:polling");e.exports=c;var l=null!=new(n(17))({xdomain:!1}).responseType;function c(e){var t=e&&e.forceBase64;l&&!t||(this.supportsBinary=!1),r.call(this,e)}a(c,r),c.prototype.name="polling",c.prototype.doOpen=function(){this.poll()},c.prototype.pause=function(e){var t=this;function n(){u("paused"),t.readyState="paused",e()}if(this.readyState="pausing",this.polling||!this.writable){var r=0;this.polling&&(u("we are currently polling - waiting to pause"),r++,this.once("pollComplete",(function(){u("pre-pause polling complete"),--r||n()}))),this.writable||(u("we are currently writing - waiting to pause"),r++,this.once("drain",(function(){u("pre-pause writing complete"),--r||n()})))}else n()},c.prototype.poll=function(){u("polling"),this.polling=!0,this.doPoll(),this.emit("poll")},c.prototype.onData=function(e){var t=this;u("polling got data %s",e);i.decodePayload(e,this.socket.binaryType,(function(e,n,r){if("opening"===t.readyState&&t.onOpen(),"close"===e.type)return t.onClose(),!1;t.onPacket(e)})),"closed"!==this.readyState&&(this.polling=!1,this.emit("pollComplete"),"open"===this.readyState?this.poll():u('ignoring poll - transport state "%s"',this.readyState))},c.prototype.doClose=function(){var e=this;function t(){u("writing close packet"),e.write([{type:"close"}])}"open"===this.readyState?(u("transport open - closing"),t()):(u("transport not open - deferring close"),this.once("open",t))},c.prototype.write=function(e){var t=this;this.writable=!1;var n=function(){t.writable=!0,t.emit("drain")};i.encodePayload(e,this.supportsBinary,(function(e){t.doWrite(e,n)}))},c.prototype.uri=function(){var e=this.query||{},t=this.secure?"https":"http",n="";return!1!==this.timestampRequests&&(e[this.timestampParam]=s()),this.supportsBinary||e.sid||(e.b64=1),e=o.encode(e),this.port&&("https"===t&&443!==Number(this.port)||"http"===t&&80!==Number(this.port))&&(n=":"+this.port),e.length&&(e="?"+e),t+"://"+(-1!==this.hostname.indexOf(":")?"["+this.hostname+"]":this.hostname)+n+this.path+e}},function(e,t,n){(function(t){var r=n(111),o=Object.prototype.toString,i="function"===typeof Blob||"undefined"!==typeof Blob&&"[object BlobConstructor]"===o.call(Blob),a="function"===typeof File||"undefined"!==typeof File&&"[object FileConstructor]"===o.call(File);e.exports=function e(n){if(!n||"object"!==typeof n)return!1;if(r(n)){for(var o=0,s=n.length;o0);return t}function l(){var e=u(+new Date);return e!==r?(a=0,r=e):e+"."+u(a++)}for(;s<64;s++)i[o[s]]=s;l.encode=u,l.decode=function(e){var t=0;for(s=0;s0?g(_,--T):0,E--,10===O&&(E=1,C--),O}function M(){return O=T2||L(O)>3?"":" "}function z(e,t){for(;--t&&M()&&!(O<48||O>102||O>57&&O<65||O>70&&O<97););return I(e,F()+(t<6&&32==N()&&32==M()))}function V(e,t){for(;M()&&e+O!==57&&(e+O!==84||47!==N()););return"/*"+I(t,T-1)+"*"+d(47===e?e:M())}function H(e){for(;!L(N());)M();return I(e,T)}function $(e){return B(function e(t,n,r,o,i,a,s,u,l){var c=0,f=0,p=s,h=0,y=0,g=0,v=1,w=1,k=1,C=0,E="",S=i,T=a,O=o,_=E;for(;w;)switch(g=C,C=M()){case 34:case 39:case 91:case 40:_+=j(C);break;case 9:case 10:case 13:case 32:_+=U(g);break;case 92:_+=z(F()-1,7);continue;case 47:switch(N()){case 42:case 47:x(W(V(M(),F()),n,r),l);break;default:_+="/"}break;case 123*v:u[c++]=b(_)*k;case 125*v:case 59:case 0:switch(C){case 0:case 125:w=0;case 59+f:y>0&&b(_)-p&&x(y>32?Y(_+";",o,r,p-1):Y(m(_," ","")+";",o,r,p-2),l);break;case 59:_+=";";default:if(x(O=q(_,n,r,c,f,i,u,E,S=[],T=[],p),a),123===C)if(0===f)e(_,n,O,O,S,a,p,u,T);else switch(h){case 100:case 109:case 115:e(t,O,O,o&&x(q(t,O,O,0,0,i,u,E,i,S=[],p),T),i,T,p,u,o?S:T);break;default:e(_,O,O,O,[""],T,p,u,T)}}c=f=y=0,v=k=1,E=_="",p=s;break;case 58:p=1+b(_),y=g;default:if(v<1)if(123==C)--v;else if(125==C&&0==v++&&125==R())continue;switch(_+=d(C),C*v){case 38:k=f>0?1:(_+="\f",-1);break;case 44:u[c++]=(b(_)-1)*k,k=1;break;case 64:45===N()&&(_+=j(M())),h=N(),f=b(E=_+=H(F())),C++;break;case 45:45===g&&2==b(_)&&(v=0)}}return a}("",null,null,null,[""],e=D(e),0,[0],e))}function q(e,t,n,r,o,i,a,s,u,l,c){for(var f=o-1,d=0===o?i:[""],y=w(d),g=0,b=0,x=0;g0?d[k]+" "+C:m(C,/&\f/g,d[k])))&&(u[x++]=E);return P(e,t,n,0===o?"rule":s,u,l,c)}function W(e,t,n){return P(e,t,n,c,d(O),v(e,2,-2),0)}function Y(e,t,n,r){return P(e,t,n,f,v(e,0,r),v(e,r+1,-1),r)}function Q(e,t){switch(function(e,t){return(((t<<2^g(e,0))<<2^g(e,1))<<2^g(e,2))<<2^g(e,3)}(e,t)){case 5103:return l+"print-"+e+e;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return l+e+e;case 5349:case 4246:case 4810:case 6968:case 2756:return l+e+u+e+s+e+e;case 6828:case 4268:return l+e+s+e+e;case 6165:return l+e+s+"flex-"+e+e;case 5187:return l+e+m(e,/(\w+).+(:[^]+)/,l+"box-$1$2"+s+"flex-$1$2")+e;case 5443:return l+e+s+"flex-item-"+m(e,/flex-|-self/,"")+e;case 4675:return l+e+s+"flex-line-pack"+m(e,/align-content|flex-|-self/,"")+e;case 5548:return l+e+s+m(e,"shrink","negative")+e;case 5292:return l+e+s+m(e,"basis","preferred-size")+e;case 6060:return l+"box-"+m(e,"-grow","")+l+e+s+m(e,"grow","positive")+e;case 4554:return l+m(e,/([^-])(transform)/g,"$1"+l+"$2")+e;case 6187:return m(m(m(e,/(zoom-|grab)/,l+"$1"),/(image-set)/,l+"$1"),e,"")+e;case 5495:case 3959:return m(e,/(image-set\([^]*)/,l+"$1$`$1");case 4968:return m(m(e,/(.+:)(flex-)?(.*)/,l+"box-pack:$3"+s+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+l+e+e;case 4095:case 3583:case 4068:case 2532:return m(e,/(.+)-inline(.+)/,l+"$1$2")+e;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(b(e)-1-t>6)switch(g(e,t+1)){case 109:if(45!==g(e,t+4))break;case 102:return m(e,/(.+:)(.+)-([^]+)/,"$1"+l+"$2-$3$1"+u+(108==g(e,t+3)?"$3":"$2-$3"))+e;case 115:return~y(e,"stretch")?Q(m(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(115!==g(e,t+1))break;case 6444:switch(g(e,b(e)-3-(~y(e,"!important")&&10))){case 107:return m(e,":",":"+l)+e;case 101:return m(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+l+(45===g(e,14)?"inline-":"")+"box$3$1"+l+"$2$3$1"+s+"$2box$3")+e}break;case 5936:switch(g(e,t+11)){case 114:return l+e+s+m(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return l+e+s+m(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return l+e+s+m(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return l+e+s+e+e}return e}function K(e,t){for(var n="",r=w(e),o=0;o=4;++r,o-=4)t=1540483477*(65535&(t=255&e.charCodeAt(r)|(255&e.charCodeAt(++r))<<8|(255&e.charCodeAt(++r))<<16|(255&e.charCodeAt(++r))<<24))+(59797*(t>>>16)<<16),n=1540483477*(65535&(t^=t>>>24))+(59797*(t>>>16)<<16)^1540483477*(65535&n)+(59797*(n>>>16)<<16);switch(o){case 3:n^=(255&e.charCodeAt(r+2))<<16;case 2:n^=(255&e.charCodeAt(r+1))<<8;case 1:n=1540483477*(65535&(n^=255&e.charCodeAt(r)))+(59797*(n>>>16)<<16)}return(((n=1540483477*(65535&(n^=n>>>13))+(59797*(n>>>16)<<16))^n>>>15)>>>0).toString(36)},ue={animationIterationCount:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},le=/[A-Z]|^ms/g,ce=/_EMO_([^_]+?)_([^]*?)_EMO_/g,fe=function(e){return 45===e.charCodeAt(1)},pe=function(e){return null!=e&&"boolean"!==typeof e},de=J((function(e){return fe(e)?e:e.replace(le,"-$&").toLowerCase()})),he=function(e,t){switch(e){case"animation":case"animationName":if("string"===typeof t)return t.replace(ce,(function(e,t,n){return ye={name:t,styles:n,next:ye},t}))}return 1===ue[e]||fe(e)||"number"!==typeof t||0===t?t:t+"px"};function me(e,t,n){if(null==n)return"";if(void 0!==n.__emotion_styles)return n;switch(typeof n){case"boolean":return"";case"object":if(1===n.anim)return ye={name:n.name,styles:n.styles,next:ye},n.name;if(void 0!==n.styles){var r=n.next;if(void 0!==r)for(;void 0!==r;)ye={name:r.name,styles:r.styles,next:ye},r=r.next;return n.styles+";"}return function(e,t,n){var r="";if(Array.isArray(n))for(var o=0;o=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ne(e){return(Ne="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Fe(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Ie(e,t){for(var n=0;n-1}function et(e){return Ze(e)?window.pageYOffset:e.scrollTop}function tt(e,t){Ze(e)?window.scrollTo(0,t):e.scrollTop=t}function nt(e,t,n,r){return n*((e=e/r-1)*e*e+1)+t}function rt(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:200,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:Qe,o=et(e),i=t-o,a=10,s=0;function u(){var t=nt(s+=a,o,i,n);tt(e,t),s=d)return{placement:"bottom",maxHeight:t};if(C>=d&&!a)return i&&rt(u,E,160),{placement:"bottom",maxHeight:t};if(!a&&C>=r||a&&x>=r)return i&&rt(u,E,160),{placement:"bottom",maxHeight:a?x-v:C-v};if("auto"===o||a){var T=t,O=a?w:k;return O>=r&&(T=Math.min(O-v-s.controlHeight,t)),{placement:"top",maxHeight:T}}if("bottom"===o)return i&&tt(u,E),{placement:"bottom",maxHeight:t};break;case"top":if(w>=d)return{placement:"top",maxHeight:t};if(k>=d&&!a)return i&&rt(u,S,160),{placement:"top",maxHeight:t};if(!a&&k>=r||a&&w>=r){var _=t;return(!a&&k>=r||a&&w>=r)&&(_=a?w-b:k-b),i&&rt(u,S,160),{placement:"top",maxHeight:_}}return{placement:"bottom",maxHeight:t};default:throw new Error('Invalid placement provided "'.concat(o,'".'))}return l}var pt=function(e){return"auto"===e?"bottom":e},dt=Object(o.createContext)({getPortalPlacement:null}),ht=function(e){Be(n,e);var t=We(n);function n(){var e;Fe(this,n);for(var r=arguments.length,o=new Array(r),i=0;ie.length)&&(t=e.length);for(var n=0,r=new Array(t);n1?"s":""," ").concat(o.join(","),", selected.");case"select-option":return"option ".concat(r,i?" is disabled. Select another option.":", selected.");default:return""}},onFocus:function(e){var t=e.context,n=e.focused,r=e.options,o=e.label,i=void 0===o?"":o,a=e.selectValue,s=e.isDisabled,u=e.isSelected,l=function(e,t){return e&&e.length?"".concat(e.indexOf(t)+1," of ").concat(e.length):""};if("value"===t&&a)return"value ".concat(i," focused, ").concat(l(a,n),".");if("menu"===t){var c=s?" disabled":"",f="".concat(u?"selected":"focused").concat(c);return"option ".concat(i," ").concat(f,", ").concat(l(r,n),".")}return""},onFilter:function(e){var t=e.inputValue,n=e.resultsMessage;return"".concat(n).concat(t?" for search term "+t:"",".")}},Gt=function(e){var t=e.ariaSelection,n=e.focusedOption,r=e.focusedValue,a=e.focusableOptions,s=e.isFocused,u=e.selectValue,l=e.selectProps,c=e.id,f=l.ariaLiveMessages,p=l.getOptionLabel,d=l.inputValue,h=l.isMulti,m=l.isOptionDisabled,y=l.isSearchable,g=l.menuIsOpen,v=l.options,b=l.screenReaderStatus,w=l.tabSelectsValue,x=l["aria-label"],k=l["aria-live"],C=Object(o.useMemo)((function(){return He(He({},Xt),f||{})}),[f]),E=Object(o.useMemo)((function(){var e,n="";if(t&&C.onChange){var r=t.option,o=t.options,i=t.removedValue,a=t.removedValues,s=t.value,l=i||r||(e=s,Array.isArray(e)?null:e),c=l?p(l):"",f=o||a||void 0,d=f?f.map(p):[],h=He({isDisabled:l&&m(l,u),label:c,labels:d},t);n=C.onChange(h)}return n}),[t,C,m,u,p]),S=Object(o.useMemo)((function(){var e="",t=n||r,o=!!(n&&u&&u.includes(n));if(t&&C.onFocus){var i={focused:t,label:p(t),isDisabled:m(t,u),isSelected:o,options:v,context:t===n?"menu":"value",selectValue:u};e=C.onFocus(i)}return e}),[n,r,p,m,C,v,u]),T=Object(o.useMemo)((function(){var e="";if(g&&v.length&&C.onFilter){var t=b({count:a.length});e=C.onFilter({inputValue:d,resultsMessage:t})}return e}),[a,d,g,C,v,b]),O=Object(o.useMemo)((function(){var e="";if(C.guidance){var t=r?"value":g?"menu":"input";e=C.guidance({"aria-label":x,context:t,isDisabled:n&&m(n,u),isMulti:h,isSearchable:y,tabSelectsValue:w})}return e}),[x,n,r,h,m,y,g,C,u,w]),_="".concat(S," ").concat(T," ").concat(O),P=Oe(i.a.Fragment,null,Oe("span",{id:"aria-selection"},E),Oe("span",{id:"aria-context"},_)),A="initial-input-focus"===(null===t||void 0===t?void 0:t.action);return Oe(i.a.Fragment,null,Oe(Kt,{id:c},A&&P),Oe(Kt,{"aria-live":k,"aria-atomic":"false","aria-relevant":"additions text"},s&&!A&&P))},Jt=[{base:"A",letters:"A\u24b6\uff21\xc0\xc1\xc2\u1ea6\u1ea4\u1eaa\u1ea8\xc3\u0100\u0102\u1eb0\u1eae\u1eb4\u1eb2\u0226\u01e0\xc4\u01de\u1ea2\xc5\u01fa\u01cd\u0200\u0202\u1ea0\u1eac\u1eb6\u1e00\u0104\u023a\u2c6f"},{base:"AA",letters:"\ua732"},{base:"AE",letters:"\xc6\u01fc\u01e2"},{base:"AO",letters:"\ua734"},{base:"AU",letters:"\ua736"},{base:"AV",letters:"\ua738\ua73a"},{base:"AY",letters:"\ua73c"},{base:"B",letters:"B\u24b7\uff22\u1e02\u1e04\u1e06\u0243\u0182\u0181"},{base:"C",letters:"C\u24b8\uff23\u0106\u0108\u010a\u010c\xc7\u1e08\u0187\u023b\ua73e"},{base:"D",letters:"D\u24b9\uff24\u1e0a\u010e\u1e0c\u1e10\u1e12\u1e0e\u0110\u018b\u018a\u0189\ua779"},{base:"DZ",letters:"\u01f1\u01c4"},{base:"Dz",letters:"\u01f2\u01c5"},{base:"E",letters:"E\u24ba\uff25\xc8\xc9\xca\u1ec0\u1ebe\u1ec4\u1ec2\u1ebc\u0112\u1e14\u1e16\u0114\u0116\xcb\u1eba\u011a\u0204\u0206\u1eb8\u1ec6\u0228\u1e1c\u0118\u1e18\u1e1a\u0190\u018e"},{base:"F",letters:"F\u24bb\uff26\u1e1e\u0191\ua77b"},{base:"G",letters:"G\u24bc\uff27\u01f4\u011c\u1e20\u011e\u0120\u01e6\u0122\u01e4\u0193\ua7a0\ua77d\ua77e"},{base:"H",letters:"H\u24bd\uff28\u0124\u1e22\u1e26\u021e\u1e24\u1e28\u1e2a\u0126\u2c67\u2c75\ua78d"},{base:"I",letters:"I\u24be\uff29\xcc\xcd\xce\u0128\u012a\u012c\u0130\xcf\u1e2e\u1ec8\u01cf\u0208\u020a\u1eca\u012e\u1e2c\u0197"},{base:"J",letters:"J\u24bf\uff2a\u0134\u0248"},{base:"K",letters:"K\u24c0\uff2b\u1e30\u01e8\u1e32\u0136\u1e34\u0198\u2c69\ua740\ua742\ua744\ua7a2"},{base:"L",letters:"L\u24c1\uff2c\u013f\u0139\u013d\u1e36\u1e38\u013b\u1e3c\u1e3a\u0141\u023d\u2c62\u2c60\ua748\ua746\ua780"},{base:"LJ",letters:"\u01c7"},{base:"Lj",letters:"\u01c8"},{base:"M",letters:"M\u24c2\uff2d\u1e3e\u1e40\u1e42\u2c6e\u019c"},{base:"N",letters:"N\u24c3\uff2e\u01f8\u0143\xd1\u1e44\u0147\u1e46\u0145\u1e4a\u1e48\u0220\u019d\ua790\ua7a4"},{base:"NJ",letters:"\u01ca"},{base:"Nj",letters:"\u01cb"},{base:"O",letters:"O\u24c4\uff2f\xd2\xd3\xd4\u1ed2\u1ed0\u1ed6\u1ed4\xd5\u1e4c\u022c\u1e4e\u014c\u1e50\u1e52\u014e\u022e\u0230\xd6\u022a\u1ece\u0150\u01d1\u020c\u020e\u01a0\u1edc\u1eda\u1ee0\u1ede\u1ee2\u1ecc\u1ed8\u01ea\u01ec\xd8\u01fe\u0186\u019f\ua74a\ua74c"},{base:"OI",letters:"\u01a2"},{base:"OO",letters:"\ua74e"},{base:"OU",letters:"\u0222"},{base:"P",letters:"P\u24c5\uff30\u1e54\u1e56\u01a4\u2c63\ua750\ua752\ua754"},{base:"Q",letters:"Q\u24c6\uff31\ua756\ua758\u024a"},{base:"R",letters:"R\u24c7\uff32\u0154\u1e58\u0158\u0210\u0212\u1e5a\u1e5c\u0156\u1e5e\u024c\u2c64\ua75a\ua7a6\ua782"},{base:"S",letters:"S\u24c8\uff33\u1e9e\u015a\u1e64\u015c\u1e60\u0160\u1e66\u1e62\u1e68\u0218\u015e\u2c7e\ua7a8\ua784"},{base:"T",letters:"T\u24c9\uff34\u1e6a\u0164\u1e6c\u021a\u0162\u1e70\u1e6e\u0166\u01ac\u01ae\u023e\ua786"},{base:"TZ",letters:"\ua728"},{base:"U",letters:"U\u24ca\uff35\xd9\xda\xdb\u0168\u1e78\u016a\u1e7a\u016c\xdc\u01db\u01d7\u01d5\u01d9\u1ee6\u016e\u0170\u01d3\u0214\u0216\u01af\u1eea\u1ee8\u1eee\u1eec\u1ef0\u1ee4\u1e72\u0172\u1e76\u1e74\u0244"},{base:"V",letters:"V\u24cb\uff36\u1e7c\u1e7e\u01b2\ua75e\u0245"},{base:"VY",letters:"\ua760"},{base:"W",letters:"W\u24cc\uff37\u1e80\u1e82\u0174\u1e86\u1e84\u1e88\u2c72"},{base:"X",letters:"X\u24cd\uff38\u1e8a\u1e8c"},{base:"Y",letters:"Y\u24ce\uff39\u1ef2\xdd\u0176\u1ef8\u0232\u1e8e\u0178\u1ef6\u1ef4\u01b3\u024e\u1efe"},{base:"Z",letters:"Z\u24cf\uff3a\u0179\u1e90\u017b\u017d\u1e92\u1e94\u01b5\u0224\u2c7f\u2c6b\ua762"},{base:"a",letters:"a\u24d0\uff41\u1e9a\xe0\xe1\xe2\u1ea7\u1ea5\u1eab\u1ea9\xe3\u0101\u0103\u1eb1\u1eaf\u1eb5\u1eb3\u0227\u01e1\xe4\u01df\u1ea3\xe5\u01fb\u01ce\u0201\u0203\u1ea1\u1ead\u1eb7\u1e01\u0105\u2c65\u0250"},{base:"aa",letters:"\ua733"},{base:"ae",letters:"\xe6\u01fd\u01e3"},{base:"ao",letters:"\ua735"},{base:"au",letters:"\ua737"},{base:"av",letters:"\ua739\ua73b"},{base:"ay",letters:"\ua73d"},{base:"b",letters:"b\u24d1\uff42\u1e03\u1e05\u1e07\u0180\u0183\u0253"},{base:"c",letters:"c\u24d2\uff43\u0107\u0109\u010b\u010d\xe7\u1e09\u0188\u023c\ua73f\u2184"},{base:"d",letters:"d\u24d3\uff44\u1e0b\u010f\u1e0d\u1e11\u1e13\u1e0f\u0111\u018c\u0256\u0257\ua77a"},{base:"dz",letters:"\u01f3\u01c6"},{base:"e",letters:"e\u24d4\uff45\xe8\xe9\xea\u1ec1\u1ebf\u1ec5\u1ec3\u1ebd\u0113\u1e15\u1e17\u0115\u0117\xeb\u1ebb\u011b\u0205\u0207\u1eb9\u1ec7\u0229\u1e1d\u0119\u1e19\u1e1b\u0247\u025b\u01dd"},{base:"f",letters:"f\u24d5\uff46\u1e1f\u0192\ua77c"},{base:"g",letters:"g\u24d6\uff47\u01f5\u011d\u1e21\u011f\u0121\u01e7\u0123\u01e5\u0260\ua7a1\u1d79\ua77f"},{base:"h",letters:"h\u24d7\uff48\u0125\u1e23\u1e27\u021f\u1e25\u1e29\u1e2b\u1e96\u0127\u2c68\u2c76\u0265"},{base:"hv",letters:"\u0195"},{base:"i",letters:"i\u24d8\uff49\xec\xed\xee\u0129\u012b\u012d\xef\u1e2f\u1ec9\u01d0\u0209\u020b\u1ecb\u012f\u1e2d\u0268\u0131"},{base:"j",letters:"j\u24d9\uff4a\u0135\u01f0\u0249"},{base:"k",letters:"k\u24da\uff4b\u1e31\u01e9\u1e33\u0137\u1e35\u0199\u2c6a\ua741\ua743\ua745\ua7a3"},{base:"l",letters:"l\u24db\uff4c\u0140\u013a\u013e\u1e37\u1e39\u013c\u1e3d\u1e3b\u017f\u0142\u019a\u026b\u2c61\ua749\ua781\ua747"},{base:"lj",letters:"\u01c9"},{base:"m",letters:"m\u24dc\uff4d\u1e3f\u1e41\u1e43\u0271\u026f"},{base:"n",letters:"n\u24dd\uff4e\u01f9\u0144\xf1\u1e45\u0148\u1e47\u0146\u1e4b\u1e49\u019e\u0272\u0149\ua791\ua7a5"},{base:"nj",letters:"\u01cc"},{base:"o",letters:"o\u24de\uff4f\xf2\xf3\xf4\u1ed3\u1ed1\u1ed7\u1ed5\xf5\u1e4d\u022d\u1e4f\u014d\u1e51\u1e53\u014f\u022f\u0231\xf6\u022b\u1ecf\u0151\u01d2\u020d\u020f\u01a1\u1edd\u1edb\u1ee1\u1edf\u1ee3\u1ecd\u1ed9\u01eb\u01ed\xf8\u01ff\u0254\ua74b\ua74d\u0275"},{base:"oi",letters:"\u01a3"},{base:"ou",letters:"\u0223"},{base:"oo",letters:"\ua74f"},{base:"p",letters:"p\u24df\uff50\u1e55\u1e57\u01a5\u1d7d\ua751\ua753\ua755"},{base:"q",letters:"q\u24e0\uff51\u024b\ua757\ua759"},{base:"r",letters:"r\u24e1\uff52\u0155\u1e59\u0159\u0211\u0213\u1e5b\u1e5d\u0157\u1e5f\u024d\u027d\ua75b\ua7a7\ua783"},{base:"s",letters:"s\u24e2\uff53\xdf\u015b\u1e65\u015d\u1e61\u0161\u1e67\u1e63\u1e69\u0219\u015f\u023f\ua7a9\ua785\u1e9b"},{base:"t",letters:"t\u24e3\uff54\u1e6b\u1e97\u0165\u1e6d\u021b\u0163\u1e71\u1e6f\u0167\u01ad\u0288\u2c66\ua787"},{base:"tz",letters:"\ua729"},{base:"u",letters:"u\u24e4\uff55\xf9\xfa\xfb\u0169\u1e79\u016b\u1e7b\u016d\xfc\u01dc\u01d8\u01d6\u01da\u1ee7\u016f\u0171\u01d4\u0215\u0217\u01b0\u1eeb\u1ee9\u1eef\u1eed\u1ef1\u1ee5\u1e73\u0173\u1e77\u1e75\u0289"},{base:"v",letters:"v\u24e5\uff56\u1e7d\u1e7f\u028b\ua75f\u028c"},{base:"vy",letters:"\ua761"},{base:"w",letters:"w\u24e6\uff57\u1e81\u1e83\u0175\u1e87\u1e85\u1e98\u1e89\u2c73"},{base:"x",letters:"x\u24e7\uff58\u1e8b\u1e8d"},{base:"y",letters:"y\u24e8\uff59\u1ef3\xfd\u0177\u1ef9\u0233\u1e8f\xff\u1ef7\u1e99\u1ef5\u01b4\u024f\u1eff"},{base:"z",letters:"z\u24e9\uff5a\u017a\u1e91\u017c\u017e\u1e93\u1e95\u01b6\u0225\u0240\u2c6c\ua763"}],Zt=new RegExp("["+Jt.map((function(e){return e.letters})).join("")+"]","g"),en={},tn=0;tn0,m=f-p-l,y=!1;m>t&&s.current&&(r&&r(e),s.current=!1),h&&u.current&&(a&&a(e),u.current=!1),h&&t>m?(n&&!s.current&&n(e),d.scrollTop=f,y=!0,s.current=!0):!h&&-t>l&&(i&&!u.current&&i(e),d.scrollTop=0,y=!0,u.current=!0),y&&function(e){e.preventDefault(),e.stopPropagation()}(e)}}),[n,r,i,a]),p=Object(o.useCallback)((function(e){f(e,e.deltaY)}),[f]),d=Object(o.useCallback)((function(e){l.current=e.changedTouches[0].clientY}),[]),h=Object(o.useCallback)((function(e){var t=l.current-e.changedTouches[0].clientY;f(e,t)}),[f]),m=Object(o.useCallback)((function(e){if(e){var t=!!ut&&{passive:!1};e.addEventListener("wheel",p,t),e.addEventListener("touchstart",d,t),e.addEventListener("touchmove",h,t)}}),[h,d,p]),y=Object(o.useCallback)((function(e){e&&(e.removeEventListener("wheel",p,!1),e.removeEventListener("touchstart",d,!1),e.removeEventListener("touchmove",h,!1))}),[h,d,p]);return Object(o.useEffect)((function(){if(t){var e=c.current;return m(e),function(){y(e)}}}),[t,m,y]),function(e){c.current=e}}({isEnabled:void 0===r||r,onBottomArrive:e.onBottomArrive,onBottomLeave:e.onBottomLeave,onTopArrive:e.onTopArrive,onTopLeave:e.onTopLeave}),s=function(e){var t=e.isEnabled,n=e.accountForScrollbars,r=void 0===n||n,i=Object(o.useRef)({}),a=Object(o.useRef)(null),s=Object(o.useCallback)((function(e){if(gn){var t=document.body,n=t&&t.style;if(r&&fn.forEach((function(e){var t=n&&n[e];i.current[e]=t})),r&&vn<1){var o=parseInt(i.current.paddingRight,10)||0,a=document.body?document.body.clientWidth:0,s=window.innerWidth-a+o||0;Object.keys(pn).forEach((function(e){var t=pn[e];n&&(n[e]=t)})),n&&(n.paddingRight="".concat(s,"px"))}t&&yn()&&(t.addEventListener("touchmove",dn,bn),e&&(e.addEventListener("touchstart",mn,bn),e.addEventListener("touchmove",hn,bn))),vn+=1}}),[r]),u=Object(o.useCallback)((function(e){if(gn){var t=document.body,n=t&&t.style;vn=Math.max(vn-1,0),r&&vn<1&&fn.forEach((function(e){var t=i.current[e];n&&(n[e]=t)})),t&&yn()&&(t.removeEventListener("touchmove",dn,bn),e&&(e.removeEventListener("touchstart",mn,bn),e.removeEventListener("touchmove",hn,bn)))}}),[r]);return Object(o.useEffect)((function(){if(t){var e=a.current;return s(e),function(){u(e)}}}),[t,s,u]),function(e){a.current=e}}({isEnabled:n});return Oe(i.a.Fragment,null,n&&Oe("div",{onClick:wn,css:xn}),t((function(e){a(e),s(e)})))}var Cn={clearIndicator:Rt,container:function(e){var t=e.isDisabled;return{label:"container",direction:e.isRtl?"rtl":void 0,pointerEvents:t?"none":void 0,position:"relative"}},control:function(e){var t=e.isDisabled,n=e.isFocused,r=e.theme,o=r.colors,i=r.borderRadius,a=r.spacing;return{label:"control",alignItems:"center",backgroundColor:t?o.neutral5:o.neutral0,borderColor:t?o.neutral10:n?o.primary:o.neutral20,borderRadius:i,borderStyle:"solid",borderWidth:1,boxShadow:n?"0 0 0 1px ".concat(o.primary):void 0,cursor:"default",display:"flex",flexWrap:"wrap",justifyContent:"space-between",minHeight:a.controlHeight,outline:"0 !important",position:"relative",transition:"all 100ms","&:hover":{borderColor:n?o.primary:o.neutral30}}},dropdownIndicator:At,group:function(e){var t=e.theme.spacing;return{paddingBottom:2*t.baseUnit,paddingTop:2*t.baseUnit}},groupHeading:function(e){var t=e.theme.spacing;return{label:"group",color:"#999",cursor:"default",display:"block",fontSize:"75%",fontWeight:500,marginBottom:"0.25em",paddingLeft:3*t.baseUnit,paddingRight:3*t.baseUnit,textTransform:"uppercase"}},indicatorsContainer:function(){return{alignItems:"center",alignSelf:"stretch",display:"flex",flexShrink:0}},indicatorSeparator:function(e){var t=e.isDisabled,n=e.theme,r=n.spacing.baseUnit,o=n.colors;return{label:"indicatorSeparator",alignSelf:"stretch",backgroundColor:t?o.neutral10:o.neutral20,marginBottom:2*r,marginTop:2*r,width:1}},input:function(e){var t=e.isDisabled,n=e.theme,r=n.spacing,o=n.colors;return He({margin:r.baseUnit/2,paddingBottom:r.baseUnit/2,paddingTop:r.baseUnit/2,visibility:t?"hidden":"visible",color:o.neutral80},Bt)},loadingIndicator:function(e){var t=e.isFocused,n=e.size,r=e.theme,o=r.colors,i=r.spacing.baseUnit;return{label:"loadingIndicator",color:t?o.neutral60:o.neutral20,display:"flex",padding:2*i,transition:"color 150ms",alignSelf:"center",fontSize:n,lineHeight:1,marginRight:n,textAlign:"center",verticalAlign:"middle"}},loadingMessage:gt,menu:function(e){var t,n=e.placement,r=e.theme,o=r.borderRadius,i=r.spacing,a=r.colors;return je(t={label:"menu"},function(e){return e?{bottom:"top",top:"bottom"}[e]:"bottom"}(n),"100%"),je(t,"backgroundColor",a.neutral0),je(t,"borderRadius",o),je(t,"boxShadow","0 0 0 1px hsla(0, 0%, 0%, 0.1), 0 4px 11px hsla(0, 0%, 0%, 0.1)"),je(t,"marginBottom",i.menuGutter),je(t,"marginTop",i.menuGutter),je(t,"position","absolute"),je(t,"width","100%"),je(t,"zIndex",1),t},menuList:function(e){var t=e.maxHeight,n=e.theme.spacing.baseUnit;return{maxHeight:t,overflowY:"auto",paddingBottom:n,paddingTop:n,position:"relative",WebkitOverflowScrolling:"touch"}},menuPortal:function(e){var t=e.rect,n=e.offset,r=e.position;return{left:t.left,position:r,top:n,width:t.width,zIndex:1}},multiValue:function(e){var t=e.theme,n=t.spacing,r=t.borderRadius;return{label:"multiValue",backgroundColor:t.colors.neutral10,borderRadius:r/2,display:"flex",margin:n.baseUnit/2,minWidth:0}},multiValueLabel:function(e){var t=e.theme,n=t.borderRadius,r=t.colors,o=e.cropWithEllipsis;return{borderRadius:n/2,color:r.neutral80,fontSize:"85%",overflow:"hidden",padding:3,paddingLeft:6,textOverflow:o||void 0===o?"ellipsis":void 0,whiteSpace:"nowrap"}},multiValueRemove:function(e){var t=e.theme,n=t.spacing,r=t.borderRadius,o=t.colors;return{alignItems:"center",borderRadius:r/2,backgroundColor:e.isFocused?o.dangerLight:void 0,display:"flex",paddingLeft:n.baseUnit,paddingRight:n.baseUnit,":hover":{backgroundColor:o.dangerLight,color:o.danger}}},noOptionsMessage:yt,option:function(e){var t=e.isDisabled,n=e.isFocused,r=e.isSelected,o=e.theme,i=o.spacing,a=o.colors;return{label:"option",backgroundColor:r?a.primary:n?a.primary25:"transparent",color:t?a.neutral20:r?a.neutral0:"inherit",cursor:"default",display:"block",fontSize:"inherit",padding:"".concat(2*i.baseUnit,"px ").concat(3*i.baseUnit,"px"),width:"100%",userSelect:"none",WebkitTapHighlightColor:"rgba(0, 0, 0, 0)",":active":{backgroundColor:t?void 0:r?a.primary:a.primary50}}},placeholder:function(e){var t=e.theme,n=t.spacing;return{label:"placeholder",color:t.colors.neutral50,gridArea:"1 / 1 / 2 / 3",marginLeft:n.baseUnit/2,marginRight:n.baseUnit/2}},singleValue:function(e){var t=e.isDisabled,n=e.theme,r=n.spacing,o=n.colors;return{label:"singleValue",color:t?o.neutral40:o.neutral80,gridArea:"1 / 1 / 2 / 3",marginLeft:r.baseUnit/2,marginRight:r.baseUnit/2,maxWidth:"100%",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}},valueContainer:function(e){var t=e.theme.spacing,n=e.isMulti,r=e.hasValue;return{alignItems:"center",display:n&&r?"flex":"grid",flex:1,flexWrap:"wrap",padding:"".concat(t.baseUnit/2,"px ").concat(2*t.baseUnit,"px"),WebkitOverflowScrolling:"touch",position:"relative",overflow:"hidden"}}};var En,Sn={borderRadius:4,colors:{primary:"#2684FF",primary75:"#4C9AFF",primary50:"#B2D4FF",primary25:"#DEEBFF",danger:"#DE350B",dangerLight:"#FFBDAD",neutral0:"hsl(0, 0%, 100%)",neutral5:"hsl(0, 0%, 95%)",neutral10:"hsl(0, 0%, 90%)",neutral20:"hsl(0, 0%, 80%)",neutral30:"hsl(0, 0%, 70%)",neutral40:"hsl(0, 0%, 60%)",neutral50:"hsl(0, 0%, 50%)",neutral60:"hsl(0, 0%, 40%)",neutral70:"hsl(0, 0%, 30%)",neutral80:"hsl(0, 0%, 20%)",neutral90:"hsl(0, 0%, 10%)"},spacing:{baseUnit:4,controlHeight:38,menuGutter:8}},Tn={"aria-live":"polite",backspaceRemovesValue:!0,blurInputOnSelect:ot(),captureMenuScroll:!ot(),closeMenuOnSelect:!0,closeMenuOnScroll:!1,components:{},controlShouldRenderValue:!0,escapeClearsValue:!1,filterOption:function(e,t){if(e.data.__isNew__)return!0;var n=He({ignoreCase:!0,ignoreAccents:!0,stringify:un,trim:!0,matchFrom:"any"},En),r=n.ignoreCase,o=n.ignoreAccents,i=n.stringify,a=n.trim,s=n.matchFrom,u=a?sn(t):t,l=a?sn(i(e)):i(e);return r&&(u=u.toLowerCase(),l=l.toLowerCase()),o&&(u=an(u),l=on(l)),"start"===s?l.substr(0,u.length)===u:l.indexOf(u)>-1},formatGroupLabel:function(e){return e.label},getOptionLabel:function(e){return e.label},getOptionValue:function(e){return e.value},isDisabled:!1,isLoading:!1,isMulti:!1,isRtl:!1,isSearchable:!0,isOptionDisabled:function(e){return!!e.isDisabled},loadingMessage:function(){return"Loading..."},maxMenuHeight:300,minMenuHeight:140,menuIsOpen:!1,menuPlacement:"bottom",menuPosition:"absolute",menuShouldBlockScroll:!1,menuShouldScrollIntoView:!function(){try{return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}catch(s){return!1}}(),noOptionsMessage:function(){return"No options"},openMenuOnFocus:!1,openMenuOnClick:!0,options:[],pageSize:5,placeholder:"Select...",screenReaderStatus:function(e){var t=e.count;return"".concat(t," result").concat(1!==t?"s":""," available")},styles:{},tabIndex:0,tabSelectsValue:!0};function On(e,t,n,r){return{type:"option",data:t,isDisabled:Nn(e,t,n),isSelected:Fn(e,t,n),label:Rn(e,t),value:Mn(e,t),index:r}}function _n(e,t){return e.options.map((function(n,r){if("options"in n){var o=n.options.map((function(n,r){return On(e,n,t,r)})).filter((function(t){return An(e,t)}));return o.length>0?{type:"group",data:n,options:o,index:r}:void 0}var i=On(e,n,t,r);return An(e,i)?i:void 0})).filter(lt)}function Pn(e){return e.reduce((function(e,t){return"group"===t.type?e.push.apply(e,$t(t.options.map((function(e){return e.data})))):e.push(t.data),e}),[])}function An(e,t){var n=e.inputValue,r=void 0===n?"":n,o=t.data,i=t.isSelected,a=t.label,s=t.value;return(!Ln(e)||!i)&&In(e,{label:a,value:s,data:o},r)}var Rn=function(e,t){return e.getOptionLabel(t)},Mn=function(e,t){return e.getOptionValue(t)};function Nn(e,t,n){return"function"===typeof e.isOptionDisabled&&e.isOptionDisabled(t,n)}function Fn(e,t,n){if(n.indexOf(t)>-1)return!0;if("function"===typeof e.isOptionSelected)return e.isOptionSelected(t,n);var r=Mn(e,t);return n.some((function(t){return Mn(e,t)===r}))}function In(e,t,n){return!e.filterOption||e.filterOption(t,n)}var Ln=function(e){var t=e.hideSelectedOptions,n=e.isMulti;return void 0===t?n:t},Dn=1,Bn=function(e){Be(n,e);var t=We(n);function n(e){var r;return Fe(this,n),(r=t.call(this,e)).state={ariaSelection:null,focusedOption:null,focusedValue:null,inputIsHidden:!1,isFocused:!1,selectValue:[],clearFocusValueOnUpdate:!1,prevWasFocused:!1,inputIsHiddenAfterUpdate:void 0,prevProps:void 0},r.blockOptionHover=!1,r.isComposing=!1,r.commonProps=void 0,r.initialTouchX=0,r.initialTouchY=0,r.instancePrefix="",r.openAfterFocus=!1,r.scrollToFocusedOptionOnUpdate=!1,r.userIsDragging=void 0,r.controlRef=null,r.getControlRef=function(e){r.controlRef=e},r.focusedOptionRef=null,r.getFocusedOptionRef=function(e){r.focusedOptionRef=e},r.menuListRef=null,r.getMenuListRef=function(e){r.menuListRef=e},r.inputRef=null,r.getInputRef=function(e){r.inputRef=e},r.focus=r.focusInput,r.blur=r.blurInput,r.onChange=function(e,t){var n=r.props,o=n.onChange,i=n.name;t.name=i,r.ariaOnChange(e,t),o(e,t)},r.setValue=function(e,t,n){var o=r.props,i=o.closeMenuOnSelect,a=o.isMulti;r.onInputChange("",{action:"set-value"}),i&&(r.setState({inputIsHiddenAfterUpdate:!a}),r.onMenuClose()),r.setState({clearFocusValueOnUpdate:!0}),r.onChange(e,{action:t,option:n})},r.selectOption=function(e){var t=r.props,n=t.blurInputOnSelect,o=t.isMulti,i=t.name,a=r.state.selectValue,s=o&&r.isOptionSelected(e,a),u=r.isOptionDisabled(e,a);if(s){var l=r.getOptionValue(e);r.setValue(a.filter((function(e){return r.getOptionValue(e)!==l})),"deselect-option",e)}else{if(u)return void r.ariaOnChange(e,{action:"select-option",option:e,name:i});o?r.setValue([].concat($t(a),[e]),"select-option",e):r.setValue(e,"select-option")}n&&r.blurInput()},r.removeValue=function(e){var t=r.props.isMulti,n=r.state.selectValue,o=r.getOptionValue(e),i=n.filter((function(e){return r.getOptionValue(e)!==o})),a=ct(t,i,i[0]||null);r.onChange(a,{action:"remove-value",removedValue:e}),r.focusInput()},r.clearValue=function(){var e=r.state.selectValue;r.onChange(ct(r.props.isMulti,[],null),{action:"clear",removedValues:e})},r.popValue=function(){var e=r.props.isMulti,t=r.state.selectValue,n=t[t.length-1],o=t.slice(0,t.length-1),i=ct(e,o,o[0]||null);r.onChange(i,{action:"pop-value",removedValue:n})},r.getValue=function(){return r.state.selectValue},r.cx=function(){for(var e=arguments.length,t=new Array(e),n=0;n5||i>5}},r.onTouchEnd=function(e){r.userIsDragging||(r.controlRef&&!r.controlRef.contains(e.target)&&r.menuListRef&&!r.menuListRef.contains(e.target)&&r.blurInput(),r.initialTouchX=0,r.initialTouchY=0)},r.onControlTouchEnd=function(e){r.userIsDragging||r.onControlMouseDown(e)},r.onClearIndicatorTouchEnd=function(e){r.userIsDragging||r.onClearIndicatorMouseDown(e)},r.onDropdownIndicatorTouchEnd=function(e){r.userIsDragging||r.onDropdownIndicatorMouseDown(e)},r.handleInputChange=function(e){var t=e.currentTarget.value;r.setState({inputIsHiddenAfterUpdate:!1}),r.onInputChange(t,{action:"input-change"}),r.props.menuIsOpen||r.onMenuOpen()},r.onInputFocus=function(e){r.props.onFocus&&r.props.onFocus(e),r.setState({inputIsHiddenAfterUpdate:!1,isFocused:!0}),(r.openAfterFocus||r.props.openMenuOnFocus)&&r.openMenu("first"),r.openAfterFocus=!1},r.onInputBlur=function(e){r.menuListRef&&r.menuListRef.contains(document.activeElement)?r.inputRef.focus():(r.props.onBlur&&r.props.onBlur(e),r.onInputChange("",{action:"input-blur"}),r.onMenuClose(),r.setState({focusedValue:null,isFocused:!1}))},r.onOptionHover=function(e){r.blockOptionHover||r.state.focusedOption===e||r.setState({focusedOption:e})},r.shouldHideSelectedOptions=function(){return Ln(r.props)},r.onKeyDown=function(e){var t=r.props,n=t.isMulti,o=t.backspaceRemovesValue,i=t.escapeClearsValue,a=t.inputValue,s=t.isClearable,u=t.isDisabled,l=t.menuIsOpen,c=t.onKeyDown,f=t.tabSelectsValue,p=t.openMenuOnFocus,d=r.state,h=d.focusedOption,m=d.focusedValue,y=d.selectValue;if(!u&&("function"!==typeof c||(c(e),!e.defaultPrevented))){switch(r.blockOptionHover=!0,e.key){case"ArrowLeft":if(!n||a)return;r.focusValue("previous");break;case"ArrowRight":if(!n||a)return;r.focusValue("next");break;case"Delete":case"Backspace":if(a)return;if(m)r.removeValue(m);else{if(!o)return;n?r.popValue():s&&r.clearValue()}break;case"Tab":if(r.isComposing)return;if(e.shiftKey||!l||!f||!h||p&&r.isOptionSelected(h,y))return;r.selectOption(h);break;case"Enter":if(229===e.keyCode)break;if(l){if(!h)return;if(r.isComposing)return;r.selectOption(h);break}return;case"Escape":l?(r.setState({inputIsHiddenAfterUpdate:!1}),r.onInputChange("",{action:"menu-close"}),r.onMenuClose()):s&&i&&r.clearValue();break;case" ":if(a)return;if(!l){r.openMenu("first");break}if(!h)return;r.selectOption(h);break;case"ArrowUp":l?r.focusOption("up"):r.openMenu("last");break;case"ArrowDown":l?r.focusOption("down"):r.openMenu("first");break;case"PageUp":if(!l)return;r.focusOption("pageup");break;case"PageDown":if(!l)return;r.focusOption("pagedown");break;case"Home":if(!l)return;r.focusOption("first");break;case"End":if(!l)return;r.focusOption("last");break;default:return}e.preventDefault()}},r.instancePrefix="react-select-"+(r.props.instanceId||++Dn),r.state.selectValue=Ge(e.value),r}return Le(n,[{key:"componentDidMount",value:function(){this.startListeningComposition(),this.startListeningToTouch(),this.props.closeMenuOnScroll&&document&&document.addEventListener&&document.addEventListener("scroll",this.onScroll,!0),this.props.autoFocus&&this.focusInput()}},{key:"componentDidUpdate",value:function(e){var t=this.props,n=t.isDisabled,r=t.menuIsOpen,o=this.state.isFocused;(o&&!n&&e.isDisabled||o&&r&&!e.menuIsOpen)&&this.focusInput(),o&&n&&!e.isDisabled&&this.setState({isFocused:!1},this.onMenuClose),this.menuListRef&&this.focusedOptionRef&&this.scrollToFocusedOptionOnUpdate&&(!function(e,t){var n=e.getBoundingClientRect(),r=t.getBoundingClientRect(),o=t.offsetHeight/3;r.bottom+o>n.bottom?tt(e,Math.min(t.offsetTop+t.clientHeight-e.offsetHeight+o,e.scrollHeight)):r.top-o-1&&(a=s)}this.scrollToFocusedOptionOnUpdate=!(o&&this.menuListRef),this.setState({inputIsHiddenAfterUpdate:!1,focusedValue:null,focusedOption:i[a]},(function(){return t.onMenuOpen()}))}},{key:"focusValue",value:function(e){var t=this.state,n=t.selectValue,r=t.focusedValue;if(this.props.isMulti){this.setState({focusedOption:null});var o=n.indexOf(r);r||(o=-1);var i=n.length-1,a=-1;if(n.length){switch(e){case"previous":a=0===o?0:-1===o?i:o-1;break;case"next":o>-1&&o0&&void 0!==arguments[0]?arguments[0]:"first",t=this.props.pageSize,n=this.state.focusedOption,r=this.getFocusableOptions();if(r.length){var o=0,i=r.indexOf(n);n||(i=-1),"up"===e?o=i>0?i-1:r.length-1:"down"===e?o=(i+1)%r.length:"pageup"===e?(o=i-t)<0&&(o=0):"pagedown"===e?(o=i+t)>r.length-1&&(o=r.length-1):"last"===e&&(o=r.length-1),this.scrollToFocusedOptionOnUpdate=!0,this.setState({focusedOption:r[o],focusedValue:null})}}},{key:"getTheme",value:function(){return this.props.theme?"function"===typeof this.props.theme?this.props.theme(Sn):He(He({},Sn),this.props.theme):Sn}},{key:"getCommonProps",value:function(){var e=this.clearValue,t=this.cx,n=this.getStyles,r=this.getValue,o=this.selectOption,i=this.setValue,a=this.props,s=a.isMulti,u=a.isRtl,l=a.options;return{clearValue:e,cx:t,getStyles:n,getValue:r,hasValue:this.hasValue(),isMulti:s,isRtl:u,options:l,selectOption:o,selectProps:a,setValue:i,theme:this.getTheme()}}},{key:"hasValue",value:function(){return this.state.selectValue.length>0}},{key:"hasOptions",value:function(){return!!this.getFocusableOptions().length}},{key:"isClearable",value:function(){var e=this.props,t=e.isClearable,n=e.isMulti;return void 0===t?n:t}},{key:"isOptionDisabled",value:function(e,t){return Nn(this.props,e,t)}},{key:"isOptionSelected",value:function(e,t){return Fn(this.props,e,t)}},{key:"filterOption",value:function(e,t){return In(this.props,e,t)}},{key:"formatOptionLabel",value:function(e,t){if("function"===typeof this.props.formatOptionLabel){var n=this.props.inputValue,r=this.state.selectValue;return this.props.formatOptionLabel(e,{context:t,inputValue:n,selectValue:r})}return this.getOptionLabel(e)}},{key:"formatGroupLabel",value:function(e){return this.props.formatGroupLabel(e)}},{key:"startListeningComposition",value:function(){document&&document.addEventListener&&(document.addEventListener("compositionstart",this.onCompositionStart,!1),document.addEventListener("compositionend",this.onCompositionEnd,!1))}},{key:"stopListeningComposition",value:function(){document&&document.removeEventListener&&(document.removeEventListener("compositionstart",this.onCompositionStart),document.removeEventListener("compositionend",this.onCompositionEnd))}},{key:"startListeningToTouch",value:function(){document&&document.addEventListener&&(document.addEventListener("touchstart",this.onTouchStart,!1),document.addEventListener("touchmove",this.onTouchMove,!1),document.addEventListener("touchend",this.onTouchEnd,!1))}},{key:"stopListeningToTouch",value:function(){document&&document.removeEventListener&&(document.removeEventListener("touchstart",this.onTouchStart),document.removeEventListener("touchmove",this.onTouchMove),document.removeEventListener("touchend",this.onTouchEnd))}},{key:"renderInput",value:function(){var e=this.props,t=e.isDisabled,n=e.isSearchable,o=e.inputId,a=e.inputValue,s=e.tabIndex,u=e.form,l=e.menuIsOpen,c=this.getComponents().Input,f=this.state,p=f.inputIsHidden,d=f.ariaSelection,h=this.commonProps,m=o||this.getElementId("input"),y=He(He({"aria-autocomplete":"list","aria-expanded":l,"aria-haspopup":!0,"aria-controls":this.getElementId("listbox"),"aria-owns":this.getElementId("listbox"),"aria-errormessage":this.props["aria-errormessage"],"aria-invalid":this.props["aria-invalid"],"aria-label":this.props["aria-label"],"aria-labelledby":this.props["aria-labelledby"],role:"combobox"},!n&&{"aria-readonly":!0}),this.hasValue()?"initial-input-focus"===(null===d||void 0===d?void 0:d.action)&&{"aria-describedby":this.getElementId("live-region")}:{"aria-describedby":this.getElementId("placeholder")});return n?i.a.createElement(c,r({},h,{autoCapitalize:"none",autoComplete:"off",autoCorrect:"off",id:m,innerRef:this.getInputRef,isDisabled:t,isHidden:p,onBlur:this.onInputBlur,onChange:this.handleInputChange,onFocus:this.onInputFocus,spellCheck:"false",tabIndex:s,form:u,type:"text",value:a},y)):i.a.createElement(cn,r({id:m,innerRef:this.getInputRef,onBlur:this.onInputBlur,onChange:Qe,onFocus:this.onInputFocus,disabled:t,tabIndex:s,inputMode:"none",form:u,value:""},y))}},{key:"renderPlaceholderOrValue",value:function(){var e=this,t=this.getComponents(),n=t.MultiValue,o=t.MultiValueContainer,a=t.MultiValueLabel,s=t.MultiValueRemove,u=t.SingleValue,l=t.Placeholder,c=this.commonProps,f=this.props,p=f.controlShouldRenderValue,d=f.isDisabled,h=f.isMulti,m=f.inputValue,y=f.placeholder,g=this.state,v=g.selectValue,b=g.focusedValue,w=g.isFocused;if(!this.hasValue()||!p)return m?null:i.a.createElement(l,r({},c,{key:"placeholder",isDisabled:d,isFocused:w,innerProps:{id:this.getElementId("placeholder")}}),y);if(h)return v.map((function(t,u){var l=t===b;return i.a.createElement(n,r({},c,{components:{Container:o,Label:a,Remove:s},isFocused:l,isDisabled:d,key:"".concat(e.getOptionValue(t),"-").concat(u),index:u,removeProps:{onClick:function(){return e.removeValue(t)},onTouchEnd:function(){return e.removeValue(t)},onMouseDown:function(e){e.preventDefault(),e.stopPropagation()}},data:t}),e.formatOptionLabel(t,"value"))}));if(m)return null;var x=v[0];return i.a.createElement(u,r({},c,{data:x,isDisabled:d}),this.formatOptionLabel(x,"value"))}},{key:"renderClearIndicator",value:function(){var e=this.getComponents().ClearIndicator,t=this.commonProps,n=this.props,o=n.isDisabled,a=n.isLoading,s=this.state.isFocused;if(!this.isClearable()||!e||o||!this.hasValue()||a)return null;var u={onMouseDown:this.onClearIndicatorMouseDown,onTouchEnd:this.onClearIndicatorTouchEnd,"aria-hidden":"true"};return i.a.createElement(e,r({},t,{innerProps:u,isFocused:s}))}},{key:"renderLoadingIndicator",value:function(){var e=this.getComponents().LoadingIndicator,t=this.commonProps,n=this.props,o=n.isDisabled,a=n.isLoading,s=this.state.isFocused;if(!e||!a)return null;return i.a.createElement(e,r({},t,{innerProps:{"aria-hidden":"true"},isDisabled:o,isFocused:s}))}},{key:"renderIndicatorSeparator",value:function(){var e=this.getComponents(),t=e.DropdownIndicator,n=e.IndicatorSeparator;if(!t||!n)return null;var o=this.commonProps,a=this.props.isDisabled,s=this.state.isFocused;return i.a.createElement(n,r({},o,{isDisabled:a,isFocused:s}))}},{key:"renderDropdownIndicator",value:function(){var e=this.getComponents().DropdownIndicator;if(!e)return null;var t=this.commonProps,n=this.props.isDisabled,o=this.state.isFocused,a={onMouseDown:this.onDropdownIndicatorMouseDown,onTouchEnd:this.onDropdownIndicatorTouchEnd,"aria-hidden":"true"};return i.a.createElement(e,r({},t,{innerProps:a,isDisabled:n,isFocused:o}))}},{key:"renderMenu",value:function(){var e=this,t=this.getComponents(),n=t.Group,o=t.GroupHeading,a=t.Menu,s=t.MenuList,u=t.MenuPortal,l=t.LoadingMessage,c=t.NoOptionsMessage,f=t.Option,p=this.commonProps,d=this.state.focusedOption,h=this.props,m=h.captureMenuScroll,y=h.inputValue,g=h.isLoading,v=h.loadingMessage,b=h.minMenuHeight,w=h.maxMenuHeight,x=h.menuIsOpen,k=h.menuPlacement,C=h.menuPosition,E=h.menuPortalTarget,S=h.menuShouldBlockScroll,T=h.menuShouldScrollIntoView,O=h.noOptionsMessage,_=h.onMenuScrollToTop,P=h.onMenuScrollToBottom;if(!x)return null;var A,R=function(t,n){var o=t.type,a=t.data,s=t.isDisabled,u=t.isSelected,l=t.label,c=t.value,h=d===a,m=s?void 0:function(){return e.onOptionHover(a)},y=s?void 0:function(){return e.selectOption(a)},g="".concat(e.getElementId("option"),"-").concat(n),v={id:g,onClick:y,onMouseMove:m,onMouseOver:m,tabIndex:-1};return i.a.createElement(f,r({},p,{innerProps:v,data:a,isDisabled:s,isSelected:u,key:g,label:l,type:o,value:c,isFocused:h,innerRef:h?e.getFocusedOptionRef:void 0}),e.formatOptionLabel(t.data,"menu"))};if(this.hasOptions())A=this.getCategorizedOptions().map((function(t){if("group"===t.type){var a=t.data,s=t.options,u=t.index,l="".concat(e.getElementId("group"),"-").concat(u),c="".concat(l,"-heading");return i.a.createElement(n,r({},p,{key:l,data:a,options:s,Heading:o,headingProps:{id:c,data:t.data},label:e.formatGroupLabel(t.data)}),t.options.map((function(e){return R(e,"".concat(u,"-").concat(e.index))})))}if("option"===t.type)return R(t,"".concat(t.index))}));else if(g){var M=v({inputValue:y});if(null===M)return null;A=i.a.createElement(l,p,M)}else{var N=O({inputValue:y});if(null===N)return null;A=i.a.createElement(c,p,N)}var F={minMenuHeight:b,maxMenuHeight:w,menuPlacement:k,menuPosition:C,menuShouldScrollIntoView:T},I=i.a.createElement(ht,r({},p,F),(function(t){var n=t.ref,o=t.placerProps,u=o.placement,l=o.maxHeight;return i.a.createElement(a,r({},p,F,{innerRef:n,innerProps:{onMouseDown:e.onMenuMouseDown,onMouseMove:e.onMenuMouseMove,id:e.getElementId("listbox")},isLoading:g,placement:u}),i.a.createElement(kn,{captureEnabled:m,onTopArrive:_,onBottomArrive:P,lockEnabled:S},(function(t){return i.a.createElement(s,r({},p,{innerRef:function(n){e.getMenuListRef(n),t(n)},isLoading:g,maxHeight:l,focusedOption:d}),A)})))}));return E||"fixed"===C?i.a.createElement(u,r({},p,{appendTo:E,controlElement:this.controlRef,menuPlacement:k,menuPosition:C}),I):I}},{key:"renderFormField",value:function(){var e=this,t=this.props,n=t.delimiter,r=t.isDisabled,o=t.isMulti,a=t.name,s=this.state.selectValue;if(a&&!r){if(o){if(n){var u=s.map((function(t){return e.getOptionValue(t)})).join(n);return i.a.createElement("input",{name:a,type:"hidden",value:u})}var l=s.length>0?s.map((function(t,n){return i.a.createElement("input",{key:"i-".concat(n),name:a,type:"hidden",value:e.getOptionValue(t)})})):i.a.createElement("input",{name:a,type:"hidden"});return i.a.createElement("div",null,l)}var c=s[0]?this.getOptionValue(s[0]):"";return i.a.createElement("input",{name:a,type:"hidden",value:c})}}},{key:"renderLiveRegion",value:function(){var e=this.commonProps,t=this.state,n=t.ariaSelection,o=t.focusedOption,a=t.focusedValue,s=t.isFocused,u=t.selectValue,l=this.getFocusableOptions();return i.a.createElement(Gt,r({},e,{id:this.getElementId("live-region"),ariaSelection:n,focusedOption:o,focusedValue:a,isFocused:s,selectValue:u,focusableOptions:l}))}},{key:"render",value:function(){var e=this.getComponents(),t=e.Control,n=e.IndicatorsContainer,o=e.SelectContainer,a=e.ValueContainer,s=this.props,u=s.className,l=s.id,c=s.isDisabled,f=s.menuIsOpen,p=this.state.isFocused,d=this.commonProps=this.getCommonProps();return i.a.createElement(o,r({},d,{className:u,innerProps:{id:l,onKeyDown:this.onKeyDown},isDisabled:c,isFocused:p}),this.renderLiveRegion(),i.a.createElement(t,r({},d,{innerRef:this.getControlRef,innerProps:{onMouseDown:this.onControlMouseDown,onTouchEnd:this.onControlTouchEnd},isDisabled:c,isFocused:p,menuIsOpen:f}),i.a.createElement(a,r({},d,{isDisabled:c}),this.renderPlaceholderOrValue(),this.renderInput()),i.a.createElement(n,r({},d,{isDisabled:c}),this.renderClearIndicator(),this.renderLoadingIndicator(),this.renderIndicatorSeparator(),this.renderDropdownIndicator())),this.renderMenu(),this.renderFormField())}}],[{key:"getDerivedStateFromProps",value:function(e,t){var n=t.prevProps,r=t.clearFocusValueOnUpdate,o=t.inputIsHiddenAfterUpdate,i=t.ariaSelection,a=t.isFocused,s=t.prevWasFocused,u=e.options,l=e.value,c=e.menuIsOpen,f=e.inputValue,p=e.isMulti,d=Ge(l),h={};if(n&&(l!==n.value||u!==n.options||c!==n.menuIsOpen||f!==n.inputValue)){var m=c?function(e,t){return Pn(_n(e,t))}(e,d):[],y=r?function(e,t){var n=e.focusedValue,r=e.selectValue.indexOf(n);if(r>-1){if(t.indexOf(n)>-1)return n;if(r-1?n:t[0]}(t,m),focusedValue:y,clearFocusValueOnUpdate:!1}}var g=null!=o&&e!==n?{inputIsHidden:o,inputIsHiddenAfterUpdate:void 0}:{},v=i,b=a&&s;return a&&!b&&(v={value:ct(p,d,d[0]||null),options:d,action:"initial-input-focus"},b=!s),"initial-input-focus"===(null===i||void 0===i?void 0:i.action)&&(v=null),He(He(He({},h),g),{},{prevProps:e,ariaSelection:v,prevWasFocused:b})}}]),n}(o.Component);function jn(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i=[],a=!0,s=!1;try{for(n=n.call(e);!(a=(r=n.next()).done)&&(i.push(r.value),!t||i.length!==t);a=!0);}catch(u){s=!0,o=u}finally{try{a||null==n.return||n.return()}finally{if(s)throw o}}return i}}(e,t)||Ht(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}Bn.defaultProps=Tn;var Un=["defaultInputValue","defaultMenuIsOpen","defaultValue","inputValue","menuIsOpen","onChange","onInputChange","onMenuClose","onMenuOpen","value"];n(55),n(59),n(61),n(65),n(66),n(67);var zn=i.a.forwardRef((function(e,t){var n=function(e){var t=e.defaultInputValue,n=void 0===t?"":t,r=e.defaultMenuIsOpen,i=void 0!==r&&r,a=e.defaultValue,s=void 0===a?null:a,u=e.inputValue,l=e.menuIsOpen,c=e.onChange,f=e.onInputChange,p=e.onMenuClose,d=e.onMenuOpen,h=e.value,m=Me(e,Un),y=jn(Object(o.useState)(void 0!==u?u:n),2),g=y[0],v=y[1],b=jn(Object(o.useState)(void 0!==l?l:i),2),w=b[0],x=b[1],k=jn(Object(o.useState)(void 0!==h?h:s),2),C=k[0],E=k[1],S=Object(o.useCallback)((function(e,t){"function"===typeof c&&c(e,t),E(e)}),[c]),T=Object(o.useCallback)((function(e,t){var n;"function"===typeof f&&(n=f(e,t)),v(void 0!==n?n:e)}),[f]),O=Object(o.useCallback)((function(){"function"===typeof d&&d(),x(!0)}),[d]),_=Object(o.useCallback)((function(){"function"===typeof p&&p(),x(!1)}),[p]),P=void 0!==u?u:g,A=void 0!==l?l:w,R=void 0!==h?h:C;return He(He({},m),{},{inputValue:P,menuIsOpen:A,onChange:S,onInputChange:T,onMenuClose:_,onMenuOpen:O,value:R})}(e);return i.a.createElement(Bn,r({ref:t},n))}));o.Component,t.a=zn},function(e,t,n){"use strict";function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var s=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(s&&u){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),x(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;x(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:C(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}(e.exports);try{regeneratorRuntime=r}catch(o){Function("r","regeneratorRuntime = r")(r)}},function(e,t,n){"use strict";var r=n(21),o="function"===typeof Symbol&&Symbol.for,i=o?Symbol.for("react.element"):60103,a=o?Symbol.for("react.portal"):60106,s=o?Symbol.for("react.fragment"):60107,u=o?Symbol.for("react.strict_mode"):60108,l=o?Symbol.for("react.profiler"):60114,c=o?Symbol.for("react.provider"):60109,f=o?Symbol.for("react.context"):60110,p=o?Symbol.for("react.forward_ref"):60112,d=o?Symbol.for("react.suspense"):60113,h=o?Symbol.for("react.memo"):60115,m=o?Symbol.for("react.lazy"):60116,y="function"===typeof Symbol&&Symbol.iterator;function g(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;nA.length&&A.push(e)}function N(e,t,n){return null==e?0:function e(t,n,r,o){var s=typeof t;"undefined"!==s&&"boolean"!==s||(t=null);var u=!1;if(null===t)u=!0;else switch(s){case"string":case"number":u=!0;break;case"object":switch(t.$$typeof){case i:case a:u=!0}}if(u)return r(o,t,""===n?"."+F(t,0):n),1;if(u=0,n=""===n?".":n+":",Array.isArray(t))for(var l=0;l